Hello,
I am using a ComboBoxItem with an AdvancedCriteria specified as option criteria and have set the matching behavior to TextMatchStyle.STARTS_WITH. However, it looks like TextMatchStyle.SUBSTRING is used instead, so that the pick list contains more values than it should.
Here is a basic example that illustrates the problem. It is based on a DataSource using an Oracle system table. I have tested it with Smart GWT power edition 2.5 (latest nightly build) and Firefox 3.6.
ComboBox definition:
Data Source:
Server logs (please note the first '%' character in 'LIKE LOWER('%system%')':
DSRequest from Developer Console (please note that the textMatchStyle attribute is set to "startsWith" but the criteria operator is "iContains"):
By the way, if I do not specify any option criteria, the text matching works as expected.
I would appreciate any help on this issue.
I am using a ComboBoxItem with an AdvancedCriteria specified as option criteria and have set the matching behavior to TextMatchStyle.STARTS_WITH. However, it looks like TextMatchStyle.SUBSTRING is used instead, so that the pick list contains more values than it should.
Here is a basic example that illustrates the problem. It is based on a DataSource using an Oracle system table. I have tested it with Smart GWT power edition 2.5 (latest nightly build) and Firefox 3.6.
ComboBox definition:
Code:
ComboBoxItem comboBox = new ComboBoxItem();
comboBox.setOptionDataSource(DataSource.get("test"));
AdvancedCriteria criteria = new AdvancedCriteria("tname", OperatorId.NOT_IN_SET, new String[] {"test1", "test2", "test3"});
comboBox.setOptionCriteria(criteria);
comboBox.setValueField("tname");
comboBox.setDisplayField("tname");
comboBox.setRequired(true);
comboBox.setTextMatchStyle(TextMatchStyle.STARTS_WITH);
Code:
<DataSource ID="test" serverType="sql" tableName="sys.tab"> <fields> <field name="tabtype" type="text" /> <field name="tname" type="text" /> </fields> </DataSource>
Code:
=== 2011-10-19 13:32:28,924 [l0-0] INFO SQLDataSource - [builtinApplication.test_fetch] Performing fetch operation with
criteria: {operator:"and",_constructor:"AdvancedCriteria",criteria:[{fieldName:"tname",operator:"notInSet",value:["test1","test2","test3"],_constructor:"AdvancedCriteria"},{_constructor:"AdvancedCriteria",operator:"and",criteria:[{fieldName:"tname",operator:"iContains",value:"system"}]}]} values: {operator:"and",_constructor:"AdvancedCriteria",criteria:[{fieldName:"tname",operator:"notInSet",value:["test1","test2","test3"],_constructor:"AdvancedCriteria"},{_constructor:"AdvancedCriteria",operator:"and",criteria:[{fieldName:"tname",operator:"iContains",value:"system"}]}]}
=== 2011-10-19 13:32:28,924 [l0-0] INFO SQLDataSource - [builtinApplication.test_fetch] derived query: SELECT $defaultSelectClause FROM $defaultTableClause WHERE $defaultWhereClause
=== 2011-10-19 13:32:28,925 [l0-0] DEBUG SQLDataSource - [builtinApplication.test_fetch] Executing row count query: SELECT COUNT(*) FROM $defaultTableClause WHERE $defaultWhereClause
=== 2011-10-19 13:32:28,925 [l0-0] DEBUG SQLDataSource - [builtinApplication.test_fetch] Eval'd row count query: SELECT COUNT(*) FROM sys.tab WHERE (NOT((sys.tab.tname IN ('test1', 'test2', 'test3')) AND sys.tab.tname IS NOT NULL) AND ((LOWER(sys.tab.tname) LIKE LOWER('%system%') {ESCAPE '\'} AND sys.tab.tname IS NOT NULL)))
=== 2011-10-19 13:32:28,967 [l0-0] INFO SQLDriver - [builtinApplication.test_fetch] Executing SQL query on 'oracle': SELECT COUNT(*) FROM sys.tab WHERE (NOT((sys.tab.tname IN ('test1', 'test2', 'test3')) AND sys.tab.tname IS NOT NULL) AND ((LOWER(sys.tab.tname) LIKE LOWER('%system%') {ESCAPE '\'} AND sys.tab.tname IS NOT NULL)))
=== 2011-10-19 13:32:28,982 [l0-0] WARN SQLDataSource - [builtinApplication.test_fetch] DataSource 'test': sqlPaging was explicitly specified as 'sqlLimit', but the underlying database (oracle) does not support SQL limit queries. Falling back to 'jdbcScroll'
=== 2011-10-19 13:32:28,983 [l0-0] DEBUG SQLDataSource - [builtinApplication.test_fetch] JDBC driver windowed select rows 0->75, result size 75. Query: SELECT sys.tab.tname, sys.tab.tabtype FROM sys.tab WHERE (NOT((sys.tab.tname IN ('test1', 'test2', 'test3')) AND sys.tab.tname IS NOT NULL) AND ((LOWER(sys.tab.tname) LIKE LOWER('%system%') {ESCAPE '\'} AND sys.tab.tname IS NOT NULL)))
=== 2011-10-19 13:32:28,994 [l0-0] INFO DSResponse - [builtinApplication.test_fetch] DSResponse: List with 17 items
Code:
{
"dataSource":"test",
"operationType":"fetch",
"componentId":"isc_PickListMenu_0",
"data":{
"operator":"and",
"criteria":[
{
"fieldName":"tname",
"operator":"notInSet",
"value":[
"test1",
"test2",
"test3"
]
},
{
"operator":"and",
"criteria":[
{
"fieldName":"tname",
"operator":"iContains",
"value":"system"
}
]
}
]
},
"startRow":0,
"endRow":75,
"textMatchStyle":"startsWith",
"resultSet":[ResultSet ID:isc_ResultSet_2 (created by: isc_PickListMenu_0)],
"callback":{
"caller":[ResultSet ID:isc_ResultSet_2 (created by: isc_PickListMenu_0)],
"methodName":"fetchRemoteDataReply"
},
"willHandleError":true,
"showPrompt":false,
"prompt":"Suche Datensätze die den Kriterien entsprechen...",
"oldValues":{
"operator":"and",
"criteria":[
{
"fieldName":"tname",
"operator":"notInSet",
"value":[
"test1",
"test2",
"test3"
]
},
{
"operator":"and",
"criteria":[
{
"fieldName":"tname",
"operator":"iContains",
"value":"system"
}
]
}
]
},
"clientContext":{
"requestIndex":1
},
"requestId":"test$6272"
}
By the way, if I do not specify any option criteria, the text matching works as expected.
I would appreciate any help on this issue.