You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafodion.apache.org by an...@apache.org on 2018/06/20 18:53:45 UTC
[3/6] trafodion git commit: TRAFODION-3086 Further enhancements to
'DDL on Hive objects'
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/optimizer/RelExeUtil.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.cpp b/core/sql/optimizer/RelExeUtil.cpp
index 971a537..2675470 100644
--- a/core/sql/optimizer/RelExeUtil.cpp
+++ b/core/sql/optimizer/RelExeUtil.cpp
@@ -395,10 +395,6 @@ const NAString ExeUtilExpr::getText() const
result = "CREATE_TABLE_AS";
break;
- case FAST_DELETE_:
- result = "FAST_DELETE";
- break;
-
case HIVE_TRUNCATE_:
result = "HIVE_TRUNCATE";
break;
@@ -850,30 +846,25 @@ RelExpr * ExeUtilCreateTableAs::copyTopNode(RelExpr *derivedNode,
}
// -----------------------------------------------------------------------
-// Member functions for class ExeUtilFastDelete
+// Member functions for class ExeUtilHiveTruncateLegacy
// -----------------------------------------------------------------------
-RelExpr * ExeUtilFastDelete::copyTopNode(RelExpr *derivedNode, CollHeap* outHeap)
+RelExpr * ExeUtilHiveTruncateLegacy::copyTopNode(RelExpr *derivedNode, CollHeap* outHeap)
{
- ExeUtilFastDelete *result;
+ ExeUtilHiveTruncateLegacy *result;
if (derivedNode == NULL)
- result = new (outHeap) ExeUtilFastDelete(getTableName(),
- getExprNode(), NULL, CharInfo::UnknownCharSet,
- doPurgedataCat_,
- noLog_,
- ignoreTrigger_,
- isPurgedata_,
- outHeap);
+ result = new (outHeap) ExeUtilHiveTruncateLegacy(getTableName(),
+ pl_,
+ outHeap);
else
- result = (ExeUtilFastDelete *) derivedNode;
-
- result->doParallelDelete_ = doParallelDelete_;
- result->doParallelDeleteIfXn_ = doParallelDeleteIfXn_;
- result->offlineTable_ = offlineTable_;
- result->doLabelPurgedata_ = doLabelPurgedata_;
+ result = (ExeUtilHiveTruncateLegacy *) derivedNode;
- result->numLOBs_ = numLOBs_;
- result->lobNumArray_ = lobNumArray_;
+ result->hiveTableLocation_= hiveTableLocation_;
+ result->hiveHostName_ = hiveHostName_;
+ result->hiveHdfsPort_ = hiveHdfsPort_;
+ result->suppressModCheck_ = suppressModCheck_;
+ result->dropTableOnDealloc_ = dropTableOnDealloc_;
+ result->noSecurityCheck_ = noSecurityCheck_;
return ExeUtilExpr::copyTopNode(result, outHeap);
}
@@ -887,21 +878,18 @@ RelExpr * ExeUtilHiveTruncate::copyTopNode(RelExpr *derivedNode, CollHeap* outHe
if (derivedNode == NULL)
result = new (outHeap) ExeUtilHiveTruncate(getTableName(),
- pl_,
+ hiveTableName_,
+ hiveTruncQuery_,
outHeap);
else
result = (ExeUtilHiveTruncate *) derivedNode;
- result->hiveTableLocation_= hiveTableLocation_;
- result->hiveHostName_ = hiveHostName_;
- result->hiveHdfsPort_ = hiveHdfsPort_;
- result->suppressModCheck_ = suppressModCheck_;
result->dropTableOnDealloc_ = dropTableOnDealloc_;
+ result->noSecurityCheck_ = noSecurityCheck_;
return ExeUtilExpr::copyTopNode(result, outHeap);
}
-
// -----------------------------------------------------------------------
RelExpr * ExeUtilHiveQuery::copyTopNode(RelExpr *derivedNode,
CollHeap* outHeap)
@@ -5263,60 +5251,9 @@ RelExpr * ExeUtilCreateTableAs::bindNode(BindWA *bindWA)
return boundExpr;
}
// -----------------------------------------------------------------------
-// member functions for class ExeUtilFastDelete
-// -----------------------------------------------------------------------
-RelExpr * ExeUtilFastDelete::bindNode(BindWA *bindWA)
-{
- if (nodeIsBound())
- {
- bindWA->getCurrentScope()->setRETDesc(getRETDesc());
- return this;
- }
-
- bindChildren(bindWA);
- if (bindWA->errStatus())
- return this;
-
- // do not do override schema for this
- bindWA->setToOverrideSchema(FALSE);
-
- NATable * naTable = bindWA->getNATable(getTableName());
- if ((!naTable) ||
- (bindWA->errStatus()))
- return this;
-
- if ((getTableName().isHive()) ||
- (naTable->isHiveTable()))
- {
- *CmpCommon::diags() << DgSqlCode(-3242)
- << DgString0("Purgedata is not allowed for Hive tables. Use 'Truncate Table' command.");
- bindWA->setErrStatus();
- return NULL;
- }
-
- if (! getTableName().isSeabase())
- {
- *CmpCommon::diags() << DgSqlCode(-4222) << DgString0("PURGEDATA");
- bindWA->setErrStatus();
- return NULL;
- }
-
- DDLExpr * ddlExpr = new(bindWA->wHeap()) DDLExpr(NULL,
- getStmtText(),
- CharInfo::UnknownCharSet,
- CmpCommon::statementHeap());
- ddlExpr->setPurgedata(TRUE);
- ddlExpr->setPurgedataTableName(getTableName());
-
- RelExpr * boundExpr = ddlExpr->bindNode(bindWA);
-
- return boundExpr;
-}
-
-// -----------------------------------------------------------------------
-// member functions for class ExeUtilHiveTruncate
+// member functions for class ExeUtilHiveTruncateLegacy
// -----------------------------------------------------------------------
-RelExpr * ExeUtilHiveTruncate::bindNode(BindWA *bindWA)
+RelExpr * ExeUtilHiveTruncateLegacy::bindNode(BindWA *bindWA)
{
if (nodeIsBound())
{
@@ -5410,6 +5347,115 @@ RelExpr * ExeUtilHiveTruncate::bindNode(BindWA *bindWA)
}
// -----------------------------------------------------------------------
+// member functions for class ExeUtilHiveTruncate
+// -----------------------------------------------------------------------
+RelExpr * ExeUtilHiveTruncate::bindNode(BindWA *bindWA)
+{
+ if (nodeIsBound())
+ {
+ bindWA->getCurrentScope()->setRETDesc(getRETDesc());
+ return this;
+ }
+
+ bindChildren(bindWA);
+ if (bindWA->errStatus())
+ return this;
+
+ NATable *naTable = NULL;
+
+ // do not do override schema for this
+ bindWA->setToOverrideSchema(FALSE);
+
+ naTable = bindWA->getNATable(getTableName());
+ if (getIfExist() && (! naTable))
+ {
+ setTableNotExist(TRUE);
+
+ bindWA->resetErrStatus();
+ CmpCommon::diags()->clear();
+ RelExpr * boundExpr = ExeUtilExpr::bindNode(bindWA);
+ if (bindWA->errStatus())
+ return NULL;
+
+ return boundExpr;
+ }
+
+ if ((!naTable) ||
+ (bindWA->errStatus()))
+ return this;
+
+ if ((NOT getTableName().isHive()) ||
+ (!naTable->isHiveTable()))
+ {
+ *CmpCommon::diags() << DgSqlCode(-3242)
+ << DgString0("Truncate is only allowed for hive tables.");
+ bindWA->setErrStatus();
+ return NULL;
+ }
+
+ // if no security check is to be done, skip it.
+ if (NOT noSecurityCheck_)
+ {
+ // In Hive, you need admin privs to truncate files. At this time, we don't
+ // know if the current user has admin privileges, return an error.
+ char * sentryEnv = getenv("SENTRY_SECURITY_FOR_HIVE");
+ if (sentryEnv && strcmp(sentryEnv, "TRUE") == 0)
+ {
+ *CmpCommon::diags() << DgSqlCode(-3242)
+ << DgString0("Truncate must be performed through native Hive interface.");
+ bindWA->setErrStatus();
+ return NULL;
+ }
+
+ // If the current user has been granted the Trafodion Hive/DB root role or
+ // is DB__ROOT, allow the operation.
+ // If the current user has select and delete privileges, allow the operation
+ if (bindWA->currentCmpContext()->isAuthorizationEnabled())
+ {
+ NABoolean found = FALSE;
+ if (ComUser::isRootUserID() ||
+ ComUser::currentUserHasRole(HIVE_ROLE_ID) ||
+ ComUser::currentUserHasRole(ROOT_ROLE_ID))
+ found = TRUE;
+
+ if (!found)
+ {
+ PrivMgrUserPrivs *pPrivInfo = naTable->getPrivInfo();
+ if (pPrivInfo &&
+ pPrivInfo->hasPriv(SELECT_PRIV) &&
+ pPrivInfo->hasPriv(DELETE_PRIV))
+ found = TRUE;
+
+ if (!found)
+ {
+ *CmpCommon::diags()
+ << DgSqlCode( -1051 )
+ << DgTableName(naTable->getTableName().getQualifiedNameAsAnsiString());
+ bindWA->setErrStatus();
+ return NULL;
+ }
+ }
+ }
+ }
+
+ setHiveExternalTable(naTable->isHiveExternalTable());
+
+ // Allocate a TableDesc and attach it to this.
+ //
+#ifdef __ignore
+ setUtilTableDesc(bindWA->createTableDesc(naTable, getTableName()));
+ if (bindWA->errStatus())
+ return this;
+#endif
+
+ RelExpr * boundExpr = ExeUtilExpr::bindNode(bindWA);
+ if (bindWA->errStatus())
+ return NULL;
+
+ return boundExpr;
+}
+
+// -----------------------------------------------------------------------
// member functions for class ExeUtilMaintainObject
// -----------------------------------------------------------------------
RelExpr * ExeUtilMaintainObject::bindNode(BindWA *bindWA)
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/optimizer/RelExeUtil.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExeUtil.h b/core/sql/optimizer/RelExeUtil.h
index d94ab63..29588e2 100644
--- a/core/sql/optimizer/RelExeUtil.h
+++ b/core/sql/optimizer/RelExeUtil.h
@@ -371,6 +371,10 @@ public:
{(v ? flags_ |= PURGEDATA : flags_ &= ~PURGEDATA); }
NABoolean purgedata() { return (flags_ & PURGEDATA) != 0;}
+ void setPurgedataIfExists(NABoolean v)
+ {(v ? flags_ |= PURGEDATA_IF_EXISTS : flags_ &= ~PURGEDATA_IF_EXISTS); }
+ NABoolean purgedataIfExists() { return (flags_ & PURGEDATA_IF_EXISTS) != 0;}
+
// this ddlexpr is created for 'showddl <obj>, explain' to
// explain the object explObjName.
void setShowddlExplain(NABoolean v)
@@ -411,6 +415,7 @@ public:
SHOWDDL_EXPLAIN = 0x040000,
SHOWDDL_EXPLAIN_INT = 0x080000,
NO_LABEL_STATS = 0x100000,
+ PURGEDATA_IF_EXISTS = 0x200000,
};
// see method processSpecialDDL in sqlcomp/parser.cpp
@@ -486,7 +491,6 @@ public:
CLEANUP_VOLATILE_TABLES_ = 5,
GET_VOLATILE_INFO_ = 6,
CREATE_TABLE_AS_ = 7,
- FAST_DELETE_ = 8,
GET_STATISTICS_ = 9,
LONG_RUNNING_ = 11,
GET_METADATA_INFO_ = 12,
@@ -513,9 +517,10 @@ public:
HBASE_UNLOAD_TASK_ = 36,
ORC_FAST_AGGR_ = 37,
GET_QID_ = 38,
- HIVE_TRUNCATE_ = 39,
+ HIVE_TRUNCATE_LEGACY_ = 39,
LOB_UPDATE_UTIL_ = 40,
- HIVE_QUERY_ = 41
+ HIVE_QUERY_ = 41,
+ HIVE_TRUNCATE_ = 45
};
ExeUtilExpr(ExeUtilType type,
@@ -1017,36 +1022,23 @@ private:
NABoolean deleteData_;
};
-class ExeUtilFastDelete : public ExeUtilExpr
+class ExeUtilHiveTruncateLegacy : public ExeUtilExpr
{
public:
- ExeUtilFastDelete(const CorrName &name,
- ExprNode * exprNode,
- char * stmtText,
- CharInfo::CharSet stmtTextCharSet,
- NABoolean doPurgedataCat = FALSE,
- NABoolean noLog = FALSE,
- NABoolean ignoreTrigger = FALSE,
- NABoolean isPurgedata = FALSE,
- CollHeap *oHeap = CmpCommon::statementHeap())
- : ExeUtilExpr(FAST_DELETE_, name, exprNode, NULL, stmtText, stmtTextCharSet, oHeap),
- doPurgedataCat_(doPurgedataCat),
- noLog_(noLog), ignoreTrigger_(ignoreTrigger),
- isPurgedata_(isPurgedata),
- doParallelDelete_(FALSE),
- doParallelDeleteIfXn_(FALSE),
- offlineTable_(FALSE),
- doLabelPurgedata_(FALSE),
- numLOBs_(0),
- lobNumArray_(oHeap)
- {
- };
-
+ ExeUtilHiveTruncateLegacy(const CorrName &name,
+ ConstStringList * pl,
+ CollHeap *oHeap = CmpCommon::statementHeap())
+ : ExeUtilExpr(HIVE_TRUNCATE_LEGACY_, name, NULL, NULL, NULL,
+ CharInfo::UnknownCharSet, oHeap),
+ pl_(pl), suppressModCheck_(FALSE), dropTableOnDealloc_(FALSE),
+ noSecurityCheck_(FALSE)
+ { }
+
virtual NABoolean isExeUtilQueryType() { return TRUE; }
-
+
virtual RelExpr * copyTopNode(RelExpr *derivedNode = NULL,
CollHeap* outHeap = 0);
-
+
virtual RelExpr * bindNode(BindWA *bindWAPtr);
virtual RelExpr * preCodeGen(Generator * generator,
@@ -1058,42 +1050,68 @@ public:
virtual NABoolean aqrSupported() { return TRUE; }
-private:
- NABoolean doPurgedataCat_;
+ const NAString &getHiveTableLocation() const
+ {
+ return hiveTableLocation_;
+ }
- NABoolean noLog_;
- NABoolean ignoreTrigger_;
+ const NAString &getHiveHostName() const
+ {
+ return hiveHostName_;
+ }
- NABoolean isPurgedata_;
+ const Int32 getHiveHdfsPort() const
+ {
+ return hiveHdfsPort_;
+ }
- // do regular parallel delete at runtime. Start a Xn, if oen doesn't
- // exist.
- NABoolean doParallelDelete_;
+ ConstStringList* &partnList() { return pl_; }
+
+ NABoolean getSuppressModCheck() const { return suppressModCheck_; }
+ NABoolean getDropTableOnDealloc() const { return dropTableOnDealloc_; }
+ NABoolean getNoSecurityCheck() const { return noSecurityCheck_; }
- // do regular parallel delete if doParallelDelete is not chosen and
- // there is a transaction running at runtime.
- // If this is FALSE, then regular purgedata is invoked.
- NABoolean doParallelDeleteIfXn_;
+ void setSuppressModCheck(NABoolean v=TRUE) { suppressModCheck_ = v; }
+ void setDropTableOnDealloc(NABoolean v=TRUE) { dropTableOnDealloc_ = v; }
+ void setNoSecurityCheck(NABoolean v) { noSecurityCheck_ = v; }
+private:
+ NAString hiveTableLocation_;
+ NAString hiveHostName_;
+ Int32 hiveHdfsPort_;
- NABoolean offlineTable_;
+ // timestamp of hiveTableLocation.
+ Int64 hiveModTS_;
- // use the new parallel label purgedata operation.
- NABoolean doLabelPurgedata_;
-
- // if there are LOB columns.
- Lng32 numLOBs_; // number of LOB columns
- NAList<short> lobNumArray_; // array of shorts. Each short is the lob num
+ // list of partitions to be truncated
+ ConstStringList * pl_;
+ NABoolean suppressModCheck_;
+ NABoolean dropTableOnDealloc_;
+
+ // if this truncate node is added internally to process 'insert overwrite'
+ // statement, then skip security/privilege checks.
+ // Checks will be done when the corresponding insert node is processed.
+ NABoolean noSecurityCheck_;
};
+///////////////////////////////////////////////////////////
+// ExeUtilHiveTruncate
+///////////////////////////////////////////////////////////
class ExeUtilHiveTruncate : public ExeUtilExpr
{
public:
- ExeUtilHiveTruncate(const CorrName &name,
- ConstStringList * pl,
+ ExeUtilHiveTruncate(CorrName &name,
+ NAString &hiveTableName,
+ NAString &hiveTruncQuery,
CollHeap *oHeap = CmpCommon::statementHeap())
: ExeUtilExpr(HIVE_TRUNCATE_, name, NULL, NULL, NULL,
CharInfo::UnknownCharSet, oHeap),
- pl_(pl), suppressModCheck_(FALSE), dropTableOnDealloc_(FALSE)
+ hiveTableName_(hiveTableName),
+ hiveTruncQuery_(hiveTruncQuery),
+ dropTableOnDealloc_(FALSE),
+ noSecurityCheck_(FALSE),
+ hiveExternalTable_(FALSE),
+ ifExist_(FALSE),
+ tableNotExist_(FALSE)
{ }
virtual NABoolean isExeUtilQueryType() { return TRUE; }
@@ -1103,50 +1121,49 @@ public:
virtual RelExpr * bindNode(BindWA *bindWAPtr);
- virtual RelExpr * preCodeGen(Generator * generator,
- const ValueIdSet & externalInputs,
- ValueIdSet &pulledNewInputs);
-
// method to do code generation
virtual short codeGen(Generator*);
+ ExplainTuple *addSpecificExplainInfo(ExplainTupleMaster *explainTuple,
+ ComTdb * tdb,
+ Generator *generator);
+
virtual NABoolean aqrSupported() { return TRUE; }
- const NAString &getHiveTableLocation() const
- {
- return hiveTableLocation_;
- }
+ const NAString &getHiveTableName() const { return hiveTableName_; }
+ const NAString &getHiveTruncQuery() const { return hiveTruncQuery_; }
- const NAString &getHiveHostName() const
- {
- return hiveHostName_;
- }
+ 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_; }
- const Int32 getHiveHdfsPort() const
- {
- return hiveHdfsPort_;
- }
+ 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; }
- ConstStringList* &partnList() { return pl_; }
+private:
- NABoolean getSuppressModCheck() const { return suppressModCheck_; }
- NABoolean getDropTableOnDealloc() const { return dropTableOnDealloc_; }
+ NAString hiveTableName_;
+ NAString hiveTruncQuery_;
+ NABoolean dropTableOnDealloc_;
- void setSuppressModCheck(NABoolean v=TRUE) { suppressModCheck_ = v; }
- void setDropTableOnDealloc(NABoolean v=TRUE) { dropTableOnDealloc_ = v; }
+ // if this truncate node is added internally to process 'insert overwrite'
+ // statement, then skip security/privilege checks.
+ // Checks will be done when the corresponding insert node is processed.
+ NABoolean noSecurityCheck_;
-private:
- NAString hiveTableLocation_;
- NAString hiveHostName_;
- Int32 hiveHdfsPort_;
+ // TRUE: Hive External table. FALSE: Hive Managed table.
+ NABoolean hiveExternalTable_;
- // timestamp of hiveTableLocation.
- Int64 hiveModTS_;
+ // if 'if exist' clause is specified
+ NABoolean ifExist_;
- // list of partitions to be truncated
- ConstStringList * pl_;
- NABoolean suppressModCheck_;
- NABoolean dropTableOnDealloc_;
+ // if table does not exist
+ NABoolean tableNotExist_;
};
class ExeUtilHiveQuery : public ExeUtilExpr
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/optimizer/RelExpr.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelExpr.cpp b/core/sql/optimizer/RelExpr.cpp
index 44e0e90..669f806 100644
--- a/core/sql/optimizer/RelExpr.cpp
+++ b/core/sql/optimizer/RelExpr.cpp
@@ -13600,7 +13600,6 @@ Delete::Delete(const CorrName &name, TableDesc *tabId, OperatorTypeEnum otype,
ConstStringList * csl,
CollHeap *oHeap)
: GenericUpdate(name,tabId,otype,child,newRecExpr,currOfCursorName,oHeap),
- isFastDelete_(FALSE),
csl_(csl),estRowsAccessed_(0)
{
setCacheableNode(CmpMain::BIND);
@@ -13630,7 +13629,6 @@ RelExpr * Delete::copyTopNode(RelExpr *derivedNode, CollHeap* outHeap)
else
result = (Delete *) derivedNode;
- result->isFastDelete_ = isFastDelete_;
result->csl() = csl();
result->setEstRowsAccessed(getEstRowsAccessed());
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/optimizer/RelFastTransport.cpp
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelFastTransport.cpp b/core/sql/optimizer/RelFastTransport.cpp
index 9981b6c..7365632 100644
--- a/core/sql/optimizer/RelFastTransport.cpp
+++ b/core/sql/optimizer/RelFastTransport.cpp
@@ -139,18 +139,85 @@ RelExpr *FastExtract::makeFastExtractTree(
unloadRelExpr->setIsMainQueryOperator(calledFromBinder);
result = unloadRelExpr;
- if (overwriteTable)
+ // keeping older Hive Truncate around for time being.
+ // Once newer method is tested, legacy will be removed.
+ NABoolean legacyHiveTruncate = FALSE;
+ char * leg = getenv("TRUNC_LEGACY");
+ if (leg)
+ legacyHiveTruncate = TRUE;
+ if (overwriteTable && legacyHiveTruncate)
{
+ ExeUtilHiveTruncateLegacy *trunc = new (bindWA->wHeap())
+ ExeUtilHiveTruncateLegacy(tableDesc->getCorrNameObj(),
+ NULL,
+ bindWA->wHeap());
+ trunc->setNoSecurityCheck(TRUE);
+
+ RelExpr * newRelExpr = trunc;
+
+ if (tempTableForCSE)
+ {
+ trunc->setSuppressModCheck();
+
+ // This table gets created at compile time, unlike most
+ // other tables. It gets dropped when the statement is
+ // deallocated. Note that there are three problems:
+ // a) Statement gets never executed
+ // b) Process exits before deallocating the statement
+ // c) Statement gets deallocated, then gets executed again
+ //
+ // Todo: CSE: Handle these issues.
+ // Cases a) and b) are handled like volatile tables, there
+ // is a cleanup mechanism.
+ // Case c) gets handled by AQR.
+ trunc->setDropTableOnDealloc();
+ }
+
+ if (calledFromBinder)
+ //new root to prevent error 4056 when binding
+ newRelExpr = new (bindWA->wHeap()) RelRoot(newRelExpr);
+ else
+ // this node must be bound, even outside the binder,
+ // to set some values
+ newRelExpr = newRelExpr->bindNode(bindWA);
+
+ Union *blockedUnion = new (bindWA->wHeap()) Union(newRelExpr, result);
+
+ blockedUnion->setBlockedUnion();
+ blockedUnion->setSerialUnion();
+ result = blockedUnion;
+ }
+
+ if (overwriteTable && (NOT legacyHiveTruncate))
+ {
+ NAString hiveName = ComConvertTrafHiveNameToNativeHiveName
+ (tableDesc->getCorrNameObj().getQualifiedNameObj().getCatalogName(),
+ tableDesc->getCorrNameObj().getQualifiedNameObj().getSchemaName(),
+ tableDesc->getCorrNameObj().getQualifiedNameObj().getObjectName());
+
+ if (hiveName.isNull())
+ {
+ *CmpCommon::diags()
+ << DgSqlCode(-3242)
+ << DgString0("Invalid Hive name specified.");
+ bindWA->setErrStatus();
+ return NULL;
+ }
+
+ NAString hiveTruncQuery("truncate table ");
+ hiveTruncQuery += hiveName;
+
ExeUtilHiveTruncate *trunc = new (bindWA->wHeap())
ExeUtilHiveTruncate(tableDesc->getCorrNameObj(),
- NULL,
+ hiveName,
+ hiveTruncQuery,
bindWA->wHeap());
+ trunc->setNoSecurityCheck(TRUE);
+
RelExpr * newRelExpr = trunc;
if (tempTableForCSE)
{
- trunc->setSuppressModCheck();
-
// This table gets created at compile time, unlike most
// other tables. It gets dropped when the statement is
// deallocated. Note that there are three problems:
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/optimizer/RelUpdate.h
----------------------------------------------------------------------
diff --git a/core/sql/optimizer/RelUpdate.h b/core/sql/optimizer/RelUpdate.h
index 1e0b9cd..a88aa64 100644
--- a/core/sql/optimizer/RelUpdate.h
+++ b/core/sql/optimizer/RelUpdate.h
@@ -1580,17 +1580,6 @@ public:
const QualifiedName &subjectTable,
UpdateColumns *updateCols = NULL);
- void setIsFastDelete(NABoolean v)
- {
- isFastDelete_ = v;
- }
- NABoolean isFastDelete()
- {
- return isFastDelete_;
- }
-
- // ValueIdList &lobDeleteExpr() { return lobDeleteExpr_; }
-
ConstStringList* &csl() { return csl_; }
inline const CostScalar getEstRowsAccessed() const
@@ -1599,10 +1588,6 @@ public:
inline void setEstRowsAccessed(CostScalar r) { estRowsAccessed_ = r; }
private:
- NABoolean isFastDelete_;
-
- // ValueIdList lobDeleteExpr_;
-
ConstStringList * csl_;
// Estimated number of rows accessed by Delete operator.
CostScalar estRowsAccessed_;
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/parser/sqlparser.y
----------------------------------------------------------------------
diff --git a/core/sql/parser/sqlparser.y b/core/sql/parser/sqlparser.y
index 9f58820..968c096 100755
--- a/core/sql/parser/sqlparser.y
+++ b/core/sql/parser/sqlparser.y
@@ -2858,9 +2858,8 @@ static void enableMakeQuotedStringISO88591Mechanism()
%type <pSchemaName> optional_from_schema
%type <stringval> get_statistics_optional_options
-%type <corrName> truncate_table_name
-%type <relx> exe_util_fast_delete
-%type <longint> purgedata_options
+%type <ptr_placeholder> truncate_table_name
+%type <relx> truncate_table
%type <relx> exe_util_get_metadata_info
%type <relx> exe_util_get_version_info
@@ -14850,7 +14849,7 @@ interactive_query_expression:
{
$$ = finalize($1);
}
- | exe_util_fast_delete
+ | truncate_table
{
$$ = finalize($1);
}
@@ -17865,13 +17864,25 @@ optional_mt_options : QUOTED_STRING
}
/* type corrName */
-truncate_table_name : TOK_PURGEDATA table_name
+truncate_table_name : TOK_PURGEDATA optional_if_exists_clause table_name
{
- $$ = $2;
+ $$ = new(PARSERHEAP())
+ PtrPlaceHolder($3,
+ ($2 ? new(PARSERHEAP()) NAString()
+ : NULL));
}
- | TOK_TRUNCATE table_name
+ | TOK_TRUNCATE optional_if_exists_clause
{
- $$ = $2;
+ SqlParser_CurrentParser->hiveDDLInfo_->
+ setValues(TRUE, StmtDDLonHiveObjects::TRUNCATE_, StmtDDLonHiveObjects::TABLE_, $2);
+ }
+ ddl_qualified_name
+ {
+ CorrName * cn = new(PARSERHEAP()) CorrName(*$4, PARSERHEAP());
+ $$ = new(PARSERHEAP())
+ PtrPlaceHolder(cn,
+ ($2 ? new(PARSERHEAP()) NAString()
+ : NULL));
}
| TOK_TRUNCATE TOK_TABLE optional_if_exists_clause
{
@@ -17880,13 +17891,16 @@ truncate_table_name : TOK_PURGEDATA table_name
}
ddl_qualified_name
{
- $$ = new (PARSERHEAP()) CorrName(*$5, PARSERHEAP());
+ CorrName * cn = new(PARSERHEAP()) CorrName(*$5, PARSERHEAP());
+ $$ = new(PARSERHEAP())
+ PtrPlaceHolder(cn,
+ ($3 ? new(PARSERHEAP()) NAString()
+ : NULL));
}
-
-exe_util_fast_delete : truncate_table_name purgedata_options
+
+truncate_table : truncate_table_name
{
- short noLog = ($2 & 0x1) != 0;
- short ignoreTrigger = ($2 & 0x2) != 0;
+ PtrPlaceHolder *pph = $1;
CharInfo::CharSet stmtCharSet = CharInfo::UnknownCharSet;
NAString * stmt = getSqlStmtStr ( stmtCharSet
@@ -17897,31 +17911,20 @@ exe_util_fast_delete : truncate_table_name purgedata_options
*SqlParser_Diags << DgSqlCode(-3406);
YYERROR;
}
- $$ = new (PARSERHEAP())
- ExeUtilFastDelete(CorrName(*$1, PARSERHEAP()),
- NULL,
- (char*)stmt->data(),
- stmtCharSet,
- FALSE,
- noLog,
- ignoreTrigger,
- TRUE,
- PARSERHEAP());
-
- delete $1;
- }
-purgedata_options : /*empty*/ { $$ = 0; }
- | TOK_NOLOG { $$ = 1; }
- | TOK_IGNORE_TRIGGER { $$ = 2; }
- | TOK_NOLOG TOK_IGNORE_TRIGGER { $$ = 3; }
- | TOK_IGNORE_TRIGGER TOK_NOLOG { $$ = 3; }
- | TOK_WAITEDIO { $$ = 4; }
- | TOK_NOLOG TOK_IGNORE_TRIGGER TOK_WAITEDIO { $$ = 7; }
- | TOK_IGNORE_TRIGGER TOK_NOLOG TOK_WAITEDIO { $$ = 7; }
- | TOK_WAITEDIO TOK_NOLOG TOK_IGNORE_TRIGGER { $$ = 7; }
- | TOK_WAITEDIO TOK_IGNORE_TRIGGER TOK_NOLOG { $$ = 7; }
- | TOK_NOLOG TOK_WAITEDIO TOK_IGNORE_TRIGGER { $$ = 7; }
- | TOK_IGNORE_TRIGGER TOK_WAITEDIO TOK_NOLOG { $$ = 7; }
+ CorrName *cn = (CorrName*) pph->ptr1_;
+ NABoolean ifExists = (pph->ptr2_ != NULL);
+
+ DDLExpr * ddlExpr = new(PARSERHEAP())
+ DDLExpr(NULL,
+ (char*)stmt->data(),
+ CharInfo::UnknownCharSet,
+ CmpCommon::statementHeap());
+ ddlExpr->setPurgedata(TRUE);
+ ddlExpr->setPurgedataTableName(*cn);
+ ddlExpr->setPurgedataIfExists(ifExists);
+
+ $$ = ddlExpr;
+ }
exe_util_aqr: TOK_GET TOK_ALL TOK_AQR TOK_ENTRIES
{
@@ -19575,10 +19578,10 @@ Rest_Of_insert_statement : no_check_log no_rollback TOK_INTO table_name query_ex
$5);
((Insert*)$$)->setOverwriteHiveTable(TRUE);
-
+
delete $3;
}
-
+
| no_check_log no_rollback TOK_INTO table_name '(' '*' ')' query_expression order_by_clause access_type optional_limit_spec
{
if (!finalizeAccessOptions($8, $10)) YYERROR;
@@ -20637,76 +20640,8 @@ delete_statement : delete_start_tokens where_clause
}
}
-delete_statement : TOK_DELETE TOK_DATA TOK_FROM table_name
- {
- if (CmpCommon::getDefault(FAST_DELETE) == DF_OFF)
- {
- YYERROR;
- }
-
- CharInfo::CharSet stmtCharSet = CharInfo::UnknownCharSet;
- NAString * stmt = getSqlStmtStr ( stmtCharSet // out - CharInfo::CharSet &
- , PARSERHEAP() // in - NAMemory * heapUsedForOutputBuffers
- );
- // If we can not get a variable-width multi-byte or single-byte string here, report error
- if ( stmt == NULL )
- {
- *SqlParser_Diags << DgSqlCode(-3406);
- YYERROR;
- }
- $$ = new (PARSERHEAP())
- ExeUtilFastDelete(CorrName(*$4, PARSERHEAP()),
- NULL,
- (char*)stmt->data(),
- stmtCharSet,
- FALSE,
- FALSE, FALSE,
- FALSE,
- PARSERHEAP());
-
- delete $4;
- }
-
/* type relx */
-delete_statement : TOK_DELETE TOK_USING TOK_PURGEDATA TOK_FROM table_name
- {
- Scan * inputScan =
- new (PARSERHEAP()) Scan(CorrName(*$5, PARSERHEAP()));
-
- Delete *del = new (PARSERHEAP())
- Delete(CorrName(*$5, PARSERHEAP()),
- NULL,
- REL_UNARY_DELETE,
- inputScan,
- NULL);
-
- del->setIsFastDelete(TRUE);
-
- delete $5;
-
- $$ = del;
- }
-
- | TOK_DELETE TOK_NO TOK_PURGEDATA TOK_FROM table_name
- {
- Scan * inputScan =
- new (PARSERHEAP()) Scan(CorrName(*$5, PARSERHEAP()));
-
- Delete *del = new (PARSERHEAP())
- Delete(CorrName(*$5, PARSERHEAP()),
- NULL,
- REL_UNARY_DELETE,
- inputScan,
- NULL);
-
- del->setIsFastDelete(FALSE);
- del->setNoIMneeded(TRUE);
-
- delete $5;
-
- $$ = del;
- }
- | TOK_DELETE no_check_log TOK_WITH TOK_NO TOK_ROLLBACK TOK_FROM table_name optimizer_hint where_clause
+delete_statement : TOK_DELETE no_check_log TOK_WITH TOK_NO TOK_ROLLBACK TOK_FROM table_name optimizer_hint where_clause
{
Scan * inputScan =
new (PARSERHEAP()) Scan(CorrName(*$7, PARSERHEAP()));
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/regress/hive/EXPECTED005
----------------------------------------------------------------------
diff --git a/core/sql/regress/hive/EXPECTED005 b/core/sql/regress/hive/EXPECTED005
index 298547b..2b4490f 100644
--- a/core/sql/regress/hive/EXPECTED005
+++ b/core/sql/regress/hive/EXPECTED005
@@ -72,7 +72,7 @@
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150079000, failedModTS = 1528150239571, failedLoc = hdfs://localhost:36000/user/trafodion/hive/exttables/customer_ddl
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149450876, failedModTS = 1529149578260, failedLoc = hdfs://localhost:24200/user/trafodion/hive/exttables/customer_ddl
C_PREFERRED_CUST_FLAG (EXPR)
------------------------- --------------------
@@ -108,7 +108,7 @@ Y 9525
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150079000, failedModTS = 1528150239571, failedLoc = hdfs://localhost:36000/user/trafodion/hive/exttables/customer_ddl
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149450876, failedModTS = 1529149578260, failedLoc = hdfs://localhost:24200/user/trafodion/hive/exttables/customer_ddl
C_PREFERRED_CUST_FLAG (EXPR)
------------------------- --------------------
@@ -177,7 +177,7 @@ Y 9525
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150242355, failedModTS = 1528150250981, failedLoc = hdfs://localhost:36000/user/hive/warehouse/newtable
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149581595, failedModTS = 1529149591176, failedLoc = hdfs://localhost:24200/user/hive/warehouse/newtable
A
-------------------------
@@ -227,7 +227,7 @@ xyz
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150239571, failedModTS = 1528150270615, failedLoc = hdfs://localhost:36000/user/trafodion/hive/exttables/customer_ddl
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149578260, failedModTS = 1529149609405, failedLoc = hdfs://localhost:24200/user/trafodion/hive/exttables/customer_ddl
C_PREFERRED_CUST_FLAG (EXPR)
------------------------- --------------------
@@ -242,7 +242,7 @@ Y 18984
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150239571, failedModTS = 1528150270615, failedLoc = hdfs://localhost:36000/user/trafodion/hive/exttables/customer_ddl
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149578260, failedModTS = 1529149609405, failedLoc = hdfs://localhost:24200/user/trafodion/hive/exttables/customer_ddl
C_PREFERRED_CUST_FLAG (EXPR)
------------------------- --------------------
@@ -298,7 +298,7 @@ Y 18984
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150267991, failedModTS = 1528150279764, failedLoc = hdfs://localhost:36000/user/hive/warehouse/newtable
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149606436, failedModTS = 1529149616936, failedLoc = hdfs://localhost:24200/user/hive/warehouse/newtable
A B
----------- -------------------------
@@ -617,18 +617,18 @@ C1 C2 C3 C4 C
--- 1 row(s) selected.
>>load with continue on error into trafodion.seabase.traf_tbl_bad select * from tbl_bad;
Task: LOAD Status: Started Object: TRAFODION.SEABASE.TRAF_TBL_BAD
-Task: CLEANUP Status: Started Time: 2018-06-04 22:12:37.338586
-Task: CLEANUP Status: Ended Time: 2018-06-04 22:12:37.349263
-Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.011
-Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:37.349352
+Task: CLEANUP Status: Started Time: 2018-06-16 11:47:50.919693
+Task: CLEANUP Status: Ended Time: 2018-06-16 11:47:50.927679
+Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.008
+Task: LOADING DATA Status: Started Time: 2018-06-16 11:47:50.927713
Rows Processed: 8
Error Rows: 5
-Task: LOADING DATA Status: Ended Time: 2018-06-04 22:12:37.525012
-Task: LOADING DATA Status: Ended Elapsed Time: 00:00:00.176
-Task: COMPLETION Status: Started Time: 2018-06-04 22:12:37.525050
+Task: LOADING DATA Status: Ended Time: 2018-06-16 11:47:51.85803
+Task: LOADING DATA Status: Ended Elapsed Time: 00:00:00.158
+Task: COMPLETION Status: Started Time: 2018-06-16 11:47:51.85854
Rows Loaded: 3
-Task: COMPLETION Status: Ended Time: 2018-06-04 22:12:37.888170
-Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.363
+Task: COMPLETION Status: Ended Time: 2018-06-16 11:47:52.476978
+Task: COMPLETION Status: Ended Elapsed Time: 00:00:01.391
--- 3 row(s) loaded.
>>select count(*) from trafodion.seabase.traf_tbl_bad;
@@ -644,19 +644,19 @@ Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.363
--- 3 row(s) deleted.
>>load with log error rows into trafodion.seabase.traf_tbl_bad select * from tbl_bad;
Task: LOAD Status: Started Object: TRAFODION.SEABASE.TRAF_TBL_BAD
-Task: CLEANUP Status: Started Time: 2018-06-04 22:12:38.932654
-Task: CLEANUP Status: Ended Time: 2018-06-04 22:12:38.947277
-Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.015
- Logging Location: /user/trafodion/bulkload/logs/ERR_TRAFODION.SEABASE.TRAF_TBL_BAD_20180604_221238
-Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:38.947419
+Task: CLEANUP Status: Started Time: 2018-06-16 11:47:53.526469
+Task: CLEANUP Status: Ended Time: 2018-06-16 11:47:53.536440
+Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.010
+ Logging Location: /user/trafodion/bulkload/logs/ERR_TRAFODION.SEABASE.TRAF_TBL_BAD_20180616_114753
+Task: LOADING DATA Status: Started Time: 2018-06-16 11:47:53.536510
Rows Processed: 8
Error Rows: 5
-Task: LOADING DATA Status: Ended Time: 2018-06-04 22:12:39.164857
-Task: LOADING DATA Status: Ended Elapsed Time: 00:00:00.217
-Task: COMPLETION Status: Started Time: 2018-06-04 22:12:39.164924
+Task: LOADING DATA Status: Ended Time: 2018-06-16 11:47:53.760748
+Task: LOADING DATA Status: Ended Elapsed Time: 00:00:00.224
+Task: COMPLETION Status: Started Time: 2018-06-16 11:47:53.760793
Rows Loaded: 3
-Task: COMPLETION Status: Ended Time: 2018-06-04 22:12:39.538579
-Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.374
+Task: COMPLETION Status: Ended Time: 2018-06-16 11:47:56.167112
+Task: COMPLETION Status: Ended Elapsed Time: 00:00:02.406
--- 3 row(s) loaded.
>>select count(*) from trafodion.seabase.traf_tbl_bad;
@@ -669,19 +669,19 @@ Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.374
--- 1 row(s) selected.
>>load with log error rows to '/user/trafodion/bulkload/logs/TEST005' into trafodion.seabase.traf_tbl_bad select * from tbl_bad;
Task: LOAD Status: Started Object: TRAFODION.SEABASE.TRAF_TBL_BAD
-Task: CLEANUP Status: Started Time: 2018-06-04 22:12:40.528226
-Task: CLEANUP Status: Ended Time: 2018-06-04 22:12:40.541034
-Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.013
- Logging Location: /user/trafodion/bulkload/logs/TEST005/ERR_TRAFODION.SEABASE.TRAF_TBL_BAD_20180604_221240
-Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:40.541082
+Task: CLEANUP Status: Started Time: 2018-06-16 11:47:57.157930
+Task: CLEANUP Status: Ended Time: 2018-06-16 11:47:57.165444
+Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.008
+ Logging Location: /user/trafodion/bulkload/logs/TEST005/ERR_TRAFODION.SEABASE.TRAF_TBL_BAD_20180616_114757
+Task: LOADING DATA Status: Started Time: 2018-06-16 11:47:57.165499
Rows Processed: 8
Error Rows: 5
-Task: LOADING DATA Status: Ended Time: 2018-06-04 22:12:40.732369
-Task: LOADING DATA Status: Ended Elapsed Time: 00:00:00.191
-Task: COMPLETION Status: Started Time: 2018-06-04 22:12:40.732402
+Task: LOADING DATA Status: Ended Time: 2018-06-16 11:47:57.352294
+Task: LOADING DATA Status: Ended Elapsed Time: 00:00:00.187
+Task: COMPLETION Status: Started Time: 2018-06-16 11:47:57.352327
Rows Loaded: 3
-Task: COMPLETION Status: Ended Time: 2018-06-04 22:12:41.125846
-Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.393
+Task: COMPLETION Status: Ended Time: 2018-06-16 11:47:57.916072
+Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.564
--- 3 row(s) loaded.
>>select count(*) from trafodion.seabase.traf_tbl_bad;
@@ -697,10 +697,10 @@ Task: COMPLETION Status: Ended Elapsed Time: 00:00:00.393
--- 6 row(s) deleted.
>>load with stop after 3 error rows into trafodion.seabase.traf_tbl_bad select * from tbl_bad;
Task: LOAD Status: Started Object: TRAFODION.SEABASE.TRAF_TBL_BAD
-Task: CLEANUP Status: Started Time: 2018-06-04 22:12:42.147737
-Task: CLEANUP Status: Ended Time: 2018-06-04 22:12:42.157127
+Task: CLEANUP Status: Started Time: 2018-06-16 11:47:58.929152
+Task: CLEANUP Status: Ended Time: 2018-06-16 11:47:58.937786
Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.009
-Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:42.157174
+Task: LOADING DATA Status: Started Time: 2018-06-16 11:47:58.937815
*** ERROR[8113] The maximum number of error rows is exceeded.
@@ -715,11 +715,11 @@ Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:42.157174
--- 1 row(s) selected.
>>load with log error rows, stop after 3 error rows into trafodion.seabase.traf_tbl_bad select * from tbl_bad;
Task: LOAD Status: Started Object: TRAFODION.SEABASE.TRAF_TBL_BAD
-Task: CLEANUP Status: Started Time: 2018-06-04 22:12:43.279600
-Task: CLEANUP Status: Ended Time: 2018-06-04 22:12:43.289771
-Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.010
- Logging Location: /user/trafodion/bulkload/logs/ERR_TRAFODION.SEABASE.TRAF_TBL_BAD_20180604_221243
-Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:43.289816
+Task: CLEANUP Status: Started Time: 2018-06-16 11:48:00.37617
+Task: CLEANUP Status: Ended Time: 2018-06-16 11:48:00.45699
+Task: CLEANUP Status: Ended Elapsed Time: 00:00:00.008
+ Logging Location: /user/trafodion/bulkload/logs/ERR_TRAFODION.SEABASE.TRAF_TBL_BAD_20180616_114800
+Task: LOADING DATA Status: Started Time: 2018-06-16 11:48:00.45732
*** ERROR[8113] The maximum number of error rows is exceeded.
@@ -809,7 +809,7 @@ Task: LOADING DATA Status: Started Time: 2018-06-04 22:12:43.289816
*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150390948, failedModTS = 1528150393514, failedLoc = hdfs://localhost:36000/user/hive/warehouse/thive
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149699813, failedModTS = 1529149706160, failedLoc = hdfs://localhost:24200/user/hive/warehouse/thive
A
-----------
@@ -866,16 +866,16 @@ A B
--- SQL operation complete.
>>select * from hive.hive.thive;
+*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
+
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149722198, failedModTS = 1529149723553, failedLoc = hdfs://localhost:24200/user/hive/warehouse/thive
+
--- 0 row(s) selected.
>>insert into hive.hive.thive values (10, 20);
--- 1 row(s) inserted.
>>select * from hive.hive.thive;
-*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
-
-*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1528150404696, failedModTS = 1528150406756, failedLoc = hdfs://localhost:36000/user/hive/warehouse/thive
-
A B
----------- -----------
@@ -890,6 +890,10 @@ A B
--- SQL operation complete.
>>select * from hive.hive.thive;
+*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
+
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149724776, failedModTS = 1529149727335, failedLoc = hdfs://localhost:24200/user/hive/warehouse/thive
+
--- 0 row(s) selected.
>>
>>-- truncate of partitioned hive table
@@ -962,7 +966,7 @@ t005part.a t005part.b t005part.c
>>-- should return error
>>truncate table hive.hive.t005part partition (b=10,c=13);
-*** ERROR[1214] Error encountered when executing HiveQL statement "truncate table `default`.T005PART partition (b=10,c=13)". Details: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10006]: Partition not found {b=10, c=13}
+*** ERROR[1214] Error encountered when executing HiveQL statement "TRUNCATE TABLE `default`.T005PART partition (b=10,c=13)". Details: org.apache.hive.service.cli.HiveSQLException: Error while compiling statement: FAILED: SemanticException [Error 10006]: Partition not found {b=10, c=13}
--- SQL operation failed with errors.
>>
@@ -971,14 +975,13 @@ t005part.a t005part.b t005part.c
*** ERROR[3242] This statement is not supported. Reason: Purgedata is not allowed for Hive tables. Use 'Truncate Table' command.
-*** ERROR[8822] The statement was not prepared.
-
+--- SQL operation failed with errors.
>>
>>-- tests for hive insert error modes
>>invoke hive.hive.thive_insert_smallint;
-- Definition of hive table HIVE.HIVE.THIVE_INSERT_SMALLINT
--- Definition current Mon Jun 4 22:16:40 2018
+-- Definition current Sat Jun 16 11:51:20 2018
(
A SMALLINT
@@ -999,7 +1002,7 @@ CREATE TABLE HIVE.HIVE.THIVE_INSERT_SMALLINT
/* Trafodion DDL */
REGISTER /*INTERNAL*/ HIVE TABLE HIVE.HIVE.THIVE_INSERT_SMALLINT;
-/* ObjectUID = 7976600667680320368 */
+/* ObjectUID = 7436169711789392123 */
--- SQL operation complete.
>>
@@ -1012,6 +1015,10 @@ REGISTER /*INTERNAL*/ HIVE TABLE HIVE.HIVE.THIVE_INSERT_SMALLINT;
>>insert into hive.hive.thive_insert_smallint select * from
+> (values (10), (11111111), (21), (22222222));
+*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
+
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149537134, failedModTS = 1529149881411, failedLoc = hdfs://localhost:24200/user/hive/warehouse/thive_insert_smallint
+
--- 4 row(s) inserted.
>>select * from hive.hive.thive_insert_smallint;
@@ -1049,6 +1056,10 @@ A
>>insert into hive.hive.thive_insert_smallint select * from
+> (values (10), (11111111), (21), (22222222));
+*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
+
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149883896, failedModTS = 1529149886157, failedLoc = hdfs://localhost:24200/user/hive/warehouse/thive_insert_smallint
+
--- 2 row(s) inserted.
>>select * from hive.hive.thive_insert_smallint;
@@ -1088,7 +1099,7 @@ A
>>invoke hive.hive.thive_insert_varchar;
-- Definition of hive table HIVE.HIVE.THIVE_INSERT_VARCHAR
--- Definition current Mon Jun 4 22:17:04 2018
+-- Definition current Sat Jun 16 11:51:32 2018
(
A VARCHAR(1 CHAR) CHARACTER SET UTF8 COLLATE
@@ -1113,7 +1124,7 @@ CREATE TABLE HIVE.HIVE.THIVE_INSERT_VARCHAR
/* Trafodion DDL */
REGISTER /*INTERNAL*/ HIVE TABLE HIVE.HIVE.THIVE_INSERT_VARCHAR;
-/* ObjectUID = 7976600667680321080 */
+/* ObjectUID = 7436169711789392374 */
--- SQL operation complete.
>>cqd hive_insert_error_mode '1';
@@ -1124,6 +1135,10 @@ REGISTER /*INTERNAL*/ HIVE TABLE HIVE.HIVE.THIVE_INSERT_VARCHAR;
--- SQL operation complete.
>>insert into hive.hive.thive_insert_varchar values ('abcddcba','efghijkl');
+*** WARNING[8597] Statement was automatically retried 1 time(s). Delay before each retry was 0 seconds. See next entry for the error that caused this retry.
+
+*** WARNING[8436] Mismatch detected between compiletime and runtime hive table definitions. DataModMismatchDetails: compiledModTS = 1529149539689, failedModTS = 1529149893202, failedLoc = hdfs://localhost:24200/user/hive/warehouse/thive_insert_varchar
+
--- 1 row(s) inserted.
>>
>>cqd hive_max_string_length_in_bytes '20';
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/regress/hive/EXPECTED008
----------------------------------------------------------------------
diff --git a/core/sql/regress/hive/EXPECTED008 b/core/sql/regress/hive/EXPECTED008
index ce76529..3d07895 100644
--- a/core/sql/regress/hive/EXPECTED008
+++ b/core/sql/regress/hive/EXPECTED008
@@ -872,9 +872,10 @@ A B
>>-- next truncate should return error
>>truncate table t00807;
-*** ERROR[1388] Table sch008.t00807 does not exist in Hive Metadata.
+*** ERROR[1388] Object HIVE.SCH008.T00807 does not exist in Hive Metadata.
+
+*** ERROR[8822] The statement was not prepared.
---- SQL operation failed with errors.
>>truncate table if exists t00807;
--- SQL operation complete.
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
index 9e6e464..f306ce3 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLcommon.cpp
@@ -8741,7 +8741,31 @@ void CmpSeabaseDDL::purgedataHbaseTable(DDLExpr * ddlExpr,
tableName.getSchemaNamePart().getInternalName(),
tableName.getCatalogNamePart().getInternalName());
cn.setSpecialType(purgedataTableName);
+
+ if (cn.isHive())
+ {
+ *CmpCommon::diags() << DgSqlCode(-3242)
+ << DgString0("Purgedata is not allowed for Hive tables. Use 'Truncate Table' command.");
+ return;
+ }
+
+ if (cn.isHbase())
+ {
+ *CmpCommon::diags() << DgSqlCode(-3242)
+ << DgString0("Purgedata is not allowed for HBase tables.");
+ return;
+ }
+
NATable *naTable = bindWA.getNATable(cn);
+
+ // if table doesn't exist and 'if exists' clause is specified, return.
+ if (ddlExpr->purgedataIfExists() && (! naTable))
+ {
+ bindWA.resetErrStatus();
+ CmpCommon::diags()->clear();
+ return;
+ }
+
if (naTable == NULL || bindWA.errStatus())
{
processReturn();
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
index 3e9082d..815381d 100644
--- a/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
+++ b/core/sql/sqlcomp/CmpSeabaseDDLtable.cpp
@@ -11351,81 +11351,6 @@ void CmpSeabaseDDL::regOrUnregNativeObject(
return;
}
-static short processHiveTruncate(StmtDDLonHiveObjects * hddl,
- NATable * naTable,
- NAString &extObjectName)
-{
- // A Hive table can be an External or Managed table.
- // Currently, an External Hive table cannot be truncated.
- // Maybe some future Hive version will allow that.
- // Temporarily change the table attribute to be Managed,
- // truncate the table and then change it back to be External.
- NABoolean tableWasAltered = FALSE;
- NAString alterStmt;
- if ((hddl->getOper() == StmtDDLonHiveObjects::TRUNCATE_) &&
- (naTable && naTable->isHiveExternalTable()))
- {
- // make the table managed table before truncate
- alterStmt = "alter table " + extObjectName + " set tblproperties ('EXTERNAL'='False')";
- if (HiveClient_JNI::executeHiveSQL(alterStmt.data()) != HVC_OK)
- {
- // alter failed
- *CmpCommon::diags() << DgSqlCode(-1214)
- << DgString0(getSqlJniErrorStr())
- << DgString1(hddl->getHiveDDL());
-
- return -1;
- }
-
- tableWasAltered = TRUE;
-
- // alter stmt to switch the table back to external type
- alterStmt = "alter table " + extObjectName + " set tblproperties ('EXTERNAL'='TRUE')";
- }
-
- // execute the hive DDL statement.
- if (HiveClient_JNI::executeHiveSQL(hddl->getHiveDDL().data()) != HVC_OK)
- {
- if (tableWasAltered)
- {
- // table was altered to Managed. Alter it back to External.
- if (HiveClient_JNI::executeHiveSQL(alterStmt.data()) != HVC_OK)
- {
- // alter itself failed. Return error.
- *CmpCommon::diags() << DgSqlCode(-1214)
- << DgString0(getSqlJniErrorStr())
- << DgString1(hddl->getHiveDDL());
-
- return -1;
- }
- }
-
- *CmpCommon::diags() << DgSqlCode(-1214)
- << DgString0(getSqlJniErrorStr())
- << DgString1(hddl->getHiveDDL());
-
- return -1;
- }
-
- if ((hddl->getOper() == StmtDDLonHiveObjects::TRUNCATE_) &&
- (naTable && naTable->isHiveExternalTable()) &&
- (tableWasAltered))
- {
- // table was altered to Managed. Alter it back to External.
- if (HiveClient_JNI::executeHiveSQL(alterStmt.data()) != HVC_OK)
- {
- // alter itself failed. Return error.
- *CmpCommon::diags() << DgSqlCode(-1214)
- << DgString0(getSqlJniErrorStr())
- << DgString1(hddl->getHiveDDL());
-
- return -1;
- }
- }
-
- return 0;
-}
-
static void processPassthruHiveDDL(StmtDDLonHiveObjects * hddl)
{
NAString hiveQuery(hddl->getHiveDDL());
@@ -11734,22 +11659,14 @@ void CmpSeabaseDDL::processDDLonHiveObjects(StmtDDLonHiveObjects * hddl,
}
} // register this object
- if (hddl->getOper() == StmtDDLonHiveObjects::TRUNCATE_)
+ // execute the hive DDL statement.
+ if (HiveClient_JNI::executeHiveSQL(hddl->getHiveDDL().data()) != HVC_OK)
{
- if (processHiveTruncate(hddl, naTable, extObjectName))
- goto label_error;
- }
- else
- {
- // execute the hive DDL statement.
- if (HiveClient_JNI::executeHiveSQL(hddl->getHiveDDL().data()) != HVC_OK)
- {
- *CmpCommon::diags() << DgSqlCode(-1214)
- << DgString0(getSqlJniErrorStr())
- << DgString1(hddl->getHiveDDL());
-
- goto label_error;
- }
+ *CmpCommon::diags() << DgSqlCode(-1214)
+ << DgString0(getSqlJniErrorStr())
+ << DgString1(hddl->getHiveDDL());
+
+ goto label_error;
}
endXnIfStartedHere(&cliInterface, xnWasStartedHere, 0);
@@ -11831,46 +11748,16 @@ NABoolean CmpSeabaseDDL::setupQueryTreeForHiveDDL(
}
NAString newHiveName;
- if (con.getCatalogNamePartAsAnsiString(TRUE).compareTo(HIVE_SYSTEM_CATALOG, NAString::ignoreCase) != 0)
+ newHiveName = ComConvertTrafHiveNameToNativeHiveName
+ (con.getCatalogNamePartAsAnsiString(TRUE),
+ con.getSchemaNamePartAsAnsiString(TRUE),
+ (type != StmtDDLonHiveObjects::SCHEMA_ ?
+ con.getObjectNamePartAsAnsiString(TRUE) : NAString("")));
+ if (newHiveName.isNull())
{
- // should never reach here. Parser should have validated that the
- // name is a hive name.
- // Throw an assertion if it does.
PARSERASSERT(1);
}
- // Original hive name specified in the query may have any of the following
- // forms after they are fully qualified:
- // hive.hive.t, hive.`default`.t, hive.hivesch.t, hive.hivesch
- // These names are valid in traf environment only and are used to determine
- // if hive ddl is being processed.
- //
- // Replace them in the query by equivalent hive names:
- // t, `default`.t, hivesch.t, hivesch
- //
- if (con.getSchemaNamePartAsAnsiString(TRUE).compareTo(HIVE_DEFAULT_SCHEMA_EXE, NAString::ignoreCase) == 0) // matches 'default'
- {
- newHiveName += NAString("`") + con.getSchemaNamePartAsAnsiString(TRUE) + "`";
- if (type != StmtDDLonHiveObjects::SCHEMA_)
- newHiveName += ".";
- }
- else if (con.getSchemaNamePartAsAnsiString(TRUE).compareTo(HIVE_SYSTEM_SCHEMA, NAString::ignoreCase) == 0) // matches 'hive'
- {
- // set fully qualified hive default schema name `default`
- newHiveName += NAString("`default`");
- if (type != StmtDDLonHiveObjects::SCHEMA_)
- newHiveName += ".";
- }
- else // user schema name
- {
- newHiveName += con.getSchemaNamePartAsAnsiString(1);
- if (type != StmtDDLonHiveObjects::SCHEMA_)
- newHiveName += ".";
- }
-
- if (type != StmtDDLonHiveObjects::SCHEMA_)
- newHiveName += con.getObjectNamePartAsAnsiString(TRUE);
-
// remove original name at hiveNamePos/hiveNameLen and replace with the
// newly constructed name.
if ((hiveDDL.length() > 0) && (hiveNameLen > 0))
@@ -11885,6 +11772,29 @@ NABoolean CmpSeabaseDDL::setupQueryTreeForHiveDDL(
hiveDDL.remove(hiveDDL.length()-1);
CmpCommon::diags()->clear();
+
+ DDLExpr * ddlExpr = NULL;
+ RelExpr * ddlExprRoot = NULL;
+ if (oper == StmtDDLonHiveObjects::TRUNCATE_)
+ {
+ NAString newHiveDDL("TRUNCATE TABLE ");
+ newHiveDDL += hiveDDL(hiveNamePos, hiveDDL.length() - hiveNamePos);
+ hiveDDL.clear();
+ hiveDDL = newHiveDDL;
+
+ CorrName cn(con.getObjectNamePartAsAnsiString(),
+ PARSERHEAP(),
+ con.getSchemaNamePartAsAnsiString(),
+ con.getCatalogNamePartAsAnsiString());
+ ExeUtilHiveTruncate * ht =
+ new (PARSERHEAP()) ExeUtilHiveTruncate
+ (cn, newHiveName, hiveDDL, PARSERHEAP());
+
+ if (ifExistsOrNotExists)
+ ht->setIfExist(TRUE);
+
+ ddlExprRoot = new(CmpCommon::statementHeap()) RelRoot(ht);
+ }
// Construct DDL expr tree for regular query or query
// explain/showplan/showshape/display.
@@ -11902,10 +11812,8 @@ NABoolean CmpSeabaseDDL::setupQueryTreeForHiveDDL(
// display:
// same as regular query with displayTree flag set in RelRoot
//
- DDLExpr * ddlExpr = NULL;
- RelExpr * ddlExprRoot = NULL;
- if (NOT ((hiveDDLInfo->essd_ == Parser::HiveDDLInfo::SHOWPLAN_) ||
- (hiveDDLInfo->essd_ == Parser::HiveDDLInfo::SHOWSHAPE_)))
+ else if (NOT ((hiveDDLInfo->essd_ == Parser::HiveDDLInfo::SHOWPLAN_) ||
+ (hiveDDLInfo->essd_ == Parser::HiveDDLInfo::SHOWSHAPE_)))
{
StmtDDLonHiveObjects * sdho =
new (PARSERHEAP()) StmtDDLonHiveObjects(oper, type,
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/sqlcomp/DefaultConstants.h
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/DefaultConstants.h b/core/sql/sqlcomp/DefaultConstants.h
index 748ace0..e5ce78a 100644
--- a/core/sql/sqlcomp/DefaultConstants.h
+++ b/core/sql/sqlcomp/DefaultConstants.h
@@ -1817,8 +1817,6 @@ enum DefaultConstants
GEN_UDRRS_SIZE_DOWN ,
GEN_UDRRS_SIZE_UP ,
- FAST_DELETE,
-
ALLOW_UNEXTERNALIZED_MAINTAIN_OPTIONS,
EXE_MEMORY_AVAILABLE_IN_MB, // Mem size (MB) in ESP available for BMOs
http://git-wip-us.apache.org/repos/asf/trafodion/blob/2bba19ff/core/sql/sqlcomp/nadefaults.cpp
----------------------------------------------------------------------
diff --git a/core/sql/sqlcomp/nadefaults.cpp b/core/sql/sqlcomp/nadefaults.cpp
index a0f245c..14b3ad9 100644
--- a/core/sql/sqlcomp/nadefaults.cpp
+++ b/core/sql/sqlcomp/nadefaults.cpp
@@ -1221,8 +1221,6 @@ SDDkwd__(EXE_DIAGNOSTIC_EVENTS, "OFF"),
DDkwd__(FAKE_VOLUME_ASSIGNMENTS, "OFF"),
DDui1__(FAKE_VOLUME_NUM_VOLUMES, "24"),
- DDkwd__(FAST_DELETE, "OFF"),
-
// upper and lower limit (2,10) must be in sync with error values in
//ExFastTransport.cpp
DDkwd__(FAST_EXTRACT_DIAGS, "OFF"),