[ https://issues.apache.org/jira/browse/TRAFODION-1562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15864185#comment-15864185 ]
ASF GitHub Bot commented on TRAFODION-1562: ------------------------------------------- Github user selvaganesang commented on a diff in the pull request: https://github.com/apache/incubator-trafodion/pull/946#discussion_r100865957 --- Diff: core/sql/optimizer/BindRelExpr.cpp --- @@ -10600,37 +10600,67 @@ Upsert is also converted into merge when TRAF_UPSERT_MODE is set to MERGE and there are omitted cols with default values in case of aligned format table or omitted current timestamp cols in case of non-aligned row format */ -NABoolean Insert::isUpsertThatNeedsMerge(NABoolean isAlignedRowFormat, NABoolean omittedDefaultCols, - NABoolean omittedCurrentDefaultClassCols) const +NABoolean Insert::isUpsertThatNeedsTransformation(NABoolean isAlignedRowFormat, + NABoolean omittedDefaultCols, + NABoolean omittedCurrentDefaultClassCols, + NABoolean &toMerge) const { - // The necessary conditions to convert upsert to merge and + toMerge = FALSE; + // If the the table has an identity column in clustering key or has a syskey + // we dont need to do this transformation.The incoming row will always be + // unique. So first check if we any of the conditions are satisfied to + //even try the transform + NABoolean mustTryTransform = FALSE; if (isUpsert() && - (NOT getIsTrafLoadPrep()) && - (NOT (getTableDesc()->isIdentityColumnGeneratedAlways() && getTableDesc()->hasIdentityColumnInClusteringKey())) && - (NOT (getTableDesc()->getClusteringIndex()->getNAFileSet()->hasSyskey())) && - // table has secondary indexes or - (getTableDesc()->hasSecondaryIndexes() || - // CQD is set to MERGE - ((CmpCommon::getDefault(TRAF_UPSERT_MODE) == DF_MERGE) && - // omitted current default columns with non-aligned row format tables - // or omitted default columns with aligned row format tables - (((NOT isAlignedRowFormat) && omittedCurrentDefaultClassCols) || - (isAlignedRowFormat && omittedDefaultCols))) || - // CQD is set to Optimal, for non-aligned row format with omitted - // current columns, it is converted into merge though it is not - // optimal for performance - This is done to ensure that when the - // CQD is set to optimal, non-aligned format would behave like - // merge when any column is omitted - ((CmpCommon::getDefault(TRAF_UPSERT_MODE) == DF_OPTIMAL) && - ((NOT isAlignedRowFormat) && omittedCurrentDefaultClassCols)) - ) - ) - return TRUE; - else - return FALSE; + ( NOT getIsTrafLoadPrep()) && + (NOT (getTableDesc()->isIdentityColumnGeneratedAlways() && + getTableDesc()->hasIdentityColumnInClusteringKey())) && + (NOT(getTableDesc()->getClusteringIndex()->getNAFileSet()->hasSyskey()))) --- End diff -- Consider making this as a OR condition for better readability because the original condition is now split into two > Changes in query tree when the upsert command is transformed into merge > ----------------------------------------------------------------------- > > Key: TRAFODION-1562 > URL: https://issues.apache.org/jira/browse/TRAFODION-1562 > Project: Apache Trafodion > Issue Type: Sub-task > Components: sql-cmp > Reporter: Selvaganesan Govindarajan > Assignee: Sandhya Sundaresan > Attachments: BatchUpsertTransformation.pdf > > > to improve the performance as explained in the main JIRA -- This message was sent by Atlassian JIRA (v6.3.15#6346)