ignite-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Taras Ledkov <tled...@gridgain.com>
Subject SQL: INSERT with hidden columns _key, _val and check the type of input objects
Date Thu, 21 Feb 2019 13:27:25 GMT
Hi,

Lets discuss SQL DML (INSERT/UPDATE) current behavior specific:

Ignite doesn't check a type of input objects when hidden columns _key, 
_value is used in a DML statements.
I describe the current behavior for example:

1. Cache configuration:  'setIndexedTypes(PersonKey.class, Person.class))'
2.  PersonKey type contains 'int id' field.
3. SQL statement: 'INSERT INTO test (_val, _key) VALUES (?, ?)'

Cases:
1. Invalid value object type:
- Any value object may be passed as a query parameter
- Query is executed without an error and returns '1' (one row updated);
- There is not inserted row at the 'SELECT * FROM test' results.
- cache.get(key) returns inserted object;

2. Invalid key object type:
2.1 Non-primitive object is passed and binary representation doesn't 
contain 'id' field.
- Query is executed without error and returns '1' (one row updated);
- The inserted row is available by 'SELECT *' and the row contains id = 
null;
2.2 Non-primitive object is passed and binary representation contains 
'id' field.
- The inserted row is available by 'SELECT *' and the row contains 
expected 'id' field;
- The cache entry cannot be gathered by 'cache.get' operation with the 
corresponding 'PersonKey(id)' (keys differ).

I propose to check type of the user's input object.

I guess that using _key/_val columns works close to 'cache.put()' but it 
looks like significant usability issue.
To confuse the 'PersonKey.class.getName()' and 
'node.binary().builder("PersonKey")' is a typical mistake of Ignite 
newcomers.

One more argument for check: SQL INSERT sematic means the row is 
inserted into the specified TABLE, not into the cache.
So, throw IgniteSQLException is expected behavior in this case, i think.

[1]. https://issues.apache.org/jira/browse/IGNITE-5250

-- 
Taras Ledkov
Mail-To: tledkov@gridgain.com


Mime
View raw message