Hi Isomorphic,
please see this v10.1p_2016-04-08 BuiltInDS-based testcase, where the generated SQL-WHERE is not as expected.
BuiltInDS.java:
animals.ds.xml:
Server log:
My expectation would be:
Best regards
Blama
please see this v10.1p_2016-04-08 BuiltInDS-based testcase, where the generated SQL-WHERE is not as expected.
BuiltInDS.java:
Code:
package com.smartgwt.sample.client;
import com.google.gwt.core.client.EntryPoint;
import com.smartgwt.client.Version;
import com.smartgwt.client.core.KeyIdentifier;
import com.smartgwt.client.data.AdvancedCriteria;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.types.OperatorId;
import com.smartgwt.client.util.Page;
import com.smartgwt.client.util.PageKeyHandler;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.layout.VLayout;
public class BuiltInDS implements EntryPoint {
private VLayout mainLayout;
private IButton recreateBtn;
public void onModuleLoad() {
KeyIdentifier debugKey = new KeyIdentifier();
debugKey.setCtrlKey(true);
debugKey.setKeyName("D");
Page.registerKey(debugKey, new PageKeyHandler() {
public void execute(String keyName) {
SC.showConsole();
}
});
mainLayout = new VLayout(20);
mainLayout.setWidth100();
mainLayout.setHeight100();
recreateBtn = new IButton("Recreate");
recreateBtn.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
recreate();
}
});
mainLayout.addMember(recreateBtn);
recreate();
mainLayout.draw();
}
private void recreate() {
Window w = new Window();
w.setWidth("95%");
w.setHeight("95%");
w.setMembersMargin(0);
w.setModalMaskOpacity(70);
w.setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")");
w.setTitle(".ds.xml-generated criteria problem" + w.getTitle());
w.setShowMinimizeButton(false);
w.setIsModal(true);
w.setShowModalMask(true);
w.centerInPage();
ListGrid animalsLG = new ListGrid(DataSource.get("animals"));
animalsLG.setAutoFetchData(false);
animalsLG.fetchData(new AdvancedCriteria("commonName", OperatorId.ISTARTS_WITH, "A"));
w.addItem(animalsLG);
w.show();
}
}
Code:
<DataSource
ID="animals"
serverType="sql"
tableName="animals"
testFileName="animals.data.xml"
>
<fields>
<field name="commonName" title="Animal" type="text"/>
<field name="scientificName" title="Scientific Name" type="text" primaryKey="true" required="true"/>
<field name="lifeSpan" title="Life Span" type="integer"/>
<field name="status" title="Endangered Status" type="text">
<valueMap>
<value>Threatened</value>
<value>Endangered</value>
<value>Not Endangered</value>
<value>Not currently listed</value>
<value>May become threatened</value>
<value>Protected</value>
</valueMap>
</field>
<field name="diet" title="Diet" type="text"/>
<field name="information" title="Interesting Facts" type="text" length="1000"/>
<field name="picture" title="Picture" type="image" detail="true"
imageURLPrefix="/isomorphic/system/reference/inlineExamples/tiles/images/"/>
</fields>
<operationBindings>
<operationBinding operationType="fetch">
[B] <criteria _constructor="AdvancedCriteria" operator="or">
<criteria fieldName="lifeSpan" operator="lessOrEqual" value="50" />
<criteria fieldName="diet" operator="equals" value="Herbivore" />
</criteria>[/B]
</operationBinding>
</operationBindings>
</DataSource>
Code:
SELECT LIMIT 0 75 animals.commonName,
animals.scientificName,
animals.lifeSpan,
animals.status,
animals.diet,
animals.information,
animals.picture
FROM animals
[B] WHERE((animals.lifeSpan <= 50
OR animals.lifeSpan IS NULL)
AND(LOWER(animals.commonName) LIKE LOWER('a%') ESCAPE '\'
AND animals.commonName IS NOT NULL)
AND(animals.diet = 'Herbivore'
AND animals.diet IS NOT NULL))[/B]
Code:
LOWER(animals.commonName) LIKE LOWER('a%') --client criteria
AND --server criteria
(lifeSpan <= 50
OR --operator="or"
animals.diet = 'Herbivore')
Blama
Comment