[jira] [Commented] (IGNITE-11829) Distribute joins fail if number of tables > 7
[ https://issues.apache.org/jira/browse/IGNITE-11829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16923444#comment-16923444 ] Ignite TC Bot commented on IGNITE-11829: {panel:title=Branch: [pull/6842/head] Base: [master] : No blockers found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel} [TeamCity *-- Run :: All* Results|https://ci.ignite.apache.org/viewLog.html?buildId=4569463buildTypeId=IgniteTests24Java8_RunAll] > Distribute joins fail if number of tables > 7 > - > > Key: IGNITE-11829 > URL: https://issues.apache.org/jira/browse/IGNITE-11829 > Project: Ignite > Issue Type: Improvement > Components: sql >Affects Versions: 2.7 >Reporter: Stanislav Lukyanov >Assignee: Diana Iakovleva >Priority: Major > Labels: newbie > Time Spent: 10m > Remaining Estimate: 0h > > Distributed joins fail with ArrayIndexOutOfBounds when the total number of > tables is > 7. > Example: > {code} > try (Ignite ignite = > Ignition.start("examples/config/example-ignite.xml");) { > IgniteCache cache = ignite.createCache("foo"); > cache.query(new SqlFieldsQuery("CREATE TABLE Person(ID INTEGER > PRIMARY KEY, NAME VARCHAR(100));")); > cache.query(new SqlFieldsQuery("INSERT INTO Person(ID, NAME) > VALUES (1, 'Ed'), (2, 'Ann'), (3, 'Emma');")); > cache.query(new SqlFieldsQuery("SELECT *\n" + > "FROM PERSON P1\n" + > "JOIN PERSON P2 ON P1.ID = P2.ID\n" + > "JOIN PERSON P3 ON P1.ID = P3.ID\n" + > "JOIN PERSON P4 ON P1.ID = P4.ID\n" + > "JOIN PERSON P5 ON P1.ID = P5.ID\n" + > "JOIN PERSON P6 ON P1.ID = P6.ID\n" + > "JOIN PERSON P7 ON P1.ID = P7.ID\n" + > "JOIN PERSON P8 ON P1.ID = > P8.ID").setDistributedJoins(true).setEnforceJoinOrder(false)); > } > {code} > throws > {code} > Exception in thread "main" javax.cache.CacheException: General error: > "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:832) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:765) > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:403) > at > org.apache.ignite.examples.ExampleNodeStartup.main(ExampleNodeStartup.java:60) > Caused by: class > org.apache.ignite.internal.processors.query.IgniteSQLException: General > error: "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parseH2(QueryParser.java:454) > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parse0(QueryParser.java:156) > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parse(QueryParser.java:121) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1191) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2261) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2257) > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:53) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2767) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$1(GridQueryProcessor.java:2277) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:2297) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2250) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2177) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:817) > ... 3 more > Caused by: org.h2.jdbc.JdbcSQLException: General error: > "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) > at org.h2.message.DbException.get(DbException.java:168) > at org.h2.message.DbException.convert(DbException.java:307) > at org.h2.message.DbException.toSQLException(DbException.java:280) > at org.h2.message.TraceObject.logAndConvert(TraceObject.java:357) > at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:308) > at >
[jira] [Commented] (IGNITE-11829) Distribute joins fail if number of tables > 7
[ https://issues.apache.org/jira/browse/IGNITE-11829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16847997#comment-16847997 ] Stanislav Lukyanov commented on IGNITE-11829: - The workaround for this issue is two group some of the JOINs into a subquery: {code} SELECT * FROM public.PERSON P1 JOIN public.PERSON P2 ON P1.ID = P2.ID JOIN public.PERSON P3 ON P1.ID = P3.ID JOIN public.PERSON P4 ON P1.ID = P4.ID JOIN public.PERSON P5 ON P1.ID = P5.ID JOIN public.PERSON P6 ON P1.ID = P6.ID JOIN ( select P7.ID as ID, P7.NAME as P7NAME, P8.NAME as P8NAME FROM public.PERSON P7 JOIN public.PERSON P8 ON P7.ID = P8.ID ) P78 ON P1.ID = P78.ID {code} > Distribute joins fail if number of tables > 7 > - > > Key: IGNITE-11829 > URL: https://issues.apache.org/jira/browse/IGNITE-11829 > Project: Ignite > Issue Type: Improvement > Components: sql >Affects Versions: 2.7 >Reporter: Stanislav Lukyanov >Priority: Major > Labels: newbie > > Distributed joins fail with ArrayIndexOutOfBounds when the total number of > tables is > 7. > Example: > {code} > try (Ignite ignite = > Ignition.start("examples/config/example-ignite.xml");) { > IgniteCache cache = ignite.createCache("foo"); > cache.query(new SqlFieldsQuery("CREATE TABLE Person(ID INTEGER > PRIMARY KEY, NAME VARCHAR(100));")); > cache.query(new SqlFieldsQuery("INSERT INTO Person(ID, NAME) > VALUES (1, 'Ed'), (2, 'Ann'), (3, 'Emma');")); > cache.query(new SqlFieldsQuery("SELECT *\n" + > "FROM PERSON P1\n" + > "JOIN PERSON P2 ON P1.ID = P2.ID\n" + > "JOIN PERSON P3 ON P1.ID = P3.ID\n" + > "JOIN PERSON P4 ON P1.ID = P4.ID\n" + > "JOIN PERSON P5 ON P1.ID = P5.ID\n" + > "JOIN PERSON P6 ON P1.ID = P6.ID\n" + > "JOIN PERSON P7 ON P1.ID = P7.ID\n" + > "JOIN PERSON P8 ON P1.ID = > P8.ID").setDistributedJoins(true).setEnforceJoinOrder(false)); > } > {code} > throws > {code} > Exception in thread "main" javax.cache.CacheException: General error: > "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:832) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:765) > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:403) > at > org.apache.ignite.examples.ExampleNodeStartup.main(ExampleNodeStartup.java:60) > Caused by: class > org.apache.ignite.internal.processors.query.IgniteSQLException: General > error: "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parseH2(QueryParser.java:454) > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parse0(QueryParser.java:156) > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parse(QueryParser.java:121) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1191) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2261) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2257) > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:53) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2767) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$1(GridQueryProcessor.java:2277) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:2297) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2250) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2177) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:817) > ... 3 more > Caused by: org.h2.jdbc.JdbcSQLException: General error: > "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) > at org.h2.message.DbException.get(DbException.java:168) > at org.h2.message.DbException.convert(DbException.java:307) > at org.h2.message.DbException.toSQLException(DbException.java:280) > at
[jira] [Commented] (IGNITE-11829) Distribute joins fail if number of tables > 7
[ https://issues.apache.org/jira/browse/IGNITE-11829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16831361#comment-16831361 ] Stanislav Lukyanov commented on IGNITE-11829: - Seems to be an easy fix - just create a new array if the array lengths are not equal (see the lines near the failing assertion). > Distribute joins fail if number of tables > 7 > - > > Key: IGNITE-11829 > URL: https://issues.apache.org/jira/browse/IGNITE-11829 > Project: Ignite > Issue Type: Improvement > Components: sql >Affects Versions: 2.7 >Reporter: Stanislav Lukyanov >Priority: Major > Labels: newbie > > Distributed joins fail with ArrayIndexOutOfBounds when the total number of > tables is > 7. > Example: > {code} > try (Ignite ignite = > Ignition.start("examples/config/example-ignite.xml");) { > IgniteCache cache = ignite.createCache("foo"); > cache.query(new SqlFieldsQuery("CREATE TABLE Person(ID INTEGER > PRIMARY KEY, NAME VARCHAR(100));")); > cache.query(new SqlFieldsQuery("INSERT INTO Person(ID, NAME) > VALUES (1, 'Ed'), (2, 'Ann'), (3, 'Emma');")); > cache.query(new SqlFieldsQuery("SELECT *\n" + > "FROM PERSON P1\n" + > "JOIN PERSON P2 ON P1.ID = P2.ID\n" + > "JOIN PERSON P3 ON P1.ID = P3.ID\n" + > "JOIN PERSON P4 ON P1.ID = P4.ID\n" + > "JOIN PERSON P5 ON P1.ID = P5.ID\n" + > "JOIN PERSON P6 ON P1.ID = P6.ID\n" + > "JOIN PERSON P7 ON P1.ID = P7.ID\n" + > "JOIN PERSON P8 ON P1.ID = > P8.ID").setDistributedJoins(true).setEnforceJoinOrder(false)); > } > {code} > throws > {code} > Exception in thread "main" javax.cache.CacheException: General error: > "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:832) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:765) > at > org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:403) > at > org.apache.ignite.examples.ExampleNodeStartup.main(ExampleNodeStartup.java:60) > Caused by: class > org.apache.ignite.internal.processors.query.IgniteSQLException: General > error: "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parseH2(QueryParser.java:454) > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parse0(QueryParser.java:156) > at > org.apache.ignite.internal.processors.query.h2.QueryParser.parse(QueryParser.java:121) > at > org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1191) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2261) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$3.applyx(GridQueryProcessor.java:2257) > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:53) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:2767) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$1(GridQueryProcessor.java:2277) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:2297) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2250) > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2177) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:817) > ... 3 more > Caused by: org.h2.jdbc.JdbcSQLException: General error: > "java.lang.ArrayIndexOutOfBoundsException" [5-197] > at org.h2.message.DbException.getJdbcSQLException(DbException.java:357) > at org.h2.message.DbException.get(DbException.java:168) > at org.h2.message.DbException.convert(DbException.java:307) > at org.h2.message.DbException.toSQLException(DbException.java:280) > at org.h2.message.TraceObject.logAndConvert(TraceObject.java:357) > at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:308) > at > org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.prepare(GridSqlQuerySplitter.java:1770) > at >