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.
