You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Ilya Korol (Jira)" <ji...@apache.org> on 2022/07/20 08:04:00 UTC
[jira] [Created] (IGNITE-17396) NPE during SQL query preparation when distributedJoins enabled
Ilya Korol created IGNITE-17396:
-----------------------------------
Summary: NPE during SQL query preparation when distributedJoins enabled
Key: IGNITE-17396
URL: https://issues.apache.org/jira/browse/IGNITE-17396
Project: Ignite
Issue Type: Bug
Components: sql
Affects Versions: 2.13
Reporter: Ilya Korol
Strange NPE when distributedJoins enabled:
{code:java}
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteException;
import org.apache.ignite.Ignition;
import org.apache.ignite.cache.query.SqlFieldsQuery;
import org.apache.ignite.configuration.IgniteConfiguration;
import java.util.List;
public class DistributedJoinsNPEReproducer {
public static void main(String[] args) throws IgniteException {
try (Ignite ignite = Ignition.start(new IgniteConfiguration())) {
ignite.getOrCreateCache("tmp").query(new SqlFieldsQuery("CREATE TABLE IF NOT EXISTS FOO (" +
" HOUR DECIMAL," +
" MINUTE DECIMAL," +
" DATE VARCHAR(8)," +
" PART_DATE VARCHAR(8)," +
" PART_KEY VARCHAR(2)," +
" FILLER INTEGER," +
" CONSTRAINT Foo_PK PRIMARY KEY (" +
" HOUR," +
" MINUTE," +
" DATE," +
" PART_DATE," +
" PART_KEY" +
" )" +
") WITH \"" +
" CACHE_NAME=foo," +
" KEY_TYPE=FooKey," +
" VALUE_TYPE=FooValue" +
"\"")).getAll();
ignite.getOrCreateCache("tmp").query(new SqlFieldsQuery("INSERT INTO FOO (HOUR, MINUTE, DATE, PART_KEY, PART_DATE, FILLER) VALUES (1, 1, '20220501', '01', '20220501', 1)")).getAll();
List<List<?>> result = ignite.getOrCreateCache("tmp").query(new SqlFieldsQuery(QUERY).setDistributedJoins(true)).getAll();
System.out.println(result.get(0));
}
}
static final String QUERY = "WITH param AS (" +
" SELECT CAST('20220501' AS varchar) AS pd" +
")" +
"SELECT B.pd " +
"FROM FOO, param B " +
"WHERE part_date=B.pd " +
" AND date=B.pd " +
" AND hour >=1 " +
"LIMIT 10";
}
{code}
Error:
{code:java}
Exception in thread "main" javax.cache.CacheException: Failed to parse query. Внутренняя ошибка: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-197]
at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:859)
at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:792)
at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.query(GatewayProtectedCacheProxy.java:432)
at org.solveme.playground.ignite.examples.DistributedJoinsNPEReproducer.main(DistributedJoinsNPEReproducer.java:37)
Caused by: class org.apache.ignite.internal.processors.query.IgniteSQLException: Failed to parse query. Внутренняя ошибка: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-197]
at org.apache.ignite.internal.processors.query.h2.H2Connection.prepareStatementNoCache(H2Connection.java:194)
at org.apache.ignite.internal.processors.query.h2.H2Connection.prepareStatement(H2Connection.java:141)
at org.apache.ignite.internal.processors.query.h2.H2PooledConnection.prepareStatement(H2PooledConnection.java:86)
at org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.prepare(GridSqlQuerySplitter.java:1803)
at org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.split0(GridSqlQuerySplitter.java:303)
at org.apache.ignite.internal.processors.query.h2.sql.GridSqlQuerySplitter.split(GridSqlQuerySplitter.java:222)
at org.apache.ignite.internal.processors.query.h2.QueryParser.parseH2(QueryParser.java:551)
at org.apache.ignite.internal.processors.query.h2.QueryParser.parse0(QueryParser.java:228)
at org.apache.ignite.internal.processors.query.h2.QueryParser.parse(QueryParser.java:141)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.querySqlFields(IgniteH2Indexing.java:1142)
at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3016)
at org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:2989)
at org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3661)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3033)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3105)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2983)
at org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2910)
at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.query(IgniteCacheProxyImpl.java:844)
... 3 more
Caused by: org.h2.jdbc.JdbcSQLException: Внутренняя ошибка: "java.lang.NullPointerException"
General error: "java.lang.NullPointerException" [50000-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:697)
at org.apache.ignite.internal.processors.query.h2.H2Connection.prepareStatementNoCache(H2Connection.java:191)
... 21 more
Caused by: java.lang.NullPointerException
at org.apache.ignite.internal.processors.query.h2.opt.join.CollocationModel.calculate(CollocationModel.java:248)
at org.apache.ignite.internal.processors.query.h2.opt.join.CollocationModel.type(CollocationModel.java:549)
at org.apache.ignite.internal.processors.query.h2.opt.join.CollocationModel.isPartitionedTableBeforeExists(CollocationModel.java:343)
at org.apache.ignite.internal.processors.query.h2.opt.join.CollocationModel.calculate(CollocationModel.java:295)
at org.apache.ignite.internal.processors.query.h2.opt.join.CollocationModel.multiplier(CollocationModel.java:522)
at org.apache.ignite.internal.processors.query.h2.opt.join.CollocationModel.distributedMultiplier(CollocationModel.java:650)
at org.apache.ignite.internal.processors.query.h2.opt.GridH2IndexBase.getDistributedMultiplier(GridH2IndexBase.java:116)
at org.apache.ignite.internal.processors.query.h2.opt.H2TableScanIndex.getCost(H2TableScanIndex.java:76)
at org.h2.table.Table.getBestPlanItem(Table.java:714)
at org.h2.table.TableFilter.getBestPlanItem(TableFilter.java:224)
at org.h2.table.Plan.calculateCost(Plan.java:121)
at org.h2.command.dml.Optimizer.testPlan(Optimizer.java:180)
at org.h2.command.dml.Optimizer.calculateBruteForceAll(Optimizer.java:109)
at org.h2.command.dml.Optimizer.calculateBestPlan(Optimizer.java:85)
at org.h2.command.dml.Optimizer.optimize(Optimizer.java:239)
at org.h2.command.dml.Select.preparePlan(Select.java:1018)
at org.h2.command.dml.Select.prepare(Select.java:884)
at org.h2.command.Parser.prepareCommand(Parser.java:283)
at org.h2.engine.Session.prepareLocal(Session.java:611)
at org.h2.engine.Session.prepareCommand(Session.java:549)
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1247)
at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:76)
at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:694)
... 22 more
{code}
Table definition and query may seem a bit strange and ugly but this definitely should not produce error like this. Without distributedJoins=true it works fine
--
This message was sent by Atlassian Jira
(v8.20.10#820010)