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,