[teiid-issues] [JBoss JIRA] (TEIID-4312) INNER and LEFT joins of CTEs fail or return incorrect results

Steven Hawkins (JIRA) issues at jboss.org
Thu Jun 30 20:24:00 EDT 2016


    [ https://issues.jboss.org/browse/TEIID-4312?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13259953#comment-13259953 ] 

Steven Hawkins commented on TEIID-4312:
---------------------------------------

The first case is caused by a bad interaction between the with clause inlining and projection minimization logic - a used column should not be marked as null.

The second case is a distinct issue, but I'll work them together if it makes sense.

> INNER and LEFT joins of CTEs fail or return incorrect results
> -------------------------------------------------------------
>
>                 Key: TEIID-4312
>                 URL: https://issues.jboss.org/browse/TEIID-4312
>             Project: Teiid
>          Issue Type: Bug
>            Reporter: Salvatore R
>            Assignee: Steven Hawkins
>
> I defined a table "test_a" with the same data and structure in PostgreSQL and MySQL:
> {code:sql}
> CREATE TABLE test_a(a integer, b integer);
> INSERT INTO test_a VALUES (1, 1);
> INSERT INTO test_a VALUES (1, 2);
> INSERT INTO test_a VALUES (2, 1);
> INSERT INTO test_a VALUES (2, 2);
> INSERT INTO test_a VALUES (3, 2);
> INSERT INTO test_a VALUES (3, 10);
> {code}
> The following query, based on the table in *PostgreSQL*, fails:
> {code:sql}
> with
> CTE1 as (
>         WITH 
>             CTE11 as (SELECT a from pg.test_a),
>             CTE21 as (select t1.a from CTE11 t1 join CTE11 t2 on t1.a=t2.a),
>             CTE31 as (select a from CTE21)
>         SELECT CTE31.a FROM CTE21 join CTE31 on CTE31.a=CTE21.a
>     )  
> select * from CTE1
> {code}
> with this exception:
> {code:sql}
> 16:36:28,752 WARN  [org.teiid.CONNECTOR] (Worker13_QueryProcessorQueue114) eYLiZgMIChSF Connector worker process failed for atomic-request=eYLiZgMIChSF.11.2.24: org.teiid.translator.jdbc.JDBCExecutionException: 0 TEIID11008:TEIID11004 Error executing statement(s): [Prepared Values: [] SQL: WITH CTE11 (a) AS (SELECT NULL FROM "public"."test_a" AS g_0), CTE21 (a) AS (SELECT g_0.a FROM CTE11 AS g_0, CTE11 AS g_1 WHERE g_0.a = g_1.a) SELECT g_1.a FROM CTE21 AS g_0, CTE21 AS g_1 WHERE g_1.a = g_0.a]
>         at org.teiid.translator.jdbc.JDBCQueryExecution.execute(JDBCQueryExecution.java:131)
>         at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.execute(ConnectorWorkItem.java:365)
>         at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:606)
>         at org.teiid.dqp.internal.datamgr.ConnectorManager$1.invoke(ConnectorManager.java:211)
>         at com.sun.proxy.$Proxy56.execute(Unknown Source)
>         at org.teiid.dqp.internal.process.DataTierTupleSource.getResults(DataTierTupleSource.java:306)
>         at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:112)
>         at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:108)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:262)
>         at org.teiid.dqp.internal.process.FutureWork.run(FutureWork.java:65)
>         at org.teiid.dqp.internal.process.DQPWorkContext.runInContext(DQPWorkContext.java:276)
>         at org.teiid.dqp.internal.process.ThreadReuseExecutor$RunnableWrapper.run(ThreadReuseExecutor.java:119)
>         at org.teiid.dqp.internal.process.ThreadReuseExecutor$3.run(ThreadReuseExecutor.java:210)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
> Caused by: org.postgresql.util.PSQLException: ERROR: failed to find conversion function from unknown to text
>         at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
>         at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
>         at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
>         at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
>         at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
>         at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
>         at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:504)
>         at org.teiid.translator.jdbc.JDBCQueryExecution.execute(JDBCQueryExecution.java:123)
>         ... 17 more
> {code}
> The same query based on the table in *MySQL* wrongly returns an empty result.
> The main differences is that the query is fully pushed down to PostgreSQL but it isn't in MySQL.
> Regarding wrong results, I am also experiencing a similar problem with the following query:
> {code:sql}
> with
> CTE1 as (
>         WITH 
>             alias as (SELECT a from pg.test_a),
>             alias2 as (select t2.a as a1, t1.a from alias t1 join (SELECT 1 as a) t2 on t1.a=t2.a),
>             CTE31 as (select t2.a as a1 from alias2 t2)
>         SELECT CTE31.a1 FROM alias2 join CTE31 on CTE31.a1=alias2.a
>     ),
> CTE2 as (
>         WITH 
>             alias as (SELECT 1 as a),
>             alias2 as (select t2.a a1, t1.a from alias t1 join (SELECT 1 as a) t2 on t1.a=t2.a),
>             CTE32 as (select t2.a from alias2 t2)
>         SELECT CTE32.a FROM alias2 join CTE32 on CTE32.a=alias2.a
>     )  
> select * from CTE1 as T1 join CTE2 as T2 on T1.a1=T2.a
> {code}
> It returns 4 rows (as expected) if based on MySQL table but it returns 16 rows if pushed down to PostgreSQL.
> I don't know if the two behaviors are related or not, but I can create a different ticket for the second issue, if needed.



--
This message was sent by Atlassian JIRA
(v6.4.11#64026)


More information about the teiid-issues mailing list