Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Problem with Add-operation (existence check + cacheSyncOperation PK case sensitivity)

    Hello Isomorphic,

    the cacheSyncOperation for the animals DataSource uses LOWER(animals.scientificName) for its data gathering.
    While one could argue that for isUnique-Validator-text-columns the default should be case-insensitive (like you did here), this is almost certainly wrong for primaryKey text fields like animals.scientificName. While this may be no problem in the animals-DataSource, this may lead to performance problems in real-world applications (full table scan vs. index unique scan when there is no function based index on LOWER(scientificName).

    Additionally there is no pre-existence check for the entry and the application ends with a constraint violation DB message if you try to add an existing key. This is also true for the employees-DataSource. I'd suggest that primaryKey-fields have implicit case sensitive (see above) isUnique-Validators.

    See this BuiltInDS server logs for the 1st issue (v10.0p_2015-05-19):
    Code:
    === 2015-05-20 14:18:48,050 [c-60] INFO  RequestContext - URL: '/BuiltInDS/builtinds/sc/IDACall', User-Agent: 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0': Moz (Gecko) with Accept-Encoding header
    === 2015-05-20 14:18:48,051 [c-60] DEBUG IDACall - Header Name:Value pair: host:localhost:8080
    === 2015-05-20 14:18:48,051 [c-60] DEBUG IDACall - Header Name:Value pair: user-agent:Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
    === 2015-05-20 14:18:48,051 [c-60] DEBUG IDACall - Header Name:Value pair: accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    === 2015-05-20 14:18:48,051 [c-60] DEBUG IDACall - Header Name:Value pair: accept-language:de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    === 2015-05-20 14:18:48,051 [c-60] DEBUG IDACall - Header Name:Value pair: accept-encoding:gzip, deflate
    === 2015-05-20 14:18:48,052 [c-60] DEBUG IDACall - Header Name:Value pair: dnt:1
    === 2015-05-20 14:18:48,052 [c-60] DEBUG IDACall - Header Name:Value pair: content-type:application/x-www-form-urlencoded; charset=UTF-8
    === 2015-05-20 14:18:48,052 [c-60] DEBUG IDACall - Header Name:Value pair: referer:http://localhost:8080/BuiltInDS/BuiltInDS.html
    === 2015-05-20 14:18:48,052 [c-60] DEBUG IDACall - Header Name:Value pair: content-length:1318
    === 2015-05-20 14:18:48,052 [c-60] DEBUG IDACall - Header Name:Value pair: cookie:JSESSIONID=C5631D101CCCE887D2DBB40F36F47C69; isc_cState=ready; GLog=%7B%0D%20%20%20%20trackRPC%3Atrue%2C%20%0D%20%20%20%20pageGUID%3A%2241645E28-A8A9-4B95-822F-5C44EE205904%22%2C%20%0D%20%20%20%20priorityDefaults%3A%7B%0D%20%20%20%20%20%20%20%20sgwtInternal%3A1%0D%20%20%20%20%7D%2C%20%0D%20%20%20%20defaultPriority%3A3%2C%20%0D%20%20%20%20left%3A0%2C%20%0D%20%20%20%20top%3A0%2C%20%0D%20%20%20%20width%3A942%2C%20%0D%20%20%20%20height%3A520%0D%7D
    === 2015-05-20 14:18:48,052 [c-60] DEBUG IDACall - Header Name:Value pair: connection:keep-alive
    === 2015-05-20 14:18:48,053 [c-60] DEBUG IDACall - Header Name:Value pair: pragma:no-cache
    === 2015-05-20 14:18:48,053 [c-60] DEBUG IDACall - Header Name:Value pair: cache-control:no-cache
    === 2015-05-20 14:18:48,053 [c-60] DEBUG IDACall - session exists: C5631D101CCCE887D2DBB40F36F47C69
    === 2015-05-20 14:18:48,053 [c-60] DEBUG IDACall - remote user: null
    === 2015-05-20 14:18:48,058 [c-60] DEBUG XML - Parsed XML from (in memory stream): 3ms
    === 2015-05-20 14:18:48,058 [c-60] DEBUG ISCKeyedObjectPool - Borrowing object for 'transaction'
    === 2015-05-20 14:18:48,059 [c-60] DEBUG PoolableDataSourceFactory - Created DataSource null of type 'transaction' in the pooling flow
    === 2015-05-20 14:18:48,060 [c-60] DEBUG ISCKeyedObjectPool - Borrowing object for 'Object'
    === 2015-05-20 14:18:48,060 [c-60] DEBUG PoolableDataSourceFactory - Created DataSource 92 of type 'Object' and assigned it to thread http-bio-8080-exec-60
    === 2015-05-20 14:18:48,060 [c-60] DEBUG PoolableDataSourceFactory - Created DataSource 92 of type 'Object' in the pooling flow
    === 2015-05-20 14:18:48,060 [c-60] DEBUG PoolableDataSourceFactory - Activated DataSource 92 of type 'Object'
    === 2015-05-20 14:18:48,061 [c-60] DEBUG ISCKeyedObjectPool - Borrowing object for 'List'
    === 2015-05-20 14:18:48,064 [c-60] DEBUG PoolableDataSourceFactory - Created DataSource 93 of type 'List' and assigned it to thread http-bio-8080-exec-60
    === 2015-05-20 14:18:48,064 [c-60] DEBUG PoolableDataSourceFactory - Created DataSource 93 of type 'List' in the pooling flow
    === 2015-05-20 14:18:48,064 [c-60] DEBUG PoolableDataSourceFactory - Activated DataSource 93 of type 'List'
    === 2015-05-20 14:18:48,065 [c-60] DEBUG ISCKeyedObjectPool - Borrowing object for 'elem'
    === 2015-05-20 14:18:48,065 [c-60] DEBUG PoolableDataSourceFactory - Created DataSource null of type 'elem' in the pooling flow
    === 2015-05-20 14:18:48,067 [c-60] DEBUG RPCManager - Processing 1 requests.
    === 2015-05-20 14:18:48,068 [c-60] DEBUG ISCKeyedObjectPool - Borrowing object for 'animals'
    === 2015-05-20 14:18:48,068 [c-60] DEBUG PoolableDataSourceFactory - Activated DataSource 77 of type 'animals'
    === 2015-05-20 14:18:48,068 [c-60] DEBUG DSRequest - Caching instance 77 of DS 'animals' from DSRequest.getDataSource()
    === 2015-05-20 14:18:48,068 [c-60] DEBUG DSRequest - Caching instance 77 of DS animals
    === 2015-05-20 14:18:48,069 [c-60] DEBUG RPCManager - Request #1 (DSRequest) payload: {
        values:{
            commonName:"Eurasian eagle-owl",
            scientificName:"Bubo bubo",
            lifeSpan:30,
            status:"Protected",
            diet:"Carnivore",
            information:"Onomatopoeic name in German (Uhu)",
            picture:null,
            someField:null
        },
        operationConfig:{
            dataSource:"animals",
            repo:null,
            operationType:"add",
            textMatchStyle:"exact"
        },
        componentId:"isc_DynamicForm_0",
        appID:"builtinApplication",
        operation:"animals_add",
        oldValues:{
        },
        criteria:{
        }
    }
    === 2015-05-20 14:18:48,069 [c-60] INFO  IDACall - Performing 1 operation(s)
    === 2015-05-20 14:18:48,070 [c-60] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
    === 2015-05-20 14:18:48,070 [c-60] DEBUG DeclarativeSecurity - DataSource animals is not in the pre-checked list, processing...
    === 2015-05-20 14:18:48,070 [c-60] DEBUG AppBase - [builtinApplication.animals_add] No userTypes defined, allowing anyone access to all operations for this application
    === 2015-05-20 14:18:48,071 [c-60] DEBUG AppBase - [builtinApplication.animals_add] No public zero-argument method named '_animals_add' found, performing generic datasource operation
    === 2015-05-20 14:18:48,073 [c-60] INFO  SQLDataSource - [builtinApplication.animals_add] Performing add operation with
    	criteria: {commonName:"Eurasian eagle-owl",scientificName:"Bubo bubo",lifeSpan:30,status:"Protected",diet:"Carnivore",information:"Onomatopoeic name in German (Uhu)",picture:null,someField:null}	values: {commonName:"Eurasian eagle-owl",scientificName:"Bubo bubo",lifeSpan:30,status:"Protected",diet:"Carnivore",information:"Onomatopoeic name in German (Uhu)",picture:null,someField:null}
    === 2015-05-20 14:18:48,074 [c-60] DEBUG SQLValuesClause - [builtinApplication.animals_add] Sequences: {}
    === 2015-05-20 14:18:48,076 [c-60] DEBUG PoolableSQLConnectionFactory - [builtinApplication.animals_add] DriverManager fetching connection for HSQLDB via jdbc url jdbc:hsqldb:hsql://localhost/isomorphic
    === 2015-05-20 14:18:48,076 [c-60] DEBUG PoolableSQLConnectionFactory - [builtinApplication.animals_add] Passing JDBC URL only to getConnection
    === 2015-05-20 14:18:48,181 [c-60] DEBUG PoolableSQLConnectionFactory - [builtinApplication.animals_add] makeObject() created an unpooled Connection '1943539812'
    === 2015-05-20 14:18:48,181 [c-60] DEBUG SQLConnectionManager - [builtinApplication.animals_add] Borrowed connection '1943539812'
    === 2015-05-20 14:18:48,182 [c-60] DEBUG SQLTransaction - [builtinApplication.animals_add] Started new HSQLDB transaction "1943539812"
    === 2015-05-20 14:18:48,182 [c-60] DEBUG SQLDriver - [builtinApplication.animals_add] About to execute SQL update in 'HSQLDB' using connection'1943539812'
    === 2015-05-20 14:18:48,183 [c-60] INFO  SQLDriver - [builtinApplication.animals_add] Executing SQL update on 'HSQLDB': INSERT INTO animals (commonName, diet, information, lifeSpan, picture, scientificName, status) VALUES ('Eurasian eagle-owl', 'Carnivore', 'Onomatopoeic name in German (Uhu)', 30, NULL, 'Bubo bubo', 'Protected')
    === 2015-05-20 14:18:48,184 [c-60] DEBUG SQLDriver - [builtinApplication.animals_add] SequenceMode is not JDBC_DRIVER, skipping search for generated values
    === 2015-05-20 14:18:48,185 [c-60] DEBUG SQLDataSource - [builtinApplication.animals_add] add operation affected 1 rows
    === 2015-05-20 14:18:48,185 [c-60] INFO  SQLDataSource - [builtinApplication.animals_add] primaryKeys: {scientificName=Bubo bubo}
    === 2015-05-20 14:18:48,185 [c-60] DEBUG DeclarativeSecurity - [builtinApplication.animals_add] Processing security checks for DataSource null, field null
    === 2015-05-20 14:18:48,186 [c-60] DEBUG DeclarativeSecurity - [builtinApplication.animals_add] DataSource animals is not in the pre-checked list, processing...
    === 2015-05-20 14:18:48,186 [c-60] DEBUG AppBase - [builtinApplication.animals_add, builtinApplication.null] No userTypes defined, allowing anyone access to all operations for this application
    === 2015-05-20 14:18:48,186 [c-60] DEBUG AppBase - [builtinApplication.animals_add, builtinApplication.null] No public zero-argument method named '_null' found, performing generic datasource operation
    === 2015-05-20 14:18:48,187 [c-60] INFO  SQLDataSource - [builtinApplication.animals_add, builtinApplication.null] Performing fetch operation with
    	criteria: {scientificName:"Bubo bubo"}	values: {scientificName:"Bubo bubo"}
    === 2015-05-20 14:18:48,188 [c-60] INFO  SQLDataSource - [builtinApplication.animals_add, builtinApplication.null] derived query: SELECT $defaultSelectClause FROM $defaultTableClause WHERE $defaultWhereClause
    === 2015-05-20 14:18:48,188 [c-60] INFO  SQLDataSource - [builtinApplication.animals_add, builtinApplication.null] 77: Executing SQL query on 'HSQLDB': SELECT animals.commonName, animals.scientificName, animals.lifeSpan, animals.status, animals.diet, animals.information, animals.picture FROM animals WHERE (LOWER(animals.scientificName)='bubo bubo')
    === 2015-05-20 14:18:48,189 [c-60] DEBUG SQLDriver - [builtinApplication.animals_add, builtinApplication.null] About to execute SQL query in 'HSQLDB' using connection '1943539812'
    === 2015-05-20 14:18:48,189 [c-60] INFO  SQLDriver - [builtinApplication.animals_add, builtinApplication.null] Executing SQL query on 'HSQLDB': SELECT animals.commonName, animals.scientificName, animals.lifeSpan, animals.status, animals.diet, animals.information, animals.picture FROM animals WHERE (LOWER(animals.scientificName)='bubo bubo')
    === 2015-05-20 14:18:48,192 [c-60] INFO  DSResponse - [builtinApplication.animals_add, builtinApplication.null] DSResponse: List with 1 items
    === 2015-05-20 14:18:48,193 [c-60] DEBUG DSRequest - [builtinApplication.animals_add] freeOnExecute is false for request of type fetch on DataSource animals - not freeing resources!
    === 2015-05-20 14:18:48,193 [c-60] INFO  DSResponse - [builtinApplication.animals_add] DSResponse: List with 1 items
    === 2015-05-20 14:18:48,193 [c-60] DEBUG DSRequest - freeOnExecute is false for request of type add on DataSource animals - not freeing resources!
    === 2015-05-20 14:18:48,193 [c-60] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2015-05-20 14:18:48,193 [c-60] DEBUG SQLTransaction - Committing HSQLDB transaction "1943539812"
    === 2015-05-20 14:18:48,194 [c-60] DEBUG RPCManager - non-DMI response, dropExtraFields: false
    === 2015-05-20 14:18:48,195 [c-60] DEBUG SQLTransaction - getConnection() found transactional connection for HSQLDB with hashcode "1943539812"
    === 2015-05-20 14:18:48,195 [c-60] DEBUG SQLTransaction - Ending HSQLDB transaction "1943539812"
    === 2015-05-20 14:18:48,196 [c-60] DEBUG SQLConnectionManager - About to close JDBCConnection with hashcode "1943539812"
    === 2015-05-20 14:18:48,196 [c-60] DEBUG PoolableDataSourceFactory - Cleared and passivated DataSource 77 of type 'animals'
    === 2015-05-20 14:18:48,197 [c-60] DEBUG DSRequest - Ignoring freeResources call because this is not a primary request!
    === 2015-05-20 14:18:48,197 [c-60] DEBUG DSRequest - Ignoring freeQueueResources call because this is not a primary request!
    === 2015-05-20 14:18:48,197 [c-60] INFO  Compression - /BuiltInDS/builtinds/sc/IDACall: 310 -> 247 bytes
    See this log for trying to add another employee with id "182" for the 2nd issue:
    Code:
    === 2015-05-20 14:42:26,324 [c-59] INFO  RequestContext - URL: '/BuiltInDS/builtinds/sc/IDACall', User-Agent: 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0': Moz (Gecko) with Accept-Encoding header
    === 2015-05-20 14:42:26,324 [c-59] DEBUG IDACall - Header Name:Value pair: host:localhost:8080
    === 2015-05-20 14:42:26,324 [c-59] DEBUG IDACall - Header Name:Value pair: user-agent:Mozilla/5.0 (Windows NT 6.3; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: accept-language:de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: accept-encoding:gzip, deflate
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: dnt:1
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: content-type:application/x-www-form-urlencoded; charset=UTF-8
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: referer:http://localhost:8080/BuiltInDS/BuiltInDS.html
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: content-length:1425
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: cookie:JSESSIONID=C5631D101CCCE887D2DBB40F36F47C69; isc_cState=ready; GLog=%7B%0D%20%20%20%20trackRPC%3Atrue%2C%20%0D%20%20%20%20pageGUID%3A%2241645E28-A8A9-4B95-822F-5C44EE205904%22%2C%20%0D%20%20%20%20priorityDefaults%3A%7B%0D%20%20%20%20%20%20%20%20sgwtInternal%3A1%0D%20%20%20%20%7D%2C%20%0D%20%20%20%20defaultPriority%3A3%2C%20%0D%20%20%20%20left%3A0%2C%20%0D%20%20%20%20top%3A0%2C%20%0D%20%20%20%20width%3A940%2C%20%0D%20%20%20%20height%3A519%0D%7D
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: connection:keep-alive
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: pragma:no-cache
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - Header Name:Value pair: cache-control:no-cache
    === 2015-05-20 14:42:26,325 [c-59] DEBUG IDACall - session exists: C5631D101CCCE887D2DBB40F36F47C69
    === 2015-05-20 14:42:26,326 [c-59] DEBUG IDACall - remote user: null
    === 2015-05-20 14:42:26,329 [c-59] DEBUG XML - Parsed XML from (in memory stream): 2ms
    === 2015-05-20 14:42:26,329 [c-59] DEBUG ISCKeyedObjectPool - Borrowing object for 'transaction'
    === 2015-05-20 14:42:26,330 [c-59] DEBUG PoolableDataSourceFactory - Created DataSource null of type 'transaction' in the pooling flow
    === 2015-05-20 14:42:26,330 [c-59] DEBUG ISCKeyedObjectPool - Borrowing object for 'Object'
    === 2015-05-20 14:42:26,330 [c-59] DEBUG PoolableDataSourceFactory - Created DataSource 136 of type 'Object' and assigned it to thread http-bio-8080-exec-59
    === 2015-05-20 14:42:26,330 [c-59] DEBUG PoolableDataSourceFactory - Created DataSource 136 of type 'Object' in the pooling flow
    === 2015-05-20 14:42:26,330 [c-59] DEBUG PoolableDataSourceFactory - Activated DataSource 136 of type 'Object'
    === 2015-05-20 14:42:26,331 [c-59] DEBUG ISCKeyedObjectPool - Borrowing object for 'List'
    === 2015-05-20 14:42:26,332 [c-59] DEBUG PoolableDataSourceFactory - Created DataSource 137 of type 'List' and assigned it to thread http-bio-8080-exec-59
    === 2015-05-20 14:42:26,333 [c-59] DEBUG PoolableDataSourceFactory - Created DataSource 137 of type 'List' in the pooling flow
    === 2015-05-20 14:42:26,333 [c-59] DEBUG PoolableDataSourceFactory - Activated DataSource 137 of type 'List'
    === 2015-05-20 14:42:26,333 [c-59] DEBUG ISCKeyedObjectPool - Borrowing object for 'elem'
    === 2015-05-20 14:42:26,333 [c-59] DEBUG PoolableDataSourceFactory - Created DataSource null of type 'elem' in the pooling flow
    === 2015-05-20 14:42:26,335 [c-59] DEBUG RPCManager - Processing 1 requests.
    === 2015-05-20 14:42:26,335 [c-59] DEBUG ISCKeyedObjectPool - Borrowing object for 'employees'
    === 2015-05-20 14:42:26,335 [c-59] DEBUG PoolableDataSourceFactory - Activated DataSource 21 of type 'employees'
    === 2015-05-20 14:42:26,335 [c-59] DEBUG DSRequest - Caching instance 21 of DS 'employees' from DSRequest.getDataSource()
    === 2015-05-20 14:42:26,335 [c-59] DEBUG DSRequest - Caching instance 21 of DS employees
    === 2015-05-20 14:42:26,336 [c-59] DEBUG RPCManager - Request #1 (DSRequest) payload: {
        values:{
            Name:"New Name",
            EmployeeId:182,
            ReportsTo:4,
            Job:null,
            Email:null,
            EmployeeType:null,
            EmployeeStatus:null,
            Salary:null,
            OrgUnit:null,
            Gender:null,
            MaritalStatus:null
        },
        operationConfig:{
            dataSource:"employees",
            repo:null,
            operationType:"add",
            textMatchStyle:"exact"
        },
        componentId:"isc_DynamicForm_0",
        appID:"builtinApplication",
        operation:"employees_add",
        oldValues:{
        },
        criteria:{
        }
    }
    === 2015-05-20 14:42:26,336 [c-59] INFO  IDACall - Performing 1 operation(s)
    === 2015-05-20 14:42:26,336 [c-59] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null
    === 2015-05-20 14:42:26,336 [c-59] DEBUG DeclarativeSecurity - DataSource employees is not in the pre-checked list, processing...
    === 2015-05-20 14:42:26,337 [c-59] DEBUG AppBase - [builtinApplication.employees_add] No userTypes defined, allowing anyone access to all operations for this application
    === 2015-05-20 14:42:26,337 [c-59] DEBUG AppBase - [builtinApplication.employees_add] No public zero-argument method named '_employees_add' found, performing generic datasource operation
    === 2015-05-20 14:42:26,338 [c-59] INFO  SQLDataSource - [builtinApplication.employees_add] Performing add operation with
    	criteria: {Name:"New Name",EmployeeId:182,ReportsTo:4,Job:null,Email:null,EmployeeType:null,EmployeeStatus:null,Salary:null,OrgUnit:null,Gender:null,MaritalStatus:null}	values: {Name:"New Name",EmployeeId:182,ReportsTo:4,Job:null,Email:null,EmployeeType:null,EmployeeStatus:null,Salary:null,OrgUnit:null,Gender:null,MaritalStatus:null}
    === 2015-05-20 14:42:26,338 [c-59] DEBUG SQLValuesClause - [builtinApplication.employees_add] Sequences: {}
    === 2015-05-20 14:42:26,340 [c-59] DEBUG PoolableSQLConnectionFactory - [builtinApplication.employees_add] DriverManager fetching connection for HSQLDB via jdbc url jdbc:hsqldb:hsql://localhost/isomorphic
    === 2015-05-20 14:42:26,340 [c-59] DEBUG PoolableSQLConnectionFactory - [builtinApplication.employees_add] Passing JDBC URL only to getConnection
    === 2015-05-20 14:42:26,443 [c-59] DEBUG PoolableSQLConnectionFactory - [builtinApplication.employees_add] makeObject() created an unpooled Connection '31901225'
    === 2015-05-20 14:42:26,443 [c-59] DEBUG SQLConnectionManager - [builtinApplication.employees_add] Borrowed connection '31901225'
    === 2015-05-20 14:42:26,444 [c-59] DEBUG SQLTransaction - [builtinApplication.employees_add] Started new HSQLDB transaction "31901225"
    === 2015-05-20 14:42:26,444 [c-59] DEBUG SQLDriver - [builtinApplication.employees_add] About to execute SQL update in 'HSQLDB' using connection'31901225'
    === 2015-05-20 14:42:26,444 [c-59] INFO  SQLDriver - [builtinApplication.employees_add] Executing SQL update on 'HSQLDB': INSERT INTO employeeTable (Email, EmployeeId, EmployeeStatus, EmployeeType, Gender, Job, MaritalStatus, Name, OrgUnit, ReportsTo, Salary) VALUES (NULL, 182, NULL, NULL, NULL, NULL, NULL, 'New Name', NULL, 4, NULL)
    === 2015-05-20 14:42:26,446 [c-59] DEBUG SQLDriver - [builtinApplication.employees_add] SequenceMode is not JDBC_DRIVER, skipping search for generated values
    === 2015-05-20 14:42:26,447 [c-59] DEBUG SQLDriver - [builtinApplication.employees_add] FAILED to execute SQL update in 'HSQLDB' using connection'31901225'
    === 2015-05-20 14:42:26,447 [c-59] DEBUG DSRequest - freeOnExecute is false for request of type add on DataSource employees - not freeing resources!
    === 2015-05-20 14:42:26,447 [c-59] WARN  RequestContext - dsRequest.execute() failed: 
    java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: unique constraint or index violation; EMPLOYEETABLE_UI table: EMPLOYEETABLE
    	at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    	at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
    	at org.hsqldb.jdbc.JDBCPreparedStatement.fetchResult(Unknown Source)
    	at org.hsqldb.jdbc.JDBCPreparedStatement.executeUpdate(Unknown Source)
    	at com.isomorphic.sql.SQLDriver.doUpdate(SQLDriver.java:902)
    	at com.isomorphic.sql.SQLDriver.update(SQLDriver.java:804)
    	at com.isomorphic.sql.SQLDriver.executeUpdate(SQLDriver.java:989)
    	at com.isomorphic.sql.SQLDataSource.executeNativeUpdate(SQLDataSource.java:570)
    	at com.isomorphic.sql.SQLDataSource.SQLExecute(SQLDataSource.java:1992)
    	at com.isomorphic.sql.SQLDataSource.processRequest(SQLDataSource.java:443)
    	at com.isomorphic.sql.SQLDataSource.executeAdd(SQLDataSource.java:396)
    	at com.isomorphic.datasource.DataSource.execute(DataSource.java:1950)
    	at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:726)
    	at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658)
    	at com.isomorphic.application.AppBase.execute(AppBase.java:491)
    	at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2548)
    	at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:220)
    	at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:185)
    	at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:152)
    	at com.isomorphic.servlet.IDACall._processRequest(IDACall.java:117)
    	at com.isomorphic.servlet.IDACall.doPost(IDACall.java:76)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    	at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:156)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at com.isomorphic.servlet.CompressionFilter._doFilter(CompressionFilter.java:260)
    	at com.isomorphic.servlet.BaseFilter.doFilter(BaseFilter.java:83)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    === 2015-05-20 14:42:26,448 [c-59] DEBUG RPCManager - Content type for RPC transaction: text/plain; charset=UTF-8
    === 2015-05-20 14:42:26,449 [c-59] DEBUG SQLTransaction - Rolling back HSQLDB transaction "31901225"
    === 2015-05-20 14:42:26,449 [c-59] DEBUG RPCManager - non-DMI response, dropExtraFields: false
    === 2015-05-20 14:42:26,450 [c-59] DEBUG SQLTransaction - getConnection() found transactional connection for HSQLDB with hashcode "31901225"
    === 2015-05-20 14:42:26,450 [c-59] DEBUG SQLTransaction - Ending HSQLDB transaction "31901225"
    === 2015-05-20 14:42:26,451 [c-59] DEBUG SQLConnectionManager - About to close JDBCConnection with hashcode "31901225"
    === 2015-05-20 14:42:26,451 [c-59] DEBUG PoolableDataSourceFactory - Cleared and passivated DataSource 21 of type 'employees'
    === 2015-05-20 14:42:26,452 [c-59] INFO  Compression - /BuiltInDS/builtinds/sc/IDACall: 243 -> 189 bytes
    Best regards
    Blama

    #2
    As addition:

    The missing existence-check problem is not that important for me, as I'm in a sequence-PK-only world. Still I think it is something between a bug and an enhancement. Of course even now one could manually add the isUnique-check as workaround.

    The cacheSyncOperation-issue is not important currently, as I don't have text-PKs yet.
    I saw the LOWER() also around a integer-columns but I'm pretty sure that this is some weird join-configuration of mine and will check this.

    Best regards
    Blama

    Comment

    Working...
    X