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