take care of merge value
Project: http://git-wip-us.apache.org/repos/asf/trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/trafodion/commit/fce62f89 Tree: http://git-wip-us.apache.org/repos/asf/trafodion/tree/fce62f89 Diff: http://git-wip-us.apache.org/repos/asf/trafodion/diff/fce62f89 Branch: refs/heads/master Commit: fce62f89e5bd07764fb00e3b0503dfab1998a8e8 Parents: 007dcc6 Author: Liu Ming <ovis_p...@sina.com> Authored: Sun Mar 25 17:40:01 2018 +0000 Committer: Liu Ming <ovis_p...@sina.com> Committed: Sun Mar 25 17:40:01 2018 +0000 ---------------------------------------------------------------------- core/sql/common/ComSmallDefs.h | 36 ++++++++----- core/sql/optimizer/BindRelExpr.cpp | 3 +- core/sql/optimizer/ItemExpr.cpp | 2 + core/sql/regress/seabase/EXPECTED020 | 88 ++++++++++++++++++++++++++++--- core/sql/regress/seabase/TEST020 | 29 ++++++++-- 5 files changed, 130 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafodion/blob/fce62f89/core/sql/common/ComSmallDefs.h ---------------------------------------------------------------------- diff --git a/core/sql/common/ComSmallDefs.h b/core/sql/common/ComSmallDefs.h index 54d0cbf..29a0e0f 100644 --- a/core/sql/common/ComSmallDefs.h +++ b/core/sql/common/ComSmallDefs.h @@ -609,18 +609,22 @@ enum ComColumnClass { COM_UNKNOWN_CLASS #define COM_MV_SYSTEM_ADDED_COLUMN_LIT "M " #define COM_ALTERED_USER_COLUMN_LIT "C " -enum ComColumnDefaultClass { COM_CURRENT_DEFAULT - , COM_CURRENT_UT_DEFAULT - , COM_NO_DEFAULT - , COM_NULL_DEFAULT - , COM_USER_DEFINED_DEFAULT - , COM_USER_FUNCTION_DEFAULT - , COM_UUID_DEFAULT - , COM_IDENTITY_GENERATED_BY_DEFAULT - , COM_IDENTITY_GENERATED_ALWAYS - , COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT - , COM_ALWAYS_DEFAULT_COMPUTED_COLUMN_DEFAULT - , COM_FUNCTION_DEFINED_DEFAULT +/* This enum will be saved as integer in metadata tables + * If you change it, that will affect the existing values + * Make sure to add new values at the end + */ +enum ComColumnDefaultClass { COM_CURRENT_DEFAULT = 0 + , COM_NO_DEFAULT = 1 + , COM_NULL_DEFAULT = 2 + , COM_USER_DEFINED_DEFAULT = 3 + , COM_USER_FUNCTION_DEFAULT = 4 + , COM_IDENTITY_GENERATED_BY_DEFAULT = 5 + , COM_IDENTITY_GENERATED_ALWAYS =6 + , COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT = 7 + , COM_ALWAYS_DEFAULT_COMPUTED_COLUMN_DEFAULT = 8 + , COM_UUID_DEFAULT = 9 + , COM_CURRENT_UT_DEFAULT = 10 + , COM_FUNCTION_DEFINED_DEFAULT = 11 }; #define COM_CURRENT_DEFAULT_LIT "CD" @@ -636,20 +640,24 @@ enum ComColumnDefaultClass { COM_CURRENT_DEFAULT #define COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT_LIT "AC" #define COM_ALWAYS_DEFAULT_COMPUTED_COLUMN_DEFAULT_LIT "AD" +/* This enum will be saved as integer in metadata tables + * If you change it, that will affect the existing values + * Make sure to add new values at the end + */ enum ComParamDefaultClass { COM_CURRENT_PARAM_DEFAULT = COM_CURRENT_DEFAULT - , COM_CURRENT_UT_PARAM_DEFAULT = COM_CURRENT_UT_DEFAULT , COM_NO_PARAM_DEFAULT = COM_NO_DEFAULT , COM_NULL_PARAM_DEFAULT = COM_NULL_DEFAULT , COM_USER_DEFINED_PARAM_DEFAULT = COM_USER_DEFINED_DEFAULT , COM_USER_FUNCTION_PARAM_DEFAULT = COM_USER_FUNCTION_DEFAULT - , COM_UUID_PARAM_DEAULT = COM_UUID_DEFAULT // IDENTITY GENERATED BY DEFAULT not applicable // IDENTITY GENERATED ALWAYS not applicable , COM_ALWAYS_COMPUTE_COMPUTED_PARAM_DEFAULT // for future internal use only = COM_ALWAYS_COMPUTE_COMPUTED_COLUMN_DEFAULT , COM_ALWAYS_DEFAULT_COMPUTED_PARAM_DEFAULT // for future internal use only = COM_ALWAYS_DEFAULT_COMPUTED_COLUMN_DEFAULT + , COM_UUID_PARAM_DEAULT = COM_UUID_DEFAULT + , COM_CURRENT_UT_PARAM_DEFAULT = COM_CURRENT_UT_DEFAULT , COM_FUNCTION_DEFINED_PARAM_DEFAULT = COM_FUNCTION_DEFINED_DEFAULT }; http://git-wip-us.apache.org/repos/asf/trafodion/blob/fce62f89/core/sql/optimizer/BindRelExpr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/BindRelExpr.cpp b/core/sql/optimizer/BindRelExpr.cpp index eb5bbe0..89908b2 100644 --- a/core/sql/optimizer/BindRelExpr.cpp +++ b/core/sql/optimizer/BindRelExpr.cpp @@ -10425,7 +10425,8 @@ RelExpr *Insert::bindNode(BindWA *bindWA) // column. COM_CURRENT_DEFAULT is only used for Datetime // columns. // - if (nacol->getDefaultClass() == COM_CURRENT_DEFAULT) { + if (nacol->getDefaultClass() == COM_CURRENT_DEFAULT || nacol->getDefaultClass() == COM_CURRENT_UT_DEFAULT + || nacol->getDefaultClass() == COM_UUID_DEFAULT) { castType = nacol->getType()->newCopy(bindWA->wHeap()); omittedCurrentDefaultClassCols = TRUE; omittedDefaultCols = TRUE; http://git-wip-us.apache.org/repos/asf/trafodion/blob/fce62f89/core/sql/optimizer/ItemExpr.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/ItemExpr.cpp b/core/sql/optimizer/ItemExpr.cpp index 744a0a5..324a0bd 100644 --- a/core/sql/optimizer/ItemExpr.cpp +++ b/core/sql/optimizer/ItemExpr.cpp @@ -875,6 +875,7 @@ NABoolean ItemExpr::doesExprEvaluateToConstant(NABoolean strict, case ITM_CURRENT_USER: case ITM_SESSION_USER: case ITM_CURRENT_TIMESTAMP: + case ITM_UNIX_TIMESTAMP: case ITM_GET_TRIGGERS_STATUS: case ITM_UNIQUE_EXECUTE_ID: case ITM_CURR_TRANSID: @@ -967,6 +968,7 @@ NABoolean ItemExpr::referencesAHostVar() const case ITM_CURRENT_USER: case ITM_SESSION_USER: case ITM_CURRENT_TIMESTAMP: + case ITM_UNIX_TIMESTAMP: case ITM_GET_TRIGGERS_STATUS: case ITM_UNIQUE_EXECUTE_ID: case ITM_CURR_TRANSID: http://git-wip-us.apache.org/repos/asf/trafodion/blob/fce62f89/core/sql/regress/seabase/EXPECTED020 ---------------------------------------------------------------------- diff --git a/core/sql/regress/seabase/EXPECTED020 b/core/sql/regress/seabase/EXPECTED020 index 32c151d..3c1104b 100644 --- a/core/sql/regress/seabase/EXPECTED020 +++ b/core/sql/regress/seabase/EXPECTED020 @@ -3947,31 +3947,103 @@ AAAA ? 2 >> >>obey TEST020(trafodion_2335); >>--create seqence test020_seq; +>>cqd traf_upsert_mode 'merge'; + +--- SQL operation complete. +>>cqd traf_aligned_row_format 'off' ; + +--- SQL operation complete. >>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 ); ++> e int not null, ++> f int, primary key(e)); --- SQL operation complete. ->>insert into test020t45(e) values(1),(2),(3); +>>-- check if the timestamp is inserted with the recent timestamp +>>insert into test020t45(e,f) values(1,1),(2,2),(3,3); --- 3 row(s) inserted. ->>upsert into test020t45(e) values(4),(5); +>>select sleep(1) from dual; ---- 2 row(s) inserted. ->>upsert using load into test020t45(e) values (6); +(EXPR) +-------------------- + + 1 + +--- 1 row(s) selected. +>>upsert into test020t45(e,f) values(1,4); --- 1 row(s) inserted. ->>select count(*) from test020t45 where c = to_char(sysdate,'YYYYMMDD'); +>>select count(distinct(a)),count(distinct(b)),count(distinct(c)) from test020t45 ; -(EXPR) +(EXPR) (EXPR) (EXPR) +-------------------- -------------------- -------------------- + + 1 3 1 + +--- 1 row(s) selected. +>> +>>cqd traf_upsert_mode 'replace'; + +--- SQL operation complete. +>>delete from test020t45; + +--- 3 row(s) deleted. +>>insert into test020t45(e,f) values(1,1),(2,2),(3,3); + +--- 3 row(s) inserted. +>>select sleep(1) from dual; + +(EXPR) -------------------- - 6 + 1 --- 1 row(s) selected. +>>upsert into test020t45(e,f) values(1,4); + +--- 1 row(s) inserted. +>>select count(distinct(a)),count(distinct(b)),count(distinct(c)) from test020t45 ; + +(EXPR) (EXPR) (EXPR) +-------------------- -------------------- -------------------- + + 2 3 1 + +--- 1 row(s) selected. +>> +>>cqd traf_upsert_mode 'optimal'; + +--- SQL operation complete. +>>delete from test020t45; + +--- 3 row(s) deleted. +>>insert into test020t45(e,f) values(1,1),(2,2),(3,3); + +--- 3 row(s) inserted. +>>select sleep(1) from dual; + +(EXPR) +-------------------- + + 1 + +--- 1 row(s) selected. +>>upsert into test020t45(e,f) values(1,4); + +--- 1 row(s) inserted. +>>select count(distinct(a)),count(distinct(b)),count(distinct(c)) from test020t45 ; + +(EXPR) (EXPR) (EXPR) +-------------------- -------------------- -------------------- + + 1 3 1 + +--- 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(), http://git-wip-us.apache.org/repos/asf/trafodion/blob/fce62f89/core/sql/regress/seabase/TEST020 ---------------------------------------------------------------------- diff --git a/core/sql/regress/seabase/TEST020 b/core/sql/regress/seabase/TEST020 index deb6583..47b6aec 100755 --- a/core/sql/regress/seabase/TEST020 +++ b/core/sql/regress/seabase/TEST020 @@ -933,16 +933,35 @@ select * from test020t44; ?section trafodion_2335 --create seqence test020_seq; +cqd traf_upsert_mode 'merge'; +cqd traf_aligned_row_format 'off' ; 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 ); -insert into test020t45(e) values(1),(2),(3); -upsert into test020t45(e) values(4),(5); -upsert using load into test020t45(e) values (6); -select count(*) from test020t45 where c = to_char(sysdate,'YYYYMMDD'); + e int not null, + f int, primary key(e)); +-- check if the timestamp is inserted with the recent timestamp +insert into test020t45(e,f) values(1,1),(2,2),(3,3); +select sleep(1) from dual; +upsert into test020t45(e,f) values(1,4); +select count(distinct(a)),count(distinct(b)),count(distinct(c)) from test020t45 ; + +cqd traf_upsert_mode 'replace'; +delete from test020t45; +insert into test020t45(e,f) values(1,1),(2,2),(3,3); +select sleep(1) from dual; +upsert into test020t45(e,f) values(1,4); +select count(distinct(a)),count(distinct(b)),count(distinct(c)) from test020t45 ; + +cqd traf_upsert_mode 'optimal'; +delete from test020t45; +insert into test020t45(e,f) values(1,1),(2,2),(3,3); +select sleep(1) from dual; +upsert into test020t45(e,f) values(1,4); +select count(distinct(a)),count(distinct(b)),count(distinct(c)) from test020t45 ; + --negative tests --the function is not variable-free, so should fail create table test020t45(a largeint not null default unix_timestamp(),