[teiid-issues] [JBoss JIRA] (TEIID-2093) MAKEDEP causes AssertionError
Hisanobu Okuda (JIRA)
jira-events at lists.jboss.org
Fri Jul 6 04:12: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:10 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:-
{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.
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:-
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 }
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