Hello, Courtney.

Can, you, please, send SQL table definition and example of query (java code and 
SQL) that worked on 2.8 and start failing on 2.13.

> This seems like a regression, was this intentional?

Looks like a bug to me.
Details of your schema and query can help in further investigation.


> 10 мая 2022 г., в 10:14, Courtney Robinson <court...@crlog.info> написал(а):
> 
> Hi all,
> 
> We're looking to do a major upgrade from 2.8.0 to 2.13.0
> After the initial upgrade our test suite started failing (about 15% of tests 
> now fail).
> No other change has been made other than the Ignite version number.
> 
> org.apache.ignite.internal.processors.query.IgniteSQLException: General 
> error: "class org.apache.ignite.IgniteException: Failed to wrap 
> value[type=17, value=[Ljava.lang.Object;@667eb78]"; SQL statement:
> SELECT HYPI_INSTANCEID, COUNT(HYPI_ID) FROM 
> hypi_01E8NPNFADNKECH7BR0K5FDE2C_Account WHERE HYPI_ID IN (?) AND 
> HYPI_INSTANCEID=? GROUP BY HYPI_INSTANCEID [50000-197]
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:898)
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:985)
> at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest0(GridMapQueryExecutor.java:471)
> at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest(GridMapQueryExecutor.java:284)
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.onMessage(IgniteH2Indexing.java:2219)
> at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor$1.applyx(GridReduceQueryExecutor.java:157)
> at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor$1.applyx(GridReduceQueryExecutor.java:152)
> at 
> org.apache.ignite.internal.util.lang.IgniteInClosure2X.apply(IgniteInClosure2X.java:38)
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.send(IgniteH2Indexing.java:2344)
> at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.send(GridReduceQueryExecutor.java:1201)
> at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:463)
> at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$7.iterator(IgniteH2Indexing.java:1846)
> at 
> org.apache.ignite.internal.processors.cache.QueryCursorImpl.iter(QueryCursorImpl.java:102)
> at 
> org.apache.ignite.internal.processors.cache.query.RegisteredQueryCursor.iter(RegisteredQueryCursor.java:91)
> at 
> org.apache.ignite.internal.processors.cache.QueryCursorImpl.getAll(QueryCursorImpl.java:124)
> 
> Investigating this I found that IndexKeyFactory has since been added in a 
> release after 2.8.0.
> It is the source of the exception
> throw new IgniteException("Failed to wrap value[type=" + keyType + ", value=" 
> + o + "]");
> 
> The key type 17 is ARRAY, defined in `org.h2.value.Value` (ARRAY enum value 
> line 137)
> Looking further I can see that IndexKeyFactory registers:
> IndexKeyFactory.register(IndexKeyTypes.DATE, DateIndexKey::new);
> IndexKeyFactory.register(IndexKeyTypes.TIME, TimeIndexKey::new);
> IndexKeyFactory.register(IndexKeyTypes.TIMESTAMP, TimestampIndexKey::new);--
> 
> And these are the only additional key types registered anywhere in the 2.13.0 
> code base.
> 
> Looking further, I found that the problem is wherever we use the `IN` clause
> In 2.8.0 we had a query like this:
> DELETE FROM permission_cause WHERE instanceId = ? AND policyId = ? AND rowId 
> IN (?) AND accountId = ?
> And we would pass in a Java array as the 3rd argument
> instanceId, policyId, toDelete.toArray(), accountId
> 
> This would work fine with the toDelete.toArray()
> Now, we have to change it and expand from IN(?) to IN(?,?,?) putting in as 
> many ? as there are entries in the array and pass in the values individually.
> 
> This seems like a regression, was this intentional?
> 
> Best,
> Courtney

Reply via email to