You are on page 1of 20

Repository Query Language

RQL

generic language for formulating queries that map to any repository implementation, such as SQL or LDAP.

Multi-Valued Property Queries

interests INCLUDES "biking


interests INCLUDES ANY { "biking", "swimming" } interests INCLUDES ALL { "biking", "swimming" }

addresses INCLUDES ITEM (zip = "48322" AND state = "MI")

RQL RANGE

age > 30 RANGE +10


age > 30 RANGE 10+ age > 30 RANGE 40+10

atg.repository.QueryBuilder

defines the available query operations

build Query objects

ComparisonQuery
RepositoryView userView = getRepository().getItemDescriptor(USER).getRepositoryView();
QueryBuilder userBuilder = userView.getQueryBuilder(); QueryExpression userType = userBuilder.createPropertyQueryExpression(USER_TYPE); QueryExpression two = userBuilder.createConstantQueryExpression(USER_TYPE_2); Query userTypeIsTwo = userBuilder.createComparisonQuery(userType, two, QueryBuilder.EQUALS); RepositoryItem[] answer = userView.executeQuery(userTypeIsTwo);

PatternMatchQuery
RepositoryView employeeView = getRepository().getView(USER);
QueryBuilder queryBuilder = employeeView.getQueryBuilder();

QueryExpression propertyExpression = queryBuilder.createPropertyQueryExpression(login);


QueryExpression valueExpression = queryBuilder.createConstantQueryExpression(name); Query accountQuery = queryBuilder.createPatternMatchQuery(propertyExpression, valueExpression, QueryBuilder.CONTAINS); RepositoryItem[] repositoryItems = employeeView.executeQuery(accountQuery);

IncludesQuery
RepositoryView employeeView = getRepository().getView(USER);
QueryBuilder queryBuilder = employeeView.getQueryBuilder(); QueryExpression propertyExpression = queryBuilder.createPropertyQueryExpression("user_id"); QueryExpression valueExpression = queryBuilder.createConstantQueryExpression(ids); Query employeeQuery = queryBuilder.createIncludesQuery(valueExpression, propertyExpression); RepositoryItem[] repositoryItems = employeeView.executeQuery(employeeQuery);

Complex Query
RepositoryView userView = getRepository().getItemDescriptor(USER).getRepositoryView(); QueryBuilder userBuilder = userView.getQueryBuilder(); QueryExpression userType = userBuilder.createPropertyQueryExpression("userType"); QueryExpression two = userBuilder.createConstantQueryExpression(2); Query userTypeLTTwo = userBuilder.createComparisonQuery(userType, two, QueryBuilder.LESS_THAN); QueryExpression login = userBuilder.createPropertyQueryExpression("login"); QueryExpression j = userBuilder.createConstantQueryExpression("j"); Query startsWithJ = userBuilder.createPatternMatchQuery(login, j, QueryBuilder.STARTS_WITH); Query[] pieces = { userTypeLTTwo, startsWithJ }; Query andQuery = userBuilder.createAndQuery(pieces); RepositoryItem[] answer = userView.executeQuery(andQuery);

atg.repository.QueryOptions
let you limit the size of the result set, direct how the result set should be sorted,

precache specified properties

QueryOptions
RepositoryView view = getRepository().getView(USER);
Query query = view.getQueryBuilder().createUnconstrainedQuery(); String[] precachedPropertyNames = { "login", "password" };

SortDirectives sortDirectives = new SortDirectives();


sortDirectives.addDirective(new SortDirective( "login", SortDirective.DIR_ASCENDING));

RepositoryItem[] items = view.executeQuery(query, new QueryOptions(0, 5, sortDirectives, precachedPropertyNames));

atg.repository.rql.RqlStatement
RepositoryView view = getRepository().getView(USER);
RqlStatement statement = RqlStatement.parseRqlStatement("lastName STARTS WITH ?0"); Object params[] = { new String("m") }; RepositoryItem items[] = statement.executeQuery(view, params);

Operation tags
<add-item>

<update-item>
<remove-item> <export-items> <import-items> <print-item> <transaction>

to add or update or remove items

to export and import items to print item to maintain transactions while adding or removing items.

Generate DDL
<print-ddl/>

startSQLRepository bin\startSQLRepository -m <module-name> repository /atg/commerce/catalog/ProductCatalog -outputSQLFile product_catalog.sql

To check what items are in cache

<dump-caches item-descriptors="skuSpecialPriceRules" dumptype="both"/>

Querying using date or timestamp by using RQL


date
<query-items item-descriptor="order"> creationDate> date("2011-10-10") and state="SUBMITTED" </query-items>
<query-items item-descriptor="order"> creationDate> date("2011-10-10 10:00:00 EST") and state="SUBMITTED" </query-items>

Timestamp

How to get sysdate in RQL named query?

Repository filtering

Use the <rql-filter> tag in the definition file for an item descriptor.
Set the filterQuery property of the item descriptor to a Query object. Set the rqlFilterString property of the item descriptor to an RQL string, which is compiled into the Query object that defines the filter.

<rql-filter>
<item-descriptor name="article">
<rql-filter> <rql>name starts with ?0 or availabilityDate &lt; ?1</rql> <param value="n"></param> <param bean="/myApp.IssueDate"></param> </rql-filter> <table name="article" id-column-names="article_id"> <property name="name" /> <property name="date" /> </table> </item-descriptor>

You might also like