[ 
https://issues.apache.org/jira/browse/IGNITE-3273?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexei Scherbakov updated IGNITE-3273:
--------------------------------------
    Description: 
Distributed SQL query cannot be parsed on map side if it contains left join.
The same local query works without any error.
Replacing left join with inner join removes the error.
See the attachment for the reproducer.

{noformat}
[10:40:58,850][ERROR][main][GridMapQueryExecutor] Failed to execute local 
query: GridQueryRequest [reqId=1, pageSize=1024, space=P, 
qrys=[GridCacheSqlQuery [qry=SELECT
PERSON._KEY __C0,
PERSON._VAL __C1,
PERSON.NAME __C2,
PERSON.ID __C3,
PERSON.DEPID __C4,
DEP._KEY __C5,
DEP._VAL __C6,
DEP.NAME __C7,
DEP.ID __C8,
DEP.ORGID __C9,
ORG._KEY __C10,
ORG._VAL __C11,
ORG.NAME __C12,
ORG.ID __C13
FROM P.PERSON 
 INNER JOIN D.DEPARTMENT DEP 
 LEFT OUTER JOIN O.ORG ORG 
 ON ORG.ID = DEP.ORGID
WHERE DEP.ID = P.PERSON.DEPID, params=[], paramIdxs=[], paramsSize=0, 
cols={__C0=GridSqlType [type=4, scale=0, precision=10, displaySize=11, 
sql=INTEGER], __C1=GridSqlType [type=19, scale=0, precision=2147483647, 
displaySize=2147483647, sql=OTHER], __C2=GridSqlType [type=13, scale=0, 
precision=2147483647, displaySize=2147483647, sql=VARCHAR], __C3=GridSqlType 
[type=4, scale=0, precision=10, displaySize=11, sql=INTEGER], __C4=GridSqlType 
[type=4, scale=0, precision=10, displaySize=11, sql=INTEGER], __C5=GridSqlType 
[type=4, scale=0, precision=10, displaySize=11, sql=INTEGER], __C6=GridSqlType 
[type=19, scale=0, precision=2147483647, displaySize=2147483647, sql=OTHER], 
__C7=GridSqlType [type=13, scale=0, precision=2147483647, 
displaySize=2147483647, sql=VARCHAR], __C8=GridSqlType [type=4, scale=0, 
precision=10, displaySize=11, sql=INTEGER], __C9=GridSqlType [type=4, scale=0, 
precision=10, displaySize=11, sql=INTEGER], __C10=GridSqlType [type=4, scale=0, 
precision=10, displaySize=11, sql=INTEGER], __C11=GridSqlType [type=19, 
scale=0, precision=2147483647, displaySize=2147483647, sql=OTHER], 
__C12=GridSqlType [type=13, scale=0, precision=2147483647, 
displaySize=2147483647, sql=VARCHAR], __C13=GridSqlType [type=4, scale=0, 
precision=10, displaySize=11, sql=INTEGER]}, alias=null]], 
topVer=AffinityTopologyVersion [topVer=1, minorTopVer=0], extraSpaces=[D, O], 
parts=null]
class org.apache.ignite.IgniteCheckedException: Failed to parse SQL query: 
SELECT
PERSON._KEY __C0,
PERSON._VAL __C1,
PERSON.NAME __C2,
PERSON.ID __C3,
PERSON.DEPID __C4,
DEP._KEY __C5,
DEP._VAL __C6,
DEP.NAME __C7,
DEP.ID __C8,
DEP.ORGID __C9,
ORG._KEY __C10,
ORG._VAL __C11,
ORG.NAME __C12,
ORG.ID __C13
FROM P.PERSON 
 INNER JOIN D.DEPARTMENT DEP 
 LEFT OUTER JOIN O.ORG ORG 
 ON ORG.ID = DEP.ORGID
WHERE DEP.ID = P.PERSON.DEPID
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:828)
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:870)
        at 
org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest(GridMapQueryExecutor.java:454)
        at 
org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onMessage(GridMapQueryExecutor.java:184)
        at 
org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.send(GridReduceQueryExecutor.java:1065)
        at 
org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:572)
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$2.iterator(IgniteH2Indexing.java:971)
        at 
org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:61)
        at 
org.apache.ignite.internal.processors.cache.QueryCursorImpl.getAll(QueryCursorImpl.java:73)
        at 
org.apache.ignite.internal.processors.cache.distributed.replicated.Example2.main(Example2.java:40)
Caused by: org.h2.jdbc.JdbcSQLException: Column "DEP.ORGID" not found; SQL 
statement:
SELECT
PERSON._KEY __C0,
PERSON._VAL __C1,
PERSON.NAME __C2,
PERSON.ID __C3,
PERSON.DEPID __C4,
DEP._KEY __C5,
DEP._VAL __C6,
DEP.NAME __C7,
DEP.ID __C8,
DEP.ORGID __C9,
ORG._KEY __C10,
ORG._VAL __C11,
ORG.NAME __C12,
ORG.ID __C13
FROM P.PERSON 
 INNER JOIN D.DEPARTMENT DEP 
 LEFT OUTER JOIN O.ORG ORG 
 ON ORG.ID = DEP.ORGID
WHERE DEP.ID = P.PERSON.DEPID [42122-175]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
        at org.h2.message.DbException.get(DbException.java:172)
        at org.h2.message.DbException.get(DbException.java:149)
        at 
org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:144)
        at org.h2.expression.Comparison.optimize(Comparison.java:179)
        at org.h2.command.dml.Select.setEvaluatableRecursive(Select.java:958)
        at org.h2.command.dml.Select.preparePlan(Select.java:937)
        at org.h2.command.dml.Select.prepare(Select.java:834)
        at org.h2.command.Parser.prepareCommand(Parser.java:240)
        at org.h2.engine.Session.prepareLocal(Session.java:436)
        at org.h2.engine.Session.prepareCommand(Session.java:379)
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)
        at 
org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:70)
        at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:267)
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:359)
        at 
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:825)
        ... 9 more
{noformat}

  was:
Distributed SQL query cannot be parsed on map side if it contains left join.
The same local query works without any error.
Replacing left join with inner join removes the error.
See the attachment for the reproducer.


> SQL query parse error on map query side
> ---------------------------------------
>
>                 Key: IGNITE-3273
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3273
>             Project: Ignite
>          Issue Type: Bug
>          Components: general
>            Reporter: Alexei Scherbakov
>             Fix For: 1.7
>
>         Attachments: Example2.java
>
>
> Distributed SQL query cannot be parsed on map side if it contains left join.
> The same local query works without any error.
> Replacing left join with inner join removes the error.
> See the attachment for the reproducer.
> {noformat}
> [10:40:58,850][ERROR][main][GridMapQueryExecutor] Failed to execute local 
> query: GridQueryRequest [reqId=1, pageSize=1024, space=P, 
> qrys=[GridCacheSqlQuery [qry=SELECT
> PERSON._KEY __C0,
> PERSON._VAL __C1,
> PERSON.NAME __C2,
> PERSON.ID __C3,
> PERSON.DEPID __C4,
> DEP._KEY __C5,
> DEP._VAL __C6,
> DEP.NAME __C7,
> DEP.ID __C8,
> DEP.ORGID __C9,
> ORG._KEY __C10,
> ORG._VAL __C11,
> ORG.NAME __C12,
> ORG.ID __C13
> FROM P.PERSON 
>  INNER JOIN D.DEPARTMENT DEP 
>  LEFT OUTER JOIN O.ORG ORG 
>  ON ORG.ID = DEP.ORGID
> WHERE DEP.ID = P.PERSON.DEPID, params=[], paramIdxs=[], paramsSize=0, 
> cols={__C0=GridSqlType [type=4, scale=0, precision=10, displaySize=11, 
> sql=INTEGER], __C1=GridSqlType [type=19, scale=0, precision=2147483647, 
> displaySize=2147483647, sql=OTHER], __C2=GridSqlType [type=13, scale=0, 
> precision=2147483647, displaySize=2147483647, sql=VARCHAR], __C3=GridSqlType 
> [type=4, scale=0, precision=10, displaySize=11, sql=INTEGER], 
> __C4=GridSqlType [type=4, scale=0, precision=10, displaySize=11, 
> sql=INTEGER], __C5=GridSqlType [type=4, scale=0, precision=10, 
> displaySize=11, sql=INTEGER], __C6=GridSqlType [type=19, scale=0, 
> precision=2147483647, displaySize=2147483647, sql=OTHER], __C7=GridSqlType 
> [type=13, scale=0, precision=2147483647, displaySize=2147483647, 
> sql=VARCHAR], __C8=GridSqlType [type=4, scale=0, precision=10, 
> displaySize=11, sql=INTEGER], __C9=GridSqlType [type=4, scale=0, 
> precision=10, displaySize=11, sql=INTEGER], __C10=GridSqlType [type=4, 
> scale=0, precision=10, displaySize=11, sql=INTEGER], __C11=GridSqlType 
> [type=19, scale=0, precision=2147483647, displaySize=2147483647, sql=OTHER], 
> __C12=GridSqlType [type=13, scale=0, precision=2147483647, 
> displaySize=2147483647, sql=VARCHAR], __C13=GridSqlType [type=4, scale=0, 
> precision=10, displaySize=11, sql=INTEGER]}, alias=null]], 
> topVer=AffinityTopologyVersion [topVer=1, minorTopVer=0], extraSpaces=[D, O], 
> parts=null]
> class org.apache.ignite.IgniteCheckedException: Failed to parse SQL query: 
> SELECT
> PERSON._KEY __C0,
> PERSON._VAL __C1,
> PERSON.NAME __C2,
> PERSON.ID __C3,
> PERSON.DEPID __C4,
> DEP._KEY __C5,
> DEP._VAL __C6,
> DEP.NAME __C7,
> DEP.ID __C8,
> DEP.ORGID __C9,
> ORG._KEY __C10,
> ORG._VAL __C11,
> ORG.NAME __C12,
> ORG.ID __C13
> FROM P.PERSON 
>  INNER JOIN D.DEPARTMENT DEP 
>  LEFT OUTER JOIN O.ORG ORG 
>  ON ORG.ID = DEP.ORGID
> WHERE DEP.ID = P.PERSON.DEPID
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:828)
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQueryWithTimer(IgniteH2Indexing.java:870)
>       at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onQueryRequest(GridMapQueryExecutor.java:454)
>       at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridMapQueryExecutor.onMessage(GridMapQueryExecutor.java:184)
>       at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.send(GridReduceQueryExecutor.java:1065)
>       at 
> org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:572)
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$2.iterator(IgniteH2Indexing.java:971)
>       at 
> org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:61)
>       at 
> org.apache.ignite.internal.processors.cache.QueryCursorImpl.getAll(QueryCursorImpl.java:73)
>       at 
> org.apache.ignite.internal.processors.cache.distributed.replicated.Example2.main(Example2.java:40)
> Caused by: org.h2.jdbc.JdbcSQLException: Column "DEP.ORGID" not found; SQL 
> statement:
> SELECT
> PERSON._KEY __C0,
> PERSON._VAL __C1,
> PERSON.NAME __C2,
> PERSON.ID __C3,
> PERSON.DEPID __C4,
> DEP._KEY __C5,
> DEP._VAL __C6,
> DEP.NAME __C7,
> DEP.ID __C8,
> DEP.ORGID __C9,
> ORG._KEY __C10,
> ORG._VAL __C11,
> ORG.NAME __C12,
> ORG.ID __C13
> FROM P.PERSON 
>  INNER JOIN D.DEPARTMENT DEP 
>  LEFT OUTER JOIN O.ORG ORG 
>  ON ORG.ID = DEP.ORGID
> WHERE DEP.ID = P.PERSON.DEPID [42122-175]
>       at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
>       at org.h2.message.DbException.get(DbException.java:172)
>       at org.h2.message.DbException.get(DbException.java:149)
>       at 
> org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:144)
>       at org.h2.expression.Comparison.optimize(Comparison.java:179)
>       at org.h2.command.dml.Select.setEvaluatableRecursive(Select.java:958)
>       at org.h2.command.dml.Select.preparePlan(Select.java:937)
>       at org.h2.command.dml.Select.prepare(Select.java:834)
>       at org.h2.command.Parser.prepareCommand(Parser.java:240)
>       at org.h2.engine.Session.prepareLocal(Session.java:436)
>       at org.h2.engine.Session.prepareCommand(Session.java:379)
>       at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)
>       at 
> org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:70)
>       at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:267)
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:359)
>       at 
> org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.executeSqlQuery(IgniteH2Indexing.java:825)
>       ... 9 more
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to