[teiid-issues] [JBoss JIRA] (TEIID-2093) MAKEDEP causes AssertionError

Hisanobu Okuda (JIRA) jira-events at lists.jboss.org
Fri Jul 6 04:16:12 EDT 2012


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

Hisanobu Okuda edited comment on TEIID-2093 at 7/6/12 4:14 AM:
---------------------------------------------------------------

I observed the issue occurs when there is <dependent values> in FROM clause. I reproduced the issue with the attached vdb on my setup. Please find attached server.log.  DependentAccessNode(4) has <dependent values> in FROM clause.:-

    DependentAccessNode(4) output=[aa.ID, aa.BOOK, aa.BUSINESS_DATE, aa.ACCOUNT, aa.AMOUNT, aa.TRAD_TRADE_ID] SELECT v_0.c_0, v_0.c_2 AS c_1, v_0.c_4 AS c_2, v_0.c_1 AS c_3, v_0.c_5 AS c_4, v_0.c_3 AS c_5 FROM (SELECT DISTINCT g_0.ID AS c_0, g_0.ACCOUNT AS c_1, g_0.BOOK AS c_2, g_0.TRAD_TRADE_ID AS c_3, g_0.BUSINESS_DATE AS c_4, g_0.AMOUNT AS c_5 FROM DBA.DBA.A AS g_0 WHERE (g_0.BUSINESS_DATE = {d'2012-07-04'}) AND (g_0.ACCOUNT LIKE 'a%') AND (g_0.ID IN (<dependent values>)) AND (g_0.BOOK IN (<dependent values>))) AS v_0 ORDER BY c_0

This causes AssertionError, because LanguageBridgeFactory.translate does not handle DependentSetCriteria.
LanguageBridgeFactory.java:-

{code}
292     public Condition translate(Criteria criteria) {
293         if (criteria == null) return null;
294         if (criteria instanceof CompareCriteria) {
295             return translate((CompareCriteria)criteria);
296         } else if (criteria instanceof CompoundCriteria) {
297             return translate((CompoundCriteria)criteria);
298         } else if (criteria instanceof ExistsCriteria) {
299             return translate((ExistsCriteria)criteria);
300         } else if (criteria instanceof IsNullCriteria) {
301             return translate((IsNullCriteria)criteria);
302         }else if (criteria instanceof MatchCriteria) {
303             return translate((MatchCriteria)criteria);
304         } else if (criteria instanceof NotCriteria) {
305             return translate((NotCriteria)criteria);
306         } else if (criteria instanceof SetCriteria) {
307             return translate((SetCriteria)criteria);
308         } else if (criteria instanceof SubqueryCompareCriteria) {
309             return translate((SubqueryCompareCriteria)criteria);
310         } else if (criteria instanceof SubquerySetCriteria) {
311             return translate((SubquerySetCriteria)criteria);
312         }
313         throw new AssertionError();
314     }
{code}

There are 2 ways of approach. One is to handle DependentSetCriteria in LanguageBridgeFactory.translate. Worrying if it is side-effect-prone. The 2 is to inhibit too much optimizaiton, ie, putting <dependent values> criteria out of FROM clause.

                
      was (Author: hisanobu.okuda):
    I observed the issue occurs when there is <dependent values> in FROM clause. I reproduced the issue with the attached vdb on my setup. Please find attached server.log.  DependentAccessNode(4) has <dependent values> in FROM clause.:-

    DependentAccessNode(4) output=[aa.ID, aa.BOOK, aa.BUSINESS_DATE, aa.ACCOUNT, aa.AMOUNT, aa.TRAD_TRADE_ID] SELECT v_0.c_0, v_0.c_2 AS c_1, v_0.c_4 AS c_2, v_0.c_1 AS c_3, v_0.c_5 AS c_4, v_0.c_3 AS c_5 FROM (SELECT DISTINCT g_0.ID AS c_0, g_0.ACCOUNT AS c_1, g_0.BOOK AS c_2, g_0.TRAD_TRADE_ID AS c_3, g_0.BUSINESS_DATE AS c_4, g_0.AMOUNT AS c_5 FROM DBA.DBA.A AS g_0 WHERE (g_0.BUSINESS_DATE = {d'2012-07-04'}) AND (g_0.ACCOUNT LIKE 'a%') AND (g_0.ID IN (<dependent values>)) AND (g_0.BOOK IN (<dependent values>))) AS v_0 ORDER BY c_0

This causes AssertionError, because LanguageBridgeFactory.translate does not handle DependentSetCriteria.
LanguageBridgeFactory.java:-

{quote}
292     public Condition translate(Criteria criteria) {
293         if (criteria == null) return null;
294         if (criteria instanceof CompareCriteria) {
295             return translate((CompareCriteria)criteria);
296         } else if (criteria instanceof CompoundCriteria) {
297             return translate((CompoundCriteria)criteria);
298         } else if (criteria instanceof ExistsCriteria) {
299             return translate((ExistsCriteria)criteria);
300         } else if (criteria instanceof IsNullCriteria) {
301             return translate((IsNullCriteria)criteria);
302         }else if (criteria instanceof MatchCriteria) {
303             return translate((MatchCriteria)criteria);
304         } else if (criteria instanceof NotCriteria) {
305             return translate((NotCriteria)criteria);
306         } else if (criteria instanceof SetCriteria) {
307             return translate((SetCriteria)criteria);
308         } else if (criteria instanceof SubqueryCompareCriteria) {
309             return translate((SubqueryCompareCriteria)criteria);
310         } else if (criteria instanceof SubquerySetCriteria) {
311             return translate((SubquerySetCriteria)criteria);
312         }
313         throw new AssertionError();
314     }
{quote}

There are 2 ways of approach. One is to handle DependentSetCriteria in LanguageBridgeFactory.translate. Worrying if it is side-effect-prone. The 2 is to inhibit too much optimizaiton, ie, putting <dependent values> criteria out of FROM clause.

                  
> MAKEDEP causes AssertionError
> -----------------------------
>
>                 Key: TEIID-2093
>                 URL: https://issues.jboss.org/browse/TEIID-2093
>             Project: Teiid
>          Issue Type: Bug
>          Components: Query Engine
>    Affects Versions: 7.4.1
>         Environment: openjdk 1.6.0_24
> EDS 5.2
>            Reporter: Hisanobu Okuda
>            Assignee: Steven Hawkins
>         Attachments: create_db.sql, IVTest.zip, server.log.1
>
>
> When /*+ MAKEDEP */ is in a query, AssertionError is thrown :-
> 2012-07-06 06:55:34,984 ERROR [org.teiid.CONNECTOR] (Worker68_QueryProcessorQueue220) Connector worker process failed for atomic-request=+ccfiekJpQHH.0.4.69
> java.lang.AssertionError
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:313)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:348)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:297)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:213)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:154)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:285)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:249)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:210)
> 	at org.teiid.dqp.internal.datamgr.LanguageBridgeFactory.translate(LanguageBridgeFactory.java:135)
> 	at org.teiid.dqp.internal.datamgr.ConnectorWorkItem.execute(ConnectorWorkItem.java:217)
> 	at org.teiid.dqp.internal.process.DataTierTupleSource.getResults(DataTierTupleSource.java:338)
> 	at org.teiid.dqp.internal.process.DataTierTupleSource.access$000(DataTierTupleSource.java:80)
> 	at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:138)
> 	at org.teiid.dqp.internal.process.DataTierTupleSource$1.call(DataTierTupleSource.java:135)
> 	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
> 	at java.util.concurrent.FutureTask.run(FutureTask.java:166)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the teiid-issues mailing list