[
https://issues.apache.org/jira/browse/TRAFODION-2901?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16496019#comment-16496019
]
ASF GitHub Bot commented on TRAFODION-2901:
-------------------------------------------
Github user Guhaiyan commented on a diff in the pull request:
https://github.com/apache/trafodion/pull/1581#discussion_r191980234
--- Diff: core/sql/optimizer/RelExpr.cpp ---
@@ -13341,6 +13345,33 @@ void GenericUpdate::pushdownCoveredExpr(const
ValueIdSet &outputExpr,
newExternalInputs,
predicatesOnParent,
&localExprs);
+
+ if (avoidHalloween() && child(0) && child(0)->getGroupAttr())
+ {
+ ValueIdSet cur_output =
child(0)->getGroupAttr()->getCharacteristicOutputs();
+ if (cur_output.isEmpty())
+ {
+ ValueId exprId;
+ ValueId atLeastOne;
+
+ for (exprId = original_output.init();
+ original_output.next(exprId);
+ original_output.advance(exprId))
+ {
+ atLeastOne = exprId;
+ if
(!(exprId.getItemExpr()->doesExprEvaluateToConstant(FALSE, TRUE)))
+ {
+
child(0)->getGroupAttr()->addCharacteristicOutputs(exprId);
+ break;
+ }
+ }
+ cur_output = child(0)->getGroupAttr()->getCharacteristicOutputs();
+ if (cur_output.isEmpty())
--- End diff --
Thank for the comment. I think your concern about the empty original_output
seems reasonable. After binder, the original characteristic output for Scan
consists of getTableDesc()->getColumnList() and
getTableDesc()->hbaseAttrList(). But it is hard to decide what happened to the
output during transformer. So there may be possibility that the characteristic
output for Scan becomes empty after transform, and I am not quite sure about
that.
So I think the simplest way is taking
child(0)->getTableDescForExpr()->getColumnList() as the output source picked
from, instead of original_output in the PR. In this way, the source output will
never be empty.
> using sequence to do upsert get wrong number of rows after several times
> ------------------------------------------------------------------------
>
> Key: TRAFODION-2901
> URL: https://issues.apache.org/jira/browse/TRAFODION-2901
> Project: Apache Trafodion
> Issue Type: Bug
> Reporter: liu ming
> Assignee: Gu Haiyan
> Priority: Major
>
> create table test_seq
> (id LARGEINT not null
> ) primary key(id)
> SALT USING 48 PARTITIONS
> ATTRIBUTES ALIGNED FORMAT
> HBASE_OPTIONS
> (
> DATA_BLOCK_ENCODING = 'FAST_DIFF',
> MEMSTORE_FLUSH_SIZE = '1073741824'
> );
> create sequence seq1;
> upsert into test_seq select seqnum(seq1, next) from dual;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> upsert into test_seq select seqnum(seq1, next) from test_seq;
> --- 130 row(s) inserted.
> Should be 128 rows
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)