update the regression test and various fixes

Project: http://git-wip-us.apache.org/repos/asf/trafodion/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafodion/commit/5f58cd95
Tree: http://git-wip-us.apache.org/repos/asf/trafodion/tree/5f58cd95
Diff: http://git-wip-us.apache.org/repos/asf/trafodion/diff/5f58cd95

Branch: refs/heads/master
Commit: 5f58cd95aa72f4cbe944aa8d0aeb11eb0202f524
Parents: 6b800c3
Author: Liu Ming <ovis_p...@sina.com>
Authored: Sun Mar 18 09:19:35 2018 +0000
Committer: Liu Ming <ovis_p...@sina.com>
Committed: Sun Mar 18 09:19:35 2018 +0000

----------------------------------------------------------------------
 core/sql/optimizer/BindItemExpr.cpp      |  1 +
 core/sql/optimizer/ItemFunc.h            |  6 ++++++
 core/sql/parser/ElemDDLColDefault.h      |  4 ++--
 core/sql/parser/sqlparser.y              | 25 +++++++++++++++------
 core/sql/regress/seabase/EXPECTED020     | 31 +++++++++++++++++++++++++++
 core/sql/regress/seabase/TEST020         |  2 +-
 core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp | 12 +++++------
 7 files changed, 66 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/optimizer/BindItemExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/BindItemExpr.cpp 
b/core/sql/optimizer/BindItemExpr.cpp
index 3c81218..2541ab9 100644
--- a/core/sql/optimizer/BindItemExpr.cpp
+++ b/core/sql/optimizer/BindItemExpr.cpp
@@ -4166,6 +4166,7 @@ DateFormat::DateFormat(ItemExpr *val1Ptr, const NAString 
&formatStr,
        wasDateformat_(wasDateformat),
        formatType_(formatType),
        frmt_(-1),
+       origString_(""),
        dateFormat_(DATE_FORMAT_NONE)
 { 
   allowsSQLnullArg() = FALSE; 

http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/optimizer/ItemFunc.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/ItemFunc.h b/core/sql/optimizer/ItemFunc.h
index 6c0c779..ee5dcdc 100644
--- a/core/sql/optimizer/ItemFunc.h
+++ b/core/sql/optimizer/ItemFunc.h
@@ -1918,6 +1918,9 @@ public:
 
   ItemExpr * bindNode(BindWA * bindWA);
 
+  void setOriginalString(NAString &s) {origString_ = s; }
+  const NAString & getOriginalString() const { return origString_; }
+
   // a virtual function for type propagating the node
   virtual const NAType * synthesizeType();
 
@@ -1954,6 +1957,9 @@ private:
 
   // actual datetime format (defined in class ExpDatetime in exp_datetime.h)
   Lng32 frmt_;
+
+  //original string
+  NAString origString_;
 }; // class DateFormat
 
 class DayOfWeek : public CacheableBuiltinFunction

http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/parser/ElemDDLColDefault.h
----------------------------------------------------------------------
diff --git a/core/sql/parser/ElemDDLColDefault.h 
b/core/sql/parser/ElemDDLColDefault.h
index e435400..0415e6b 100644
--- a/core/sql/parser/ElemDDLColDefault.h
+++ b/core/sql/parser/ElemDDLColDefault.h
@@ -108,7 +108,7 @@ public:
   // mutator
   virtual void setChild(Lng32 index, ExprNode * pChildNode);
   inline  void setDefaultValueExpr(ItemExpr * pDefaultValueExpr);
-  inline  void setDefaultExprString(NAString &str);
+  inline  void setDefaultExprString(const NAString &str);
   inline void  setSGOptions(ElemDDLSGOptions * pSGOptions);
   inline void setSGLocation(NAString *pLocation);
   inline void setComputedDefaultExpr(const NAString &computedDefaultExpr);
@@ -165,7 +165,7 @@ ElemDDLColDefault::setDefaultValueExpr(ItemExpr * 
pDefaultValueExpr)
 }
 
 inline void
-ElemDDLColDefault::setDefaultExprString(NAString &str)
+ElemDDLColDefault::setDefaultExprString(const NAString &str)
 {
   defaultExprString_ = str;
 }

http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index dedd03f..c351181 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -8741,9 +8741,25 @@ datetime_value_function : TOK_CURDATE '(' ')'
 /* type item */
 datetime_misc_function_used_as_default:      TOK_TO_CHAR '(' value_expression 
',' character_string_literal ')'
                                {
-
-                                $$ = new (PARSERHEAP()) 
+                                 NAString * ves= unicodeToChar
+                                   (ToTokvalPlusYYText(&$3)->yytext,
+                                   ToTokvalPlusYYText(&$3)->yyleng,
+                                   (CharInfo::CharSet) (
+                                          ComGetNameInterfaceCharSet() // 
CharInfo::UTF8
+                                          ),
+                                   PARSERHEAP()); 
+                                 //save the original text
+                                 NAString fullstr;
+                                 fullstr  += "TO_CHAR(";
+                                 //Column Reference will not be able to 
convert to NAString
+                                 //And it is not be allowed bo become default 
value, so no need to save original text 
+                                 if( ves != NULL) 
+                                 {
+                                   fullstr += *ves + ", '" +  *$5 + "')";
+                                 }
+                                 $$ = new (PARSERHEAP()) 
                                    DateFormat($3, *$5, 
DateFormat::FORMAT_TO_CHAR);
+                                 ((DateFormat 
*)$$)->setOriginalString(fullstr);
                                }
 
 /* type item */
@@ -25812,11 +25828,8 @@ col_def_default_clause_argument : literal_negatable
                                   $$ = new (PARSERHEAP())
                                    ElemDDLColDefault(
                                        
ElemDDLColDefault::COL_FUNCTION_DEFAULT);
-                                  ItemExpr * firstItem = $1;
-                                  NAString unparsed(PARSERHEAP());
-                                  firstItem->unparse(unparsed); // expression 
as ascii string
 
-                                  ((ElemDDLColDefault 
*)$$)->setDefaultExprString(unparsed);
+                                  ((ElemDDLColDefault 
*)$$)->setDefaultExprString( (const NAString 
&)((DateFormat*)$1)->getOriginalString());
                                   ((ElemDDLColDefault 
*)$$)->setDefaultValueExpr($1);
                                 }
                       | builtin_function_user

http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/regress/seabase/EXPECTED020
----------------------------------------------------------------------
diff --git a/core/sql/regress/seabase/EXPECTED020 
b/core/sql/regress/seabase/EXPECTED020
index 15771ce..3396b6d 100644
--- a/core/sql/regress/seabase/EXPECTED020
+++ b/core/sql/regress/seabase/EXPECTED020
@@ -3945,4 +3945,35 @@ AAAA                       ?            2
 
 --- 1 row(s) selected.
 >>
+>>obey TEST020(trafodion_2335);
+>>--create seqence test020_seq;
+>>create table test020t45(a  largeint not null default unix_timestamp(),
++>                        b  char(36) not null default uuid(),
++>                        c  varchar(10) default to_char(sysdate,'YYYYMMDD'),
++>                        --support sequence as default in next check-in
++>                        --d  int not null default testi020_seq.nextval,
++>                        e  int );
+
+--- SQL operation complete.
+>>insert into test020t45(e) values(1),(2),(3);
+
+--- 3 row(s) inserted.
+>>select count(*) from test020t45 where c = to_char(sysdate,'YYYYMMDD');
+
+(EXPR)              
+--------------------
+
+                   3
+
+--- 1 row(s) selected.
+>>--negative tests
+>>--the function is not variable-free, so should fail
+>>create table test020t45(a  largeint not null default unix_timestamp(),
++>                        b  varchar(10) default 
to_char(test020t45.c,'YYYYMMDD'),
++>                        e  int );
+
+*** ERROR[1084] An invalid default value was specified for column B.
+
+*** ERROR[8822] The statement was not prepared.
+
 >>log;

http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/regress/seabase/TEST020
----------------------------------------------------------------------
diff --git a/core/sql/regress/seabase/TEST020 b/core/sql/regress/seabase/TEST020
index d435747..80681ae 100755
--- a/core/sql/regress/seabase/TEST020
+++ b/core/sql/regress/seabase/TEST020
@@ -940,7 +940,7 @@ create table test020t45(a  largeint not null default 
unix_timestamp(),
                         --d  int not null default testi020_seq.nextval,
                         e  int );
 insert into test020t45(e) values(1),(2),(3);
-select * from test020t45;
+select count(*) from test020t45 where c = to_char(sysdate,'YYYYMMDD');
 --negative tests
 --the function is not variable-free, so should fail
 create table test020t45(a  largeint not null default unix_timestamp(),

http://git-wip-us.apache.org/repos/asf/trafodion/blob/5f58cd95/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp 
b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index 3e602e8..dc9b108 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -3168,13 +3168,8 @@ short CmpSeabaseDDL::getColInfo(ElemDDLColDef * colNode,
             defaultClass = COM_IDENTITY_GENERATED_BY_DEFAULT;
         }
       else if (ie == NULL)
-        if (colNode->getComputedDefaultExpr().isNull() && 
colNode->getDefaultExprString().isNull())
+        if (colNode->getComputedDefaultExpr().isNull())
           defaultClass = COM_NO_DEFAULT;
-        else if(!colNode->getDefaultExprString().isNull())
-          {
-            defaultClass = COM_FUNCTION_DEFINED_DEFAULT;
-            defVal = colNode->getDefaultExprString();
-          }
         else
           {
             defaultClass = COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT;
@@ -3186,6 +3181,11 @@ short CmpSeabaseDDL::getColInfo(ElemDDLColDef * colNode,
             else
               CMPASSERT(0);
           }
+      else if (!colNode->getDefaultExprString().isNull())
+        {
+            defaultClass = COM_FUNCTION_DEFINED_DEFAULT;
+            defVal = colNode->getDefaultExprString();
+        }
       else if (ie->getOperatorType() == ITM_CURRENT_TIMESTAMP)
         {
           defaultClass = COM_CURRENT_DEFAULT;

Reply via email to