[
https://issues.apache.org/jira/browse/TRAFODION-1562?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15863861#comment-15863861
]
ASF GitHub Bot commented on TRAFODION-1562:
-------------------------------------------
Github user sandhyasun commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/946#discussion_r100825344
--- 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())))
+ {
+ mustTryTransform = TRUE;
+ }
+
+ // Transform upsert to merge in case of special modes and
+ // omitted default columns
+ // Case 1 : CQD is set to MERGE, omitted current(timestamp) default
+ // columns with non-aligned row format table or omitted
+ // default columns with aligned row format tables
+
+ // Case 2 : CQD is set to Optimal, for non-aligned row format with
omitted
+ // current(timestamp) 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
+ if (isUpsert() &&
+ mustTryTransform &&
+ ((CmpCommon::getDefault(TRAF_UPSERT_MODE) == DF_MERGE) &&
+ (((NOT isAlignedRowFormat) && omittedCurrentDefaultClassCols) ||
+ (isAlignedRowFormat && omittedDefaultCols)))
+ ||
+ ((CmpCommon::getDefault(TRAF_UPSERT_MODE) == DF_OPTIMAL) &&
+ ((NOT isAlignedRowFormat) && omittedCurrentDefaultClassCols)))
+ {
+ toMerge = TRUE;
--- End diff --
Correct. Yes it will . As specified in Case 1: and Case 2: comments in the
above code.
> 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)