You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by li...@apache.org on 2018/02/23 09:45:25 UTC
[6/9] trafodion git commit: make the uuid evaluate once per statement
make the uuid evaluate once per statement
Project: http://git-wip-us.apache.org/repos/asf/trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafodion/commit/9312bd20
Tree: http://git-wip-us.apache.org/repos/asf/trafodion/tree/9312bd20
Diff: http://git-wip-us.apache.org/repos/asf/trafodion/diff/9312bd20
Branch: refs/heads/master
Commit: 9312bd20c952bc8f0a74141400a3a9e30c053dc5
Parents: f59119c
Author: Liu Ming <ov...@sina.com>
Authored: Fri Feb 16 22:51:10 2018 +0000
Committer: Liu Ming <ov...@sina.com>
Committed: Fri Feb 16 22:51:10 2018 +0000
----------------------------------------------------------------------
core/sql/common/OperTypeEnum.h | 5 ++---
core/sql/generator/GenExpGenerator.cpp | 2 ++
core/sql/optimizer/BindItemExpr.cpp | 30 ++++++++++++++++++-----------
core/sql/optimizer/GroupAttr.cpp | 2 ++
core/sql/optimizer/ItemExpr.cpp | 13 +++++++++++++
core/sql/optimizer/ItemFunc.h | 6 ++++++
6 files changed, 44 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafodion/blob/9312bd20/core/sql/common/OperTypeEnum.h
----------------------------------------------------------------------
diff --git a/core/sql/common/OperTypeEnum.h b/core/sql/common/OperTypeEnum.h
index 293a372..c70310f 100644
--- a/core/sql/common/OperTypeEnum.h
+++ b/core/sql/common/OperTypeEnum.h
@@ -472,9 +472,8 @@ enum OperatorTypeEnum {
// Regular Expression
ITM_REGEXP = 2178,
ITM_UNIX_TIMESTAMP = 2179,
- ITM_UUID_SHORT = 2180,
- ITM_SLEEP = 2181,
- ITM_UNIQUE_SHORT_ID = 2182,
+ ITM_SLEEP = 2180,
+ ITM_UNIQUE_SHORT_ID = 2181,
// numeric functions
ITM_ABS = 2200,
http://git-wip-us.apache.org/repos/asf/trafodion/blob/9312bd20/core/sql/generator/GenExpGenerator.cpp
----------------------------------------------------------------------
diff --git a/core/sql/generator/GenExpGenerator.cpp b/core/sql/generator/GenExpGenerator.cpp
index 1b038a5..f2651c4 100644
--- a/core/sql/generator/GenExpGenerator.cpp
+++ b/core/sql/generator/GenExpGenerator.cpp
@@ -3701,6 +3701,8 @@ short ExpGenerator::generateInputExpr(const ValueIdList &val_id_list,
if ((item_expr->isAUserSuppliedInput()) || //evaluate once functions
(item_expr->getOperatorType() == ITM_CURRENT_TIMESTAMP) ||
(item_expr->getOperatorType() == ITM_UNIX_TIMESTAMP) ||
+ (item_expr->getOperatorType() == ITM_UNIQUE_ID) ||
+ (item_expr->getOperatorType() == ITM_UNIQUE_SHORT_ID) ||
(item_expr->getOperatorType() == ITM_CURRENT_USER) ||
(item_expr->getOperatorType() == ITM_SESSION_USER) ||
(item_expr->getOperatorType() == ITM_EXEC_COUNT) ||
http://git-wip-us.apache.org/repos/asf/trafodion/blob/9312bd20/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp b/core/sql/optimizer/BindItemExpr.cpp
index ee687e4..c617d17 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -3199,6 +3199,23 @@ ItemExpr *BuiltinFunction::bindNode(BindWA *bindWA)
{
break;
}
+ case ITM_UNIQUE_ID:
+ case ITM_UNIQUE_SHORT_ID:
+ {
+ if (nodeIsBound())
+ return getValueId().getItemExpr();
+ const NAType *type = synthTypeWithCollateClause(bindWA);
+ if (!type) return this;
+
+ ItemExpr* ie = ItemExpr::bindUserInput(bindWA,type,getText());
+ if (bindWA->errStatus())
+ return this;
+
+ // add this value id to BindWA's input function list.
+ bindWA->inputFunction().insert(getValueId());
+ return ie;
+ }
+ break;
case ITM_NULLIFZERO:
{
// binder has already verified that child is numeric
@@ -3473,6 +3490,7 @@ ItemExpr *BuiltinFunction::bindNode(BindWA *bindWA)
// expression getting translated correctly.
setReplacementExpr(ie);
+
return ie;
}
@@ -12013,17 +12031,7 @@ ItemExpr *ZZZBinderFunction::bindNode(BindWA *bindWA)
}
}
break;
-/*
- case ITM_SLEEP:
- {
- ItemExpr * tempBoundTree = child(0)->castToItemExpr()->bindNode(bindWA);
- if (bindWA->errStatus())
- return this;
- buf[0] = 0;
- parseTree = child(0);
- }
- break;
-*/
+
case ITM_TO_NUMBER:
{
ItemExpr *tempBoundTree = child(0)->castToItemExpr()->bindNode(bindWA);
http://git-wip-us.apache.org/repos/asf/trafodion/blob/9312bd20/core/sql/optimizer/GroupAttr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/GroupAttr.cpp b/core/sql/optimizer/GroupAttr.cpp
index eb6a87b..3ebe690 100644
--- a/core/sql/optimizer/GroupAttr.cpp
+++ b/core/sql/optimizer/GroupAttr.cpp
@@ -1793,6 +1793,8 @@ void GroupAttributes::resolveCharacteristicInputs(const ValueIdSet& externalInpu
ItemExpr * vidExpr = vid.getItemExpr();
if ((vidExpr->getOperatorType() == ITM_CURRENT_USER) ||
(vidExpr->getOperatorType() == ITM_CURRENT_TIMESTAMP) ||
+ (vidExpr->getOperatorType() == ITM_UNIQUE_SHORT_ID) ||
+ (vidExpr->getOperatorType() == ITM_UNIQUE_ID) ||
(vidExpr->getOperatorType() == ITM_UNIX_TIMESTAMP))
currentConstants += vid;
http://git-wip-us.apache.org/repos/asf/trafodion/blob/9312bd20/core/sql/optimizer/ItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp
index b58aa5e..a2e56eb 100644
--- a/core/sql/optimizer/ItemExpr.cpp
+++ b/core/sql/optimizer/ItemExpr.cpp
@@ -872,6 +872,8 @@ NABoolean ItemExpr::doesExprEvaluateToConstant(NABoolean strict,
case ITM_DYN_PARAM:
case ITM_CACHE_PARAM:
+ case ITM_UNIQUE_ID:
+ case ITM_UNIQUE_SHORT_ID:
case ITM_CURRENT_USER:
case ITM_SESSION_USER:
case ITM_CURRENT_TIMESTAMP:
@@ -969,6 +971,8 @@ NABoolean ItemExpr::referencesAHostVar() const
case ITM_CURRENT_TIMESTAMP:
case ITM_GET_TRIGGERS_STATUS:
case ITM_UNIQUE_EXECUTE_ID:
+ case ITM_UNIQUE_SHORT_ID:
+ case ITM_UNIQUE_ID:
case ITM_CURR_TRANSID:
return TRUE;
@@ -7368,6 +7372,15 @@ Int32 BuiltinFunction::getArity() const
return getNumChildren();
}
+NABoolean BuiltinFunction::isAUserSuppliedInput() const
+{
+ if(getOperatorType() == ITM_UNIQUE_ID ||
+ getOperatorType() == ITM_UNIQUE_SHORT_ID )
+ return TRUE;
+ else
+ return FALSE;
+}
+
// -----------------------------------------------------------------------
// BuiltinFunction::isCovered()
// -----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafodion/blob/9312bd20/core/sql/optimizer/ItemFunc.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ItemFunc.h b/core/sql/optimizer/ItemFunc.h
index 09f4652..7c67931 100644
--- a/core/sql/optimizer/ItemFunc.h
+++ b/core/sql/optimizer/ItemFunc.h
@@ -680,6 +680,12 @@ public:
// a virtual function for performing name binding within the query tree
virtual ItemExpr * bindNode(BindWA *bindWA);
+ // A method that returns for "user-given" input values.
+ // These are values that are either constants, host variables, parameters,
+ // or even values that are sensed from the environment such as
+ // current time, the user name, etcetera.
+ virtual NABoolean isAUserSuppliedInput() const;
+
// Each operator supports a (virtual) method for transforming its
// scalar expressions to a canonical form
virtual void transformNode(NormWA & normWARef,