TRAFODION-3086 additional fixes
Project: http://git-wip-us.apache.org/repos/asf/trafodion/repo Commit: http://git-wip-us.apache.org/repos/asf/trafodion/commit/90dd2d35 Tree: http://git-wip-us.apache.org/repos/asf/trafodion/tree/90dd2d35 Diff: http://git-wip-us.apache.org/repos/asf/trafodion/diff/90dd2d35 Branch: refs/heads/master Commit: 90dd2d350c38d6203fce329c638fa22d357e42ad Parents: 2bba19f Author: Anoop Sharma <[email protected]> Authored: Wed Jun 20 01:39:51 2018 +0000 Committer: Anoop Sharma <[email protected]> Committed: Wed Jun 20 01:39:51 2018 +0000 ---------------------------------------------------------------------- core/sql/executor/ExExeUtil.h | 4 ++-- core/sql/executor/ExExeUtilLoad.cpp | 21 +++++++++++---------- core/sql/generator/GenRelExeUtil.cpp | 4 ++-- core/sql/optimizer/RelExeUtil.cpp | 9 ++++++--- core/sql/optimizer/RelExeUtil.h | 16 ++++++++-------- core/sql/parser/sqlparser.y | 6 +++++- core/sql/regress/hive/EXPECTED008 | 2 +- core/sql/sqlcomp/CmpSeabaseDDLtable.cpp | 2 +- 8 files changed, 36 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/executor/ExExeUtil.h ---------------------------------------------------------------------- diff --git a/core/sql/executor/ExExeUtil.h b/core/sql/executor/ExExeUtil.h index 227e103..9b95a63 100644 --- a/core/sql/executor/ExExeUtil.h +++ b/core/sql/executor/ExExeUtil.h @@ -898,7 +898,7 @@ class ExExeUtilCreateTableAsTcb : public ExExeUtilTcb { INITIAL_, CREATE_, - DELETE_DATA_, + TRUNCATE_TABLE_, INSERT_SIDETREE_, INSERT_VSBB_, ALTER_TO_NOAUDIT_, @@ -906,7 +906,7 @@ class ExExeUtilCreateTableAsTcb : public ExExeUtilTcb ALTER_TO_AUDIT_AND_INSERT_VSBB_, UPD_STATS_, DONE_, - HANDLE_ERROR_, DELETE_DATA_AND_ERROR_, ERROR_, + HANDLE_ERROR_, TRUNCATE_TABLE_AND_ERROR_, ERROR_, DROP_AND_ERROR_, DROP_AND_DONE_, INSERT_SIDETREE_EXECUTE_, http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/executor/ExExeUtilLoad.cpp ---------------------------------------------------------------------- diff --git a/core/sql/executor/ExExeUtilLoad.cpp b/core/sql/executor/ExExeUtilLoad.cpp index 160a6bb..5cf023d 100644 --- a/core/sql/executor/ExExeUtilLoad.cpp +++ b/core/sql/executor/ExExeUtilLoad.cpp @@ -166,15 +166,16 @@ short ExExeUtilCreateTableAsTcb::work() ctaTdb().ctQuery_); if (cliRC < 0) { - if (((cliRC == -1055) || // SQ table err msg - (cliRC == -1390)) && // Traf err msg + if (((cliRC == -1055) || // SQ table err msg + (cliRC == -1390) || // Traf err msg + (cliRC == -1387)) && // Hive err msg (ctaTdb().loadIfExists())) { SQL_EXEC_ClearDiagnostics(NULL); tableExists_ = TRUE; if (ctaTdb().deleteData()) - step_ = DELETE_DATA_; + step_ = TRUNCATE_TABLE_; else step_ = ALTER_TO_NOAUDIT_; break; @@ -200,14 +201,14 @@ short ExExeUtilCreateTableAsTcb::work() } break; - case DELETE_DATA_: - case DELETE_DATA_AND_ERROR_: + case TRUNCATE_TABLE_: + case TRUNCATE_TABLE_AND_ERROR_: { char * ddQuery = - new(getMyHeap()) char[strlen("DELETE DATA FROM; ") + + new(getMyHeap()) char[strlen("TRUNCATE TABLE; ") + strlen(ctaTdb().getTableName()) + 100]; - strcpy(ddQuery, "DELETE DATA FROM "); + strcpy(ddQuery, "TRUNCATE TABLE "); strcat(ddQuery, ctaTdb().getTableName()); strcat(ddQuery, ";"); cliRC = cliInterface()->executeImmediate(ddQuery, NULL,NULL,TRUE,NULL,TRUE); @@ -217,7 +218,7 @@ short ExExeUtilCreateTableAsTcb::work() if (cliRC < 0) { - if (step_ == DELETE_DATA_) + if (step_ == TRUNCATE_TABLE_) { step_ = ERROR_; break; @@ -230,7 +231,7 @@ short ExExeUtilCreateTableAsTcb::work() break; } - if (step_ == DELETE_DATA_AND_ERROR_) + if (step_ == TRUNCATE_TABLE_AND_ERROR_) { if (doSidetreeInsert_) @@ -492,7 +493,7 @@ short ExExeUtilCreateTableAsTcb::work() { // error case and 'load if exists' specified. // Do not drop the table, only delete data from it. - step_ = DELETE_DATA_AND_ERROR_; + step_ = TRUNCATE_TABLE_AND_ERROR_; } else step_ = DROP_AND_ERROR_; http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/generator/GenRelExeUtil.cpp ---------------------------------------------------------------------- diff --git a/core/sql/generator/GenRelExeUtil.cpp b/core/sql/generator/GenRelExeUtil.cpp index 4842e96..dbbbf56 100644 --- a/core/sql/generator/GenRelExeUtil.cpp +++ b/core/sql/generator/GenRelExeUtil.cpp @@ -3302,10 +3302,10 @@ short ExeUtilHiveTruncate::codeGen(Generator * generator) if (getHiveExternalTable()) exe_util_tdb->setIsExternal(TRUE); - if (getIfExist()) + if (getIfExists()) exe_util_tdb->setIfExists(TRUE); - if (NOT getTableNotExist()) + if (getTableNotExists()) exe_util_tdb->setTableNotExists(TRUE); if(!generator->explainDisabled()) { http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/optimizer/RelExeUtil.cpp ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/RelExeUtil.cpp b/core/sql/optimizer/RelExeUtil.cpp index 2675470..61707d6 100644 --- a/core/sql/optimizer/RelExeUtil.cpp +++ b/core/sql/optimizer/RelExeUtil.cpp @@ -5245,7 +5245,10 @@ RelExpr * ExeUtilCreateTableAs::bindNode(BindWA *bindWA) // get the upd stats query usQuery_ = "UPDATE STATISTICS FOR TABLE "; usQuery_ += getTableName().getQualifiedNameObj().getQualifiedNameAsAnsiString(TRUE); - usQuery_ += " ON EVERY KEY SAMPLE SET ROWCOUNT %Ld;"; + if (isHive) + usQuery_ += " ON EVERY COLUMN SAMPLE SET ROWCOUNT %Ld;"; + else + usQuery_ += " ON EVERY KEY SAMPLE SET ROWCOUNT %Ld;"; } return boundExpr; @@ -5367,9 +5370,9 @@ RelExpr * ExeUtilHiveTruncate::bindNode(BindWA *bindWA) bindWA->setToOverrideSchema(FALSE); naTable = bindWA->getNATable(getTableName()); - if (getIfExist() && (! naTable)) + if (getIfExists() && (! naTable)) { - setTableNotExist(TRUE); + setTableNotExists(TRUE); bindWA->resetErrStatus(); CmpCommon::diags()->clear(); http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/optimizer/RelExeUtil.h ---------------------------------------------------------------------- diff --git a/core/sql/optimizer/RelExeUtil.h b/core/sql/optimizer/RelExeUtil.h index 29588e2..a2deeb6 100644 --- a/core/sql/optimizer/RelExeUtil.h +++ b/core/sql/optimizer/RelExeUtil.h @@ -1110,8 +1110,8 @@ public: dropTableOnDealloc_(FALSE), noSecurityCheck_(FALSE), hiveExternalTable_(FALSE), - ifExist_(FALSE), - tableNotExist_(FALSE) + ifExists_(FALSE), + tableNotExists_(FALSE) { } virtual NABoolean isExeUtilQueryType() { return TRUE; } @@ -1136,14 +1136,14 @@ public: NABoolean getDropTableOnDealloc() const { return dropTableOnDealloc_; } NABoolean getNoSecurityCheck() const { return noSecurityCheck_; } NABoolean getHiveExternalTable() const { return hiveExternalTable_; } - NABoolean getIfExist() const { return ifExist_; } - NABoolean getTableNotExist() const { return tableNotExist_; } + NABoolean getIfExists() const { return ifExists_; } + NABoolean getTableNotExists() const { return tableNotExists_; } void setDropTableOnDealloc(NABoolean v=TRUE) { dropTableOnDealloc_ = v; } void setNoSecurityCheck(NABoolean v) { noSecurityCheck_ = v; } void setHiveExternalTable(NABoolean v) { hiveExternalTable_ = v; } - void setIfExist(NABoolean v) { ifExist_ = v; } - void setTableNotExist(NABoolean v) { tableNotExist_ = v; } + void setIfExists(NABoolean v) { ifExists_ = v; } + void setTableNotExists(NABoolean v) { tableNotExists_ = v; } private: @@ -1160,10 +1160,10 @@ private: NABoolean hiveExternalTable_; // if 'if exist' clause is specified - NABoolean ifExist_; + NABoolean ifExists_; // if table does not exist - NABoolean tableNotExist_; + NABoolean tableNotExists_; }; class ExeUtilHiveQuery : public ExeUtilExpr http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/parser/sqlparser.y ---------------------------------------------------------------------- diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y index 968c096..b0042e7 100755 --- a/core/sql/parser/sqlparser.y +++ b/core/sql/parser/sqlparser.y @@ -25503,7 +25503,11 @@ ctas_load_and_in_memory_options : TOK_LOAD TOK_IF TOK_EXISTS { $$ = TableTokens::OPT_IN_MEM; } - | TOK_LOAD TOK_IF TOK_EXISTS TOK_WITH TOK_DELETE TOK_DATA + | TOK_LOAD TOK_IF TOK_EXISTS TOK_WITH TOK_TRUNCATE + { + $$ = TableTokens::OPT_LOAD_WITH_DELETE; + } + | TOK_LOAD TOK_IF TOK_EXISTS TOK_WITH TOK_DELETE TOK_DATA { $$ = TableTokens::OPT_LOAD_WITH_DELETE; } http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/regress/hive/EXPECTED008 ---------------------------------------------------------------------- diff --git a/core/sql/regress/hive/EXPECTED008 b/core/sql/regress/hive/EXPECTED008 index 3d07895..9265db9 100644 --- a/core/sql/regress/hive/EXPECTED008 +++ b/core/sql/regress/hive/EXPECTED008 @@ -520,7 +520,7 @@ DESCRIPTION trafodion."_MD_".columns; UpsertLoadQuery ........ NULL UpdStatsQuery .......... UPDATE STATISTICS FOR TABLE HIVE.SCH008.COLUMNS ON - EVERY KEY SAMPLE SET ROWCOUNT %Ld; + EVERY COLUMN SAMPLE SET ROWCOUNT %Ld; --- SQL operation complete. >>create external table hive.sch008.columns no load http://git-wip-us.apache.org/repos/asf/trafodion/blob/90dd2d35/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp ---------------------------------------------------------------------- diff --git a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp index 815381d..f422b2d 100644 --- a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp +++ b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp @@ -11791,7 +11791,7 @@ NABoolean CmpSeabaseDDL::setupQueryTreeForHiveDDL( (cn, newHiveName, hiveDDL, PARSERHEAP()); if (ifExistsOrNotExists) - ht->setIfExist(TRUE); + ht->setIfExists(TRUE); ddlExprRoot = new(CmpCommon::statementHeap()) RelRoot(ht); }
