similar case: https://forums.smartclient.com/forum...-with-criteria
smartgwt.version=13.0-p20241123
It seems to me that similar issue still occurs in connection with the parameter request.setTextMatchStyle("exactCase"). Depending on whether this parameter is set, an N is added before the string in MSSQL or not in WHERE.
without: setTextMatchStyle("exactCase")
The following generated SQL query works correctly:
with: setTextMatchStyle("exactCase")
there is no 'N' before the text literal, and the condition does not work correctly:
sample code:
prosty.ds.xml :
smartgwt.version=13.0-p20241123
It seems to me that similar issue still occurs in connection with the parameter request.setTextMatchStyle("exactCase"). Depending on whether this parameter is set, an N is added before the string in MSSQL or not in WHERE.
without: setTextMatchStyle("exactCase")
The following generated SQL query works correctly:
Code:
UPDATE PROSTYN SET kod='20', opis=N'Zażółć gęślą jaźń:2' WHERE (PROSTYN.id=1 AND LOWER(PROSTYN.opis)=N'zażółć gęślą jaźń')
with: setTextMatchStyle("exactCase")
there is no 'N' before the text literal, and the condition does not work correctly:
Code:
UPDATE PROSTYN SET kod='20', opis=N'Zażółć gęślą jaźń:2' WHERE (PROSTYN.id=1 AND PROSTYN.opis='Zażółć gęślą jaźń')
sample code:
Code:
Map<String, Object> newValues = new HashMap<String, Object>();
newValues.put("opis", "Zażółć gęślą jaźń:2");
newValues.put("kod", "20");
newValues.put("id", 1);
Map<String, Object> oldValues = new HashMap<String, Object>();
oldValues.put("opis", "Zażółć gęślą jaźń:1");
oldValues.put("kod", "10");
oldValues.put("id", "1");
DSTransaction dst = new DSTransaction();
DSRequest reqx = new DSRequest("prosty", "update");
reqx.setOperationType("update");
reqx.addToCriteria("id", 1);
reqx.addToCriteria("opis","Zażółć gęślą jaźń");
reqx.setAllowMultiUpdate(true);
reqx.setValues(newValues);
reqx.setOldValues(oldValues);
reqx.setDsTransaction(dst);
reqx.setTextMatchStyle("exactCase"); // <------------ !!!!!
dst.registerRequest(reqx);
dst.processQueue();
dst.complete();
Code:
<DataSource ID="prosty" serverType="sql" dbName="MSSQLX" tableName="PROSTYN"> <fields> <field name="id" type="integer" primaryKey="true"></field> <field name="opis" type="ntext" length="40"></field> <field name="kod" type="text" length="10"></field> </fields> </DataSource>
Comment