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.