Github user traflm commented on a diff in the pull request: https://github.com/apache/trafodion/pull/1688#discussion_r209260745 --- Diff: core/sql/optimizer/BindRelExpr.cpp --- @@ -2505,7 +2505,62 @@ RelExpr *RelExpr::bindSelf(BindWA *bindWA) if (bindWA->inViewWithCheckOption()) bindWA->predsOfViewWithCheckOption() += selectionPred(); } +#if 0 + ItemExpr *startWithTree = removeStartWithTree(); + if (startWithTree) { + bindWA->getCurrentScope()->context()->inWhereClause() = TRUE; + startWithTree->convertToValueIdSet(getStartWith(), bindWA, ITM_AND); + bindWA->getCurrentScope()->context()->inWhereClause() = FALSE; + + if (bindWA->errStatus()) return this; + // If this is an embedded insert, then subquery predicates are not + // allowed. + // For example: To handle this query and issue an error stating + // subqueries are not allowed in embedded inserts + // + // select a from (insert into t901t01 values(22,22,222))t(a,b,c) + // where t.a IN (select m from t901t03 where t901t03.m = 77); + + if (getGroupAttr()->isEmbeddedInsert()) + { + if (!getStartWith().isEmpty() && getStartWith().containsSubquery()) + { + *CmpCommon::diags() << DgSqlCode(-4337); + bindWA->setErrStatus(); + return this; + } + } + } + + ItemExpr *connectByTree = removeConnectByTree(); + if (connectByTree) { + + bindWA->getCurrentScope()->context()->inWhereClause() = TRUE; + connectByTree->convertToValueIdSet(getConnectBy(), bindWA, ITM_AND); + bindWA->getCurrentScope()->context()->inWhereClause() = FALSE; + + if (bindWA->errStatus()) return this; + + // If this is an embedded insert, then subquery predicates are not + // allowed. + // For example: To handle this query and issue an error stating + // subqueries are not allowed in embedded inserts + // + // select a from (insert into t901t01 values(22,22,222))t(a,b,c) + // where t.a IN (select m from t901t03 where t901t03.m = 77); + + if (getGroupAttr()->isEmbeddedInsert()) + { + if (!getConnectBy().isEmpty() && getConnectBy().containsSubquery()) + { + *CmpCommon::diags() << DgSqlCode(-4337); + bindWA->setErrStatus(); + return this; + } + } + } +#endif --- End diff -- oops, I will remove these dead code.
---