fix comments issues
Project: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/commit/d2825057 Tree: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/tree/d2825057 Diff: http://git-wip-us.apache.org/repos/asf/incubator-trafodion/diff/d2825057 Branch: refs/heads/master Commit: d2825057c8fc59f706d8d1fd26d9e266645b2f9a Parents: ad6c2f3 Author: Liu Ming <[email protected]> Authored: Tue Jul 26 13:17:50 2016 +0000 Committer: Liu Ming <[email protected]> Committed: Tue Jul 26 13:17:50 2016 +0000 ---------------------------------------------------------------------- core/sql/optimizer/NATable.cpp | 38 ++++++++++++++++++++++----- core/sql/regress/hive/EXPECTED005 | 8 +++--- core/sql/regress/hive/TEST005_a.hive.sql | 8 ++++-- core/sql/regress/hive/tbl_type.data | 2 +- 4 files changed, 43 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/d2825057/core/sql/optimizer/NATable.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/NATable.cpp b/core/sql/optimizer/NATable.cpp index ad6bf86..b59abd3 100644 --- a/core/sql/optimizer/NATable.cpp +++ b/core/sql/optimizer/NATable.cpp @@ -86,6 +86,10 @@ #include "CmpMain.h" #define MAX_NODE_NAME 9 +#define MAX_PRECISION_ALLOWED 18 +#define HIVE_MAX_PRECISION_ALLOWED 38 +#define MAX_SCALE_ALLOWED 6 +#define MAX_NUM_LEN 16 #include "SqlParserGlobals.h" @@ -3678,9 +3682,9 @@ NAType* getSQColTypeForHive(const char* hiveType, NAMemory* heap) if ( !strncmp(hiveType, "decimal", 7) ) { - Int16 i=0, pstart=0, pend=0, sstart=0, send=0, p=0, s = 0; - Int16 hiveTypeLen = strlen(hiveType); - char pstr[16], sstr[16]; + Lng32 i=0, pstart=0, pend=0, sstart=0, send=0, p=-1, s = -1; + Lng32 hiveTypeLen = strlen(hiveType); + char pstr[MAX_NUM_LEN], sstr[MAX_NUM_LEN]; memset(pstr,0,sizeof(pstr)); memset(sstr,0,sizeof(sstr)); @@ -3702,25 +3706,47 @@ NAType* getSQColTypeForHive(const char* hiveType, NAMemory* heap) else continue; } + if(pend - pstart > 0) { + if( (pend - pstart) >= MAX_NUM_LEN ) // too long + return NULL; strncpy(pstr,hiveType+pstart, pend-pstart); p=atoi(pstr); } + if(send - sstart > 0) { + if( (send - sstart) >= MAX_NUM_LEN ) // too long + return NULL; strncpy(sstr,hiveType+sstart,send-sstart); s=atoi(sstr); } - if( (p>0) && (s>0) ) + if( (p>0) && (p <= MAX_PRECISION_ALLOWED) ) //have precision between 1 - 18 { - return new (heap) SQLDecimal( p, s, TRUE, TRUE); + if( ( s >=0 ) && ( s<= MAX_SCALE_ALLOWED) ) //have valid scale + return new (heap) SQLDecimal( p, s, TRUE, TRUE); + else + return NULL; } - else + else if( (p > MAX_PRECISION_ALLOWED) && ( p <= HIVE_MAX_PRECISION_ALLOWED) ) { + if ( (s>=0) && ( s< p ) ) //have valid scale + return new (heap) SQLBigNum( p, s, TRUE, TRUE, TRUE, NULL); + else + return NULL; + } + //no p and s given, p and s are all initial value + else if( ( p == -1 ) && ( s == -1 ) ) + { + // hive define decimal as decimal ( 10, 0 ) return new (heap) SQLDecimal( 10, 0, TRUE, TRUE); } + else + { + return NULL; + } } http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/d2825057/core/sql/regress/hive/EXPECTED005 ---------------------------------------------------------------------- diff --git a/core/sql/regress/hive/EXPECTED005 b/core/sql/regress/hive/EXPECTED005 index 38c91d0..273184d 100644 --- a/core/sql/regress/hive/EXPECTED005 +++ b/core/sql/regress/hive/EXPECTED005 @@ -434,10 +434,10 @@ ID CHAPTER ENGLISH TRANSLATOR >> >>select * from tbl_type; -TINT SM I BIG STR F D T DT VC D10 D18 +TINT SM I BIG STR F D T DT VC D10 D18 D181 D30 ---- ------ ----------- -------------------- ------------------------- --------------- ------------------------- -------------------------- ---------- ---------------------------------------- ----------- ---------- - 101 202 203 204 two hundred 2.0000000E+002 2.00000000000000000E+002 2022-02-02 22:22:22.222222 2022-02-02 varchar 1234567890 123456.11 + 101 202 203 204 two hundred 2.0000000E+002 2.00000000000000000E+002 2022-02-02 22:22:22.222222 2022-02-02 varchar 1234567890 123456.11 12345 11111111111111111111111111111 --- 1 row(s) selected. >>insert into tbl_type_temp select * from tbl_type; @@ -445,10 +445,10 @@ TINT SM I BIG STR F --- 1 row(s) inserted. >>select * from tbl_type_temp; -TINT SM I BIG STR F D T DT VC D10 D18 +TINT SM I BIG STR F D T DT VC D10 D18 D181 D30 ---- ------ ----------- -------------------- ------------------------- --------------- ------------------------- -------------------------- ---------- ---------------------------------------- ----------- ---------- - 101 202 203 204 two hundred 2.0000000E+002 2.00000000000000000E+002 2022-02-02 22:22:22.222222 2022-02-02 varchar 1234567890 123456.11 + 101 202 203 204 two hundred 2.0000000E+002 2.00000000000000000E+002 2022-02-02 22:22:22.222222 2022-02-02 varchar 1234567890 123456.11 12345 11111111111111111111111111111 --- 1 row(s) selected. >> http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/d2825057/core/sql/regress/hive/TEST005_a.hive.sql ---------------------------------------------------------------------- diff --git a/core/sql/regress/hive/TEST005_a.hive.sql b/core/sql/regress/hive/TEST005_a.hive.sql index 10949dc..0437bbb 100644 --- a/core/sql/regress/hive/TEST005_a.hive.sql +++ b/core/sql/regress/hive/TEST005_a.hive.sql @@ -140,7 +140,9 @@ create external table tbl_type dt date, vc varchar(10), d10 decimal, - d18 decimal(8,2) + d18 decimal(8,2), + d181 decimal(10), + d30 decimal(30) ) row format delimited fields terminated by '|' location '/user/hive/exttables/tbl_type'; @@ -159,7 +161,9 @@ create table tbl_type_temp dt date, vc varchar(10), d10 decimal, - d18 decimal(8,2) + d18 decimal(8,2), + d181 decimal(10), + d30 decimal(30) ) row format delimited fields terminated by '|'; http://git-wip-us.apache.org/repos/asf/incubator-trafodion/blob/d2825057/core/sql/regress/hive/tbl_type.data ---------------------------------------------------------------------- diff --git a/core/sql/regress/hive/tbl_type.data b/core/sql/regress/hive/tbl_type.data index 9e56472..aeb9eb4 100644 --- a/core/sql/regress/hive/tbl_type.data +++ b/core/sql/regress/hive/tbl_type.data @@ -1 +1 @@ -101|202|203|204|two hundred|2E2|2E+002|2022-02-02 22:22:22.222222|2022-02-02|varchar|1234567890|123456.11 +101|202|203|204|two hundred|2E2|2E+002|2022-02-02 22:22:22.222222|2022-02-02|varchar|1234567890|123456.11|12345|11111111111111111111111111111
