Repository: incubator-trafodion Updated Branches: refs/heads/master 249dfefac -> 93053325e
JIRA TRAFODION-1843 TRAFODION-2106 -- TRAFODION-1843: allow 'default user' in create table statement -- TRAFODION-2106: fix bug with use of to_date function in where clause Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/77899fde Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/77899fde Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/77899fde Branch: refs/heads/master Commit: 77899fde1b20e53bbb6ad0de0cc91bb252542225 Parents: ea20874 Author: Anoop Sharma <[email protected]> Authored: Thu Jul 14 13:48:54 2016 +0000 Committer: Anoop Sharma <[email protected]> Committed: Thu Jul 14 13:48:54 2016 +0000 ---------------------------------------------------------------------- core/sql/exp/exp_function.cpp | 19 ------- core/sql/optimizer/BindRelExpr.cpp | 3 +- core/sql/optimizer/ItemExpr.cpp | 3 +- core/sql/regress/seabase/EXPECTED030 | 14 +++++ core/sql/regress/seabase/EXPECTED031 | 76 +++++++++++++++++++++++++++ core/sql/regress/seabase/TEST030 | 2 + core/sql/regress/seabase/TEST031 | 13 +++++ core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp | 6 --- 8 files changed, 109 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/exp/exp_function.cpp ---------------------------------------------------------------------- diff --git a/core/sql/exp/exp_function.cpp b/core/sql/exp/exp_function.cpp index c96b450..d5b896f 100644 --- a/core/sql/exp/exp_function.cpp +++ b/core/sql/exp/exp_function.cpp @@ -2964,13 +2964,6 @@ ex_expr::exp_return_type ex_function_ansi_user::eval(char *op_data[], CollHeap *heap, ComDiagsArea** diagsArea) { -#if (defined (__EID)) - // user function not supported in DP2 process on NSK. It is evaluated - // at master exe root tcb and sent down as an input value. - ExRaiseSqlError(heap, diagsArea, EXE_USER_FUNCTION_NOT_SUPP); - return ex_expr::EXPR_ERROR; -#endif - const Lng32 MAX_USER_NAME_LEN = ComSqlId::MAX_LDAP_USER_NAME_LEN; char username[MAX_USER_NAME_LEN + 1]; @@ -3004,14 +2997,6 @@ ex_expr::exp_return_type ex_function_user::eval(char *op_data[], CollHeap *heap, ComDiagsArea** diagsArea) { -#if (defined __EID) - // user function not supported in DP2 process on NSK. It is evaluated - // at master exe root tcb and sent down as an input value. - ExRaiseSqlError(heap, diagsArea, EXE_USER_FUNCTION_NOT_SUPP); - return ex_expr::EXPR_ERROR; -#else - - Int32 userIDLen = getOperand(1)->getLength(op_data[-MAX_OPERANDS+1]); Int64 id64; @@ -3165,10 +3150,6 @@ ex_expr::exp_return_type ex_function_user::eval(char *op_data[], str_cpy_all(op_data[0], userName, userNameLen); return ex_expr::EXPR_OK; - - -#endif - }; //////////////////////////////////////////////////////////////////// http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/optimizer/BindRelExpr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/BindRelExpr.cpp b/core/sql/optimizer/BindRelExpr.cpp index 966cd8f..b207b20 100644 --- a/core/sql/optimizer/BindRelExpr.cpp +++ b/core/sql/optimizer/BindRelExpr.cpp @@ -9951,7 +9951,8 @@ RelExpr *Insert::bindNode(BindWA *bindWA) assign = new (bindWA->wHeap()) Assign(target.getItemExpr(), defaultValueExpr, FALSE /*Not user Specified */); - if (nacol->getDefaultClass() != COM_CURRENT_DEFAULT) + if ((nacol->getDefaultClass() != COM_CURRENT_DEFAULT) && + (nacol->getDefaultClass() != COM_USER_FUNCTION_DEFAULT)) assign->setToBeSkipped(TRUE); assign->bindNode(bindWA); } http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/optimizer/ItemExpr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp index cc6d372..9966a95 100644 --- a/core/sql/optimizer/ItemExpr.cpp +++ b/core/sql/optimizer/ItemExpr.cpp @@ -8262,7 +8262,8 @@ ItemExpr * DateFormat::copyTopNode(ItemExpr *derivedNode, else result = (DateFormat*)derivedNode; - frmt_ = result->frmt_; + result->frmt_ = frmt_; + result->dateFormat_ = dateFormat_; return BuiltinFunction::copyTopNode(result,outHeap); http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/regress/seabase/EXPECTED030 ---------------------------------------------------------------------- diff --git a/core/sql/regress/seabase/EXPECTED030 b/core/sql/regress/seabase/EXPECTED030 index 2376f64..579afe9 100644 --- a/core/sql/regress/seabase/EXPECTED030 +++ b/core/sql/regress/seabase/EXPECTED030 @@ -533,6 +533,14 @@ March 01, 2016, 10:11:12 2016-03-01 --- 1 row(s) selected. +>>select * from t030t1 where to_date(c, 'YYYY-MM-DD') = DATE '2016-03-01'; + +A B C +---------- ------------------------------ ------------------------------ + +2016-03-01 2016-03-01 2016-03-01 + +--- 1 row(s) selected. >> >>-- negative tests >>select to_date('2016-03-01', 'YYYYMM-DD') from (values(1)) x(a); @@ -570,6 +578,12 @@ March 01, 2016, 10:11:12 *** ERROR[8822] The statement was not prepared. +>>select * from t030t1 where to_date(c, 'YYYY-MM-DD') = '2016-03-01'; + +*** ERROR[4041] Type DATE cannot be compared with type CHAR(10). + +*** ERROR[8822] The statement was not prepared. + >> >>-- some formats only enabled in special mode. Not externalized. >>cqd mode_special_4 'ON'; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/regress/seabase/EXPECTED031 ---------------------------------------------------------------------- diff --git a/core/sql/regress/seabase/EXPECTED031 b/core/sql/regress/seabase/EXPECTED031 index 81b09dd..873ed2c 100644 --- a/core/sql/regress/seabase/EXPECTED031 +++ b/core/sql/regress/seabase/EXPECTED031 @@ -472,4 +472,80 @@ aaaaaaaaaa ? --- 1 row(s) selected. >> +>>-- default USER +>>drop table if exists t031t1; + +--- SQL operation complete. +>>create table t031t1 (a int, b varchar(20) default user); + +--- SQL operation complete. +>>invoke t031t1; + +-- Definition of Trafodion table TRAFODION.SCH.T031T1 +-- Definition current Wed Jul 13 23:30:01 2016 + + ( + SYSKEY LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE + , A INT DEFAULT NULL + , B VARCHAR(20) CHARACTER SET ISO88591 COLLATE + DEFAULT DEFAULT USER + ) + +--- SQL operation complete. +>>insert into t031t1 (a) values (10); + +--- 1 row(s) inserted. +>>insert into t031t1 default values; + +--- 1 row(s) inserted. +>>select * from t031t1; + +A B +----------- -------------------- + + 10 DB__ROOT + ? DB__ROOT + +--- 2 row(s) selected. +>>alter table t031t1 add column c char(20) default user; + +--- SQL operation complete. +>>invoke t031t1; + +-- Definition of Trafodion table TRAFODION.SCH.T031T1 +-- Definition current Wed Jul 13 23:30:02 2016 + + ( + SYSKEY LARGEINT NO DEFAULT NOT NULL NOT DROPPABLE + , A INT DEFAULT NULL + , B VARCHAR(20) CHARACTER SET ISO88591 COLLATE + DEFAULT DEFAULT USER + , C CHAR(20) CHARACTER SET ISO88591 COLLATE + DEFAULT DEFAULT USER /*added_col*/ + ) + +--- SQL operation complete. +>>select * from t031t1; + +A B C +----------- -------------------- -------------------- + + 10 DB__ROOT + ? DB__ROOT + +--- 2 row(s) selected. +>>insert into t031t1 default values; + +--- 1 row(s) inserted. +>>select * from t031t1; + +A B C +----------- -------------------- -------------------- + + 10 DB__ROOT + ? DB__ROOT + ? DB__ROOT DB__ROOT + +--- 3 row(s) selected. +>> >>log; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/regress/seabase/TEST030 ---------------------------------------------------------------------- diff --git a/core/sql/regress/seabase/TEST030 b/core/sql/regress/seabase/TEST030 index abe663a..5d3df76 100644 --- a/core/sql/regress/seabase/TEST030 +++ b/core/sql/regress/seabase/TEST030 @@ -97,6 +97,7 @@ select to_char(a, 'YYYYMMDD') from t030t1; select a (date, format 'YYYYMMDD') from t030t1; select to_date(b, 'YYYY-MM-DD') from t030t1; select to_date(c, 'YYYY-MM-DD') from t030t1; +select * from t030t1 where to_date(c, 'YYYY-MM-DD') = DATE '2016-03-01'; -- negative tests select to_date('2016-03-01', 'YYYYMM-DD') from (values(1)) x(a); @@ -105,6 +106,7 @@ select to_date('0103.2016', 'DD.MM.YYYY') from (values(1)) x(a); select to_char('2016-03-01', 'YYYY-MM-DD') from (values(1)) x(a); select to_date(20160301, 'YYYYMMDD') from (values(1)) x(a); select to_char(date '2016-03-01', 'HH:MI:SS') from (values(1)) x(a); +select * from t030t1 where to_date(c, 'YYYY-MM-DD') = '2016-03-01'; -- some formats only enabled in special mode. Not externalized. cqd mode_special_4 'ON'; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/regress/seabase/TEST031 ---------------------------------------------------------------------- diff --git a/core/sql/regress/seabase/TEST031 b/core/sql/regress/seabase/TEST031 index 80d124a..382e18f 100644 --- a/core/sql/regress/seabase/TEST031 +++ b/core/sql/regress/seabase/TEST031 @@ -166,4 +166,17 @@ delete from t031t1; insert into t031t1 select * from hive.hive.t031hive; select count(*) from t031t1; +-- default USER +drop table if exists t031t1; +create table t031t1 (a int, b varchar(20) default user); +invoke t031t1; +insert into t031t1 (a) values (10); +insert into t031t1 default values; +select * from t031t1; +alter table t031t1 add column c char(20) default user; +invoke t031t1; +select * from t031t1; +insert into t031t1 default values; +select * from t031t1; + log; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/77899fde/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp ---------------------------------------------------------------------- diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp index cef4da1..969cd20 100644 --- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp +++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp @@ -3060,12 +3060,6 @@ short CmpSeabaseDDL::getColInfo(ElemDDLColDef * colNode, (ie->getOperatorType() == ITM_CURRENT_USER) || (ie->getOperatorType() == ITM_SESSION_USER)) { - // default USER not currently supported. - *CmpCommon::diags() << DgSqlCode(-1084) - << DgColumnName(colName); - - return -1; - defaultClass = COM_USER_FUNCTION_DEFAULT; } else if (ie->castToConstValue(negateIt) != NULL)
