Adichatz generates brute queries to fetch data from Application server or database (by default, one query per entity).
For example, the query for a Customer class is described by an XML file called $projectDirectory/resources/xml/model/customer/CustomerQUERYGENERATED.axml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <queryTree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" queryType="JQL" entityURI="adi://myproject/model.customer/CustomerMM" suffix="c" xsi:noNamespaceSchemaLocation="http://www.adichatz.org/xsd/v0.8.7/generator/queryTree.xsd"> <jointure fieldName="address" jointureType="join fetch " suffix="a"/> <jointure fieldName="store" jointureType="join fetch " suffix="s"/> <queryPreference orderByClause="c.customerId"> <parameter id="active" property="active" style="SWT.RIGHT" suffix="c"/> <parameter id="address" property="address" suffix="c"/> <parameter id="createDate" property="createDate" style="SWT.CENTER" suffix="c"/> <parameter id="customerId" property="customerId" style="SWT.RIGHT" suffix="c"/> <parameter id="email" property="email" suffix="c"/> <parameter id="firstName" property="firstName" suffix="c"/> <parameter id="lastName" property="lastName" suffix="c"/> <parameter id="lastUpdate" property="lastUpdate" style="SWT.CENTER" suffix="c"/> <parameter id="store" property="store" suffix="c"/> </queryPreference> </queryTree>
Remarks:
The query description contains 2 parts:
- Jointures part describes other entities linked to each rows fetched by the query.
- The QueryPreference part describes the default attributes managed in the outline panel of a Query Editor. Here, only optional query parameters are listed.
Complete query by changing XML elements:
Now, we want to complete the query in two ways:
- Add jointures to fetch the staff of the store and the address with the city and the country of the store.
- Add a preference to select only Customers from USA (countryId=103) a new pagination, a new column orders and two filters.
Queries could be easily changed as shown below:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <queryTree xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" queryType="JQL" entityURI="adi://myproject/model.customer/CustomerMM" suffix="c" xsi:noNamespaceSchemaLocation="http://www.adichatz.org/xsd/v0.8.7/generator/queryTree.xsd"> <jointure fieldName="address" jointureType="JOIN FETCH" suffix="a"> <jointure fieldName="city" jointureType="JOIN FETCH" suffix="ci"> <jointure fieldName="country" jointureType="JOIN FETCH" suffix="co"/> </jointure> </jointure> <jointure fieldName="store" jointureType="JOIN FETCH" suffix="s"> <jointure fieldName="staff" jointureType="JOIN FETCH" suffix="st"/> <jointure fieldName="address" jointureType="JOIN FETCH" suffix="sa"> <jointure fieldName="city" jointureType="JOIN FETCH" suffix="sci"> <jointure fieldName="country" jointureType="JOIN FETCH" suffix="sco"/> </jointure> </jointure> </jointure> <!-- default preference --> <queryPreference orderByClause="c.customerId"> <pagination firstResult="0" maxResults="50" paginated="true"/> <parameter id="address" suffix="c"/> <parameter id="customerId" style="SWT.RIGHT" suffix="c"/> <parameter id="createDate" style="SWT.CENTER" suffix="c"/> <parameter id="email" suffix="c"/> <parameter id="firstName" suffix="c"/> <parameter id="lastName" suffix="c"/> <parameter id="lastUpdate" style="SWT.CENTER" suffix="c"/> <parameter id="active" suffix="c"/> <parameter id="store_city" prompt="Store city" property="city" suffix="a"/> <parameter id="store_country" prompt="Store country" property="country" suffix="sci"/> <parameter id="customer_city" prompt="Customer city" property="city" suffix="a"/> <parameter id="customer_country" prompt="Customer country" property="country" suffix="ci"/> <parameter id="staff_name" prompt="Staff name" property="lastName" suffix="st"/> </queryPreference> <customizedPreferences> <!-- USA Customers Column order id, fist name, name..., Bar=Navigation, ... --> <preference id="usa"> <queryPreference orderByClause="c.customerId"> <pagination firstResult="0" maxResults="20" paginated="true"/> <parameter prompt="Customer country" property="country" entityURI="adi://myproject/model.country/CountryMM" suffix="ci" valid="true" columnText="United States" expression="103" operator="=" id="customer_country"/> </queryPreference> <controllerPreference columnOrder="0, 3, 4, 1, 2, 5, 6, 7, 8" statusBarKey="Navigation" tableRendererKey="Binding"> <filters> <filter enabled="true" text="Value in column 'active' is true." column="activeTC" searchString="true"/> <filter enabled="false" text="Value in column 'store' contains string 'Australia' (Case insensitive.)." column="storeTC" searchString="Australia" exactString="false" caseInsensitive="true"/> </filters> </controllerPreference> </preference> </customizedPreferences> </queryTree>
Explanations:
Lines 4-5: | Fetch city and country of the address of the customer. |
---|---|
Line 9: | fetch the staff of the customer. |
Lines 10-12: | Fetch address, city and country of the store of the customer. |
Lines 28-32: | Add parameters allowing the user to extend the selection to specified fields. |
Line 38: | Define a new preference, identified by usa string, column order is changed and chosen Navigation bar is Scale: User can navigates thru pages using a scale control. |
Line 40: | Pagination start to first element (position 0) and fetch 50 rows per page. |
Line 41: | select only customer from USA. |
Lines 45-46: | Add 2 filters: first on column Active, second on column Store. Only first filter is enabled. |
Open Add navigator item to see how to create a new item in navigator to call the query with defined preference.
Open Change table include to see how to display data from new jointures in table control.