20
ATG RQL Repository Query Language

ATG Advanced RQL

Embed Size (px)

DESCRIPTION

some ATG RQL tricks

Citation preview

Page 1: ATG Advanced RQL

ATG RQLRepository Query Language

Page 2: ATG Advanced RQL

RQL

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

Page 3: ATG Advanced RQL

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")

Page 4: ATG Advanced RQL

RQL RANGE

• age > 30 RANGE +10

• age > 30 RANGE 10+

• age > 30 RANGE 40+10

Page 5: ATG Advanced RQL

atg.repository.QueryBuilder

defines the available query operations

build Query objects

Page 6: ATG Advanced RQL

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);

Page 7: ATG Advanced RQL

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);

Page 8: ATG Advanced RQL

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);

Page 9: ATG Advanced RQL

Complex QueryRepositoryView 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);

Page 10: ATG Advanced RQL

atg.repository.QueryOptions

let you limit the size of the result set, direct how the result set should be sorted,

precache specified properties

Page 11: ATG Advanced RQL

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));

Page 12: ATG Advanced RQL

atg.repository.rql.RqlStatementRepositoryView view = getRepository().getView(USER);

RqlStatement statement = RqlStatement.parseRqlStatement("lastName STARTS WITH ?0");

Object params[] = { new String("m") };

RepositoryItem items[] = statement.executeQuery(view, params);

Page 13: ATG Advanced RQL

Operation tags

<add-item>

<update-item><remove-item>

to add or update or remove items

<export-items><import-items>

to export and import items 

<print-item> to print item 

<transaction>

to maintain transactions while adding or removing items.

Page 14: ATG Advanced RQL

Generate DDL

<print-ddl/>

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

startSQLRepository

Page 15: ATG Advanced RQL

To check what items are in cache

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

Page 16: ATG Advanced RQL

Querying using date or timestamp by using RQLdate <query-items item-descriptor="order">

creationDate>

date("2011-10-10") and state="SUBMITTED" </query-items>

Timestamp

<query-items item-descriptor="order"> creationDate>

date("2011-10-10 10:00:00 EST") and state="SUBMITTED"

</query-items>

Page 17: ATG Advanced RQL

How to get sysdate in RQL named query?

Page 18: ATG Advanced RQL

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.

Page 19: ATG Advanced RQL

<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>

Page 20: ATG Advanced RQL

QUESTIONS?