Amit, Can you please show the output of "EXPLAIN PLAN FOR <YOUR_QUERY>"? I've found the bug in index scan on binary object field (ticket [1]), but I can't reproduce it with select without "order by", or without forcing index scan.
[1]: https://issues.apache.org/jira/browse/IGNITE-23004 ср, 14 авг. 2024 г. в 18:07, Amit Jolly <amit.jo...@gmail.com>: > > HI, Jeremy & Alex, > > First of all thanks for the quick response. > > Sorry for the confusion here, We are trying to switch from using H2 as a > default query engine to Calcite due to above mentioned CVE's. > I have read the ticket and understood that those CVE's do not have any impact > on how Ignite uses H2. > We are trying to explain the same to our internal security audit team and at > the same time trying to evaluate Calcite. > > Below is the query we are using > > SELECT _key FROM OrdersToMatchCache > > OrdersToMatchCache has OrderId.java as key and OrdersToMatch.java as value > > OrderId.java > ==================== > import lombok.Data; > import org.apache.ignite.cache.query.annotations.QuerySqlField; > import java.io.Serializable; > > @Data > public class OrderId implements Serializable { > @QuerySqlField > private String orderId; > @QuerySqlField > private String regionId; > @QuerySqlField > private Integer date; > } > > > OrdersToMatch.java > ==================== > import lombok.Data; > import org.apache.ignite.cache.query.annotations.QuerySqlField; > import java.io.Serializable; > > @Data > public class OrdersToMatch implements Serializable { > @QuerySqlField > private List<Order> buyOrders = new ArrayList<>(); > @QuerySqlField > private List<Order> sellOrders = new ArrayList<>(); > } > > > Order.java > ==================== > import lombok.Data; > import java.io.Serializable; > > @Data > public class Order implements Serializable { > private String direction; // BUY or SELL > private Integer qty; > } > > Thanks, > > Amit Jolly > > On Wed, Aug 14, 2024 at 10:27 AM Jeremy McMillan <j...@gridgain.com> wrote: >> >> Amit: >> >> I'm concerned that you may be misreading the CVE details in the ticket you >> cited, since you indicated you are moving TO H2.. Also the stack trace is a >> Calcite stack trace. This is ambiguous whether this is the before >> (persistence config changes) depicted or after changing persistence depicted. >> >> A) The CVEs cited in the ticket >> https://issues.apache.org/jira/browse/IGNITE-15241 are all H2 >> vulnerabilities. >> B) The H2 vulnerabilities cited all involve behaviors of H2 that Ignite does >> not use, therefore Ignite is affected neither by Calcite nor H2 persistence >> involvement. >> >> I don't want to discourage you from moving from H2 to Calcite, but maybe >> this isn't as urgent as it appears, so please proceed carefully. As Alex >> requested, it will be helpful for the community to see which queries produce >> exceptions and which ones do not. H2 and Calcite have different SQL parsers >> and query planners and underlying implementations, so it should not be >> surprising that queries might need rework in the course of switching. You >> should expect to encounter issues like this one, and others like it. It's a >> migration effort. >> >> >> On Tue, Aug 13, 2024 at 9:17 AM Amit Jolly <amit.jo...@gmail.com> wrote: >>> >>> Hi, >>> >>> We are trying to switch to H2 due to Security Vulnerabilities as listed in >>> JIRA https://issues.apache.org/jira/browse/IGNITE-15241 >>> >>> We are seeing below errors post switching. We are just running select * >>> From table query. >>> >>> Caused by: java.lang.ClassCastException: class >>> org.apache.ignite.internal.binary.BinaryObjectImpl cannot be cast to class >>> java.lang.Comparable (org.apache.ignite.internal.binary.BinaryObjectImpl is >>> in unnamed module of loader 'app'; java.lang.Comparable is in module >>> java.base of loader 'bootstrap') >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.exp.ExpressionFactoryImpl.compare(ExpressionFactoryImpl.java:223) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.exp.ExpressionFactoryImpl.access$100(ExpressionFactoryImpl.java:85) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.exp.ExpressionFactoryImpl$1.compare(ExpressionFactoryImpl.java:157) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> java.base/java.util.Map$Entry.lambda$comparingByKey$6d558cbf$1(Map.java:560) >>> ~[?:?] >>> at >>> java.base/java.util.PriorityQueue.siftUpUsingComparator(PriorityQueue.java:660) >>> ~[?:?] >>> at java.base/java.util.PriorityQueue.siftUp(PriorityQueue.java:637) ~[?:?] >>> at java.base/java.util.PriorityQueue.offer(PriorityQueue.java:330) ~[?:?] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.rel.Inbox.pushOrdered(Inbox.java:239) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.rel.Inbox.push(Inbox.java:201) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.rel.Inbox.onBatchReceived(Inbox.java:177) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.ExchangeServiceImpl.onMessage(ExchangeServiceImpl.java:324) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.ExchangeServiceImpl.lambda$init$2(ExchangeServiceImpl.java:195) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.message.MessageServiceImpl.onMessageInternal(MessageServiceImpl.java:276) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.message.MessageServiceImpl.lambda$onMessage$0(MessageServiceImpl.java:254) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> at >>> org.apache.ignite.internal.processors.query.calcite.exec.QueryTaskExecutorImpl.lambda$execute$0(QueryTaskExecutorImpl.java:66) >>> ~[ignite-calcite-2.16.0.jar:2.16.0] >>> >>> Any idea what might be causing this? >>> >>> Regards, >>> >>> Amit Jolly