[ https://issues.apache.org/jira/browse/IGNITE-4409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vladimir Ozerov reassigned IGNITE-4409: --------------------------------------- Assignee: Alexander Paschenko > UUID fields of the key class deserialized in a wrong way on INSERT. > ------------------------------------------------------------------- > > Key: IGNITE-4409 > URL: https://issues.apache.org/jira/browse/IGNITE-4409 > Project: Ignite > Issue Type: Bug > Components: SQL > Affects Versions: 1.8 > Reporter: Igor Sapego > Assignee: Alexander Paschenko > Fix For: 1.9 > > > Consider the following case. There is a class which is used as Key on C++ > side. It contains 3 fields: String, Timestamp and UUID. There is also a value > of the type Integer. Record of the cache is being inserted with > {{SqlFieldsQuery}}: > {noformat} > INSERT INTO Integer (str, ts, guid, _val) VALUES (?, ?, ?, ?) > {noformat} > String, Timestamp and Integer values serialized and desirialized just fine, > but UUID value is passed further just like byte array of 17 bytes, first of > which is 10 (UUID type header in Binary format), so later it gets converted > here: > {noformat} > "main@1" prio=5 tid=0x1 nid=NA runnable > java.lang.Thread.State: RUNNABLE > at org.h2.value.ValueUuid.get(ValueUuid.java:68) > at org.h2.value.Value.convertTo(Value.java:861) > at > org.apache.ignite.internal.processors.query.h2.DmlStatementsProcessor.convert(DmlStatementsProcessor.java:637) > at > org.apache.ignite.internal.processors.query.h2.DmlStatementsProcessor.rowToKeyValue(DmlStatementsProcessor.java:868) > at > org.apache.ignite.internal.processors.query.h2.DmlStatementsProcessor.doInsert(DmlStatementsProcessor.java:745) > at > org.apache.ignite.internal.processors.query.h2.DmlStatementsProcessor.executeUpdateStatement(DmlStatementsProcessor.java:286) > at > org.apache.ignite.internal.processors.query.h2.DmlStatementsProcessor.updateSqlFields(DmlStatementsProcessor.java:159) > at > org.apache.ignite.internal.processors.query.h2.DmlStatementsProcessor.updateSqlFieldsTwoStep(DmlStatementsProcessor.java:189) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1266) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:812) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$4.applyx(GridQueryProcessor.java:810) > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1777) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.queryTwoStep(GridQueryProcessor.java:810) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:749) > at > org.apache.ignite.internal.processors.platform.cache.PlatformCache.runFieldsQuery(PlatformCache.java:1205) > at > org.apache.ignite.internal.processors.platform.cache.PlatformCache.processInStreamOutObject(PlatformCache.java:837) > at > org.apache.ignite.internal.processors.platform.PlatformAbstractTarget.inStreamOutObject(PlatformAbstractTarget.java:90) > {noformat} > Obviously enough, it gets deserialized wrong because of the header byte and > as a result, we get wrong key instance in the cache. -- This message was sent by Atlassian JIRA (v6.3.15#6346)