Hi Isomorphic,
please take a look at this test case.
If I use a field with length greater than 4000, in criteria, then I have a query like this:
In my test case it happens when I click on the button "Fetch data content".
When I click on button "Fetch data subject", it works as it should:
Oracle script
T_TEST.ds.xml
BuiltInDS.java
Using v11.1p_2018-12-03/PowerEdition Deployment (built 2018-12-03) and Oracle DB,
Best regards
Pavo
please take a look at this test case.
If I use a field with length greater than 4000, in criteria, then I have a query like this:
Code:
SELECT COUNT(*) FROM T_TEST WHERE ('1'='1' OR '1'='1')
When I click on button "Fetch data subject", it works as it should:
Code:
SELECT COUNT(*) FROM T_TEST WHERE ((LOWER(T_TEST.SUBJECT) LIKE LOWER('%mail%') ESCAPE'\' AND T_TEST.SUBJECT IS NOT NULL) OR (LOWER(T_TEST.SUBJECT) LIKE LOWER('%4%') ESCAPE'\' AND T_TEST.SUBJECT IS NOT NULL))
Code:
CREATE TABLE t_test ( id INTEGER NOT NULL , mail_subject VARCHAR2 (100 CHAR) , mail_content VARCHAR2 (100 CHAR) , modified_by INTEGER NOT NULL , modified_at DATE DEFAULT SYSDATE NOT NULL ) ; ALTER TABLE t_test ADD CONSTRAINT PK_test PRIMARY KEY ( id ) ; CREATE SEQUENCE T_TEST_ID NOCACHE ORDER ; CREATE OR REPLACE TRIGGER t_test_BI BEFORE INSERT ON t_test FOR EACH ROW WHEN (NEW.id IS NULL) BEGIN SELECT T_TEST_ID.NEXTVAL INTO :NEW.id FROM DUAL; END; / INSERT INTO T_TEST(mail_subject, mail_content, modified_by) VALUES ('Column mail subject 1', 'Column mail content 1', 1); INSERT INTO T_TEST(mail_subject, mail_content, modified_by) VALUES ('Column mail subject 2', 'Column mail content 1', 1); INSERT INTO T_TEST(mail_subject, mail_content, modified_by) VALUES ('Column mail subject 3', 'Column mail content 1', 1); INSERT INTO T_TEST(mail_subject, mail_content, modified_by) VALUES ('Column mail subject 4', 'Column mail content 1', 1); INSERT INTO T_TEST(mail_subject, mail_content, modified_by) VALUES ('Column mail subject 5', 'Column mail content 1', 1); COMMIT;
Code:
<DataSource ID="T_TEST" dbName="Oracle" serverType="sql" tableName="T_TEST" > <fields> <field name="MAIL_CONTENT" length="10000" type="text" escapeHTML="true" /> <field name="SUBJECT" length="200" type="text" escapeHTML="true" /> </fields> <operationBindings> <operationBinding operationType="fetch" /> </operationBindings> </DataSource>
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.Criterion; 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.Button; 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.grid.ListGridField; import com.smartgwt.client.widgets.layout.VLayout; public class BuiltInDS extends VLayout implements EntryPoint { 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(); } }); setWidth100(); setHeight100(); recreateBtn = new IButton("Recreate"); recreateBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { new MyWindow().show(); } }); addMember(recreateBtn); new MyWindow().show(); draw(); } private class MyWindow extends Window { public MyWindow() { setWidth(600); setHeight(300); setMembersMargin(0); setModalMaskOpacity(70); setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")"); setShowMinimizeButton(false); setIsModal(true); setShowModalMask(true); centerInPage(); final String value = "mail 4"; final ListGrid lg = new ListGrid() { { setDataSource("T_TEST"); setShowFilterEditor(true); ListGridField mailContentLGF = new ListGridField("MAIL_CONTENT"); ListGridField subjectLGF = new ListGridField("SUBJECT"); setFields(mailContentLGF, subjectLGF); } }; Button fetchContentButton = new Button("Fetch data content"); fetchContentButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String[] s = value.split(" "); AdvancedCriteria finalCriteria = new AdvancedCriteria(OperatorId.OR); for (int i = 0; i < s.length; i++) { AdvancedCriteria ad = new AdvancedCriteria(new Criterion("MAIL_CONTENT", OperatorId.ICONTAINS, s[i])); finalCriteria.appendToCriterionList(ad); } lg.fetchData(finalCriteria); } }); Button fetchSubjectButton = new Button("Fetch data subject"); fetchSubjectButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String[] s = value.split(" "); AdvancedCriteria finalCriteria = new AdvancedCriteria(OperatorId.OR); for (int i = 0; i < s.length; i++) { AdvancedCriteria ad = new AdvancedCriteria(new Criterion("SUBJECT", OperatorId.ICONTAINS, s[i])); finalCriteria.appendToCriterionList(ad); } lg.fetchData(finalCriteria); } }); addItem(lg); addItem(fetchContentButton); addItem(fetchSubjectButton); } } }
Best regards
Pavo
Comment