[ASTERIXDB-3537][COMP] Follow-up patch to support truncate
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- prevent truncate on datasets with meta records
Ext-ref: MB-63067
Change-Id: I6940bafaddfef4d6e79093781dff506dc064cd0c
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19487
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index f8d0ff6..a3e467e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -222,8 +222,8 @@
stmt.getDataverseName(), stmt.getDatasetName(), sourceLoc);
List<List<String>> partitionKeys = targetDatasource.getDataset().getPrimaryKeys();
if (dataset.hasMetaPart()) {
- throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc, dataset.getDatasetName(),
- stmt.getKind() == Statement.Kind.LOAD ? "load" : "copy into");
+ throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc,
+ stmt.getKind() == Statement.Kind.LOAD ? "load" : "copy into", dataset.getDatasetName());
}
LoadableDataSource lds;
@@ -615,8 +615,8 @@
ICompiledDmlStatement stmt) throws AlgebricksException {
SourceLocation sourceLoc = stmt.getSourceLocation();
if (targetDatasource.getDataset().hasMetaPart()) {
- throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc,
- targetDatasource.getDataset().getDatasetName(), "delete from");
+ throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc, "delete from",
+ targetDatasource.getDataset().getDatasetName());
}
List<String> filterField = DatasetUtil.getFilterField(targetDatasource.getDataset());
@@ -645,8 +645,8 @@
IResultMetadata resultMetadata) throws AlgebricksException {
SourceLocation sourceLoc = stmt.getSourceLocation();
if (!targetDatasource.getDataset().allow(topOp, DatasetUtil.OP_UPSERT)) {
- throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc,
- targetDatasource.getDataset().getDatasetName(), "upsert into");
+ throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc, "upsert into",
+ targetDatasource.getDataset().getDatasetName());
}
ProjectOperator project = (ProjectOperator) topOp;
CompiledUpsertStatement compiledUpsert = (CompiledUpsertStatement) stmt;
@@ -657,8 +657,8 @@
if (targetDatasource.getDataset().hasMetaPart()) {
if (returnExpression != null) {
- throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc,
- targetDatasource.getDataset().getDatasetName(), "return expression");
+ throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc, "return expression",
+ targetDatasource.getDataset().getDatasetName());
}
List<LogicalVariable> metaAndKeysVars;
List<Mutable<ILogicalExpression>> metaAndKeysExprs;
@@ -768,8 +768,8 @@
ICompiledDmlStatement stmt, IResultMetadata resultMetadata) throws AlgebricksException {
SourceLocation sourceLoc = stmt.getSourceLocation();
if (targetDatasource.getDataset().hasMetaPart()) {
- throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc,
- targetDatasource.getDataset().getDatasetName(), "insert into");
+ throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc, "insert into",
+ targetDatasource.getDataset().getDatasetName());
}
List<String> filterField = DatasetUtil.getFilterField(targetDatasource.getDataset());
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 663876f..8d20010 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -2388,7 +2388,7 @@
IRequestParameters requestParameters) throws Exception {
TruncateDatasetStatement truncateStmt = (TruncateDatasetStatement) stmt;
SourceLocation sourceLoc = truncateStmt.getSourceLocation();
- String datasetName = truncateStmt.getDatasetName().getValue();
+ String datasetName = truncateStmt.getDatasetName();
metadataProvider.validateDatabaseObjectName(truncateStmt.getNamespace(), datasetName, sourceLoc);
Namespace stmtActiveNamespace = getActiveNamespace(truncateStmt.getNamespace());
DataverseName dataverseName = stmtActiveNamespace.getDataverseName();
@@ -2461,8 +2461,18 @@
metadataProvider.isUsingDatabase()));
}
}
+ if (ds.hasMetaPart()) {
+ throw new CompilationException(ErrorCode.ILLEGAL_DML_OPERATION, sourceLoc, "truncate",
+ ds.getDatasetFullyQualifiedName());
+ }
+ DatasetType dsType = ds.getDatasetType();
+ if (dsType != DatasetType.INTERNAL) {
+ String dsTypeName = dsType.toString().toLowerCase();
+ throw new CompilationException(ErrorCode.CANNOT_TRUNCATE_DATASET_TYPE, sourceLoc,
+ dsType == DatasetType.EXTERNAL ? dsTypeName + " collection" : dsTypeName,
+ ds.getDatasetFullyQualifiedName());
+ }
validateDatasetState(metadataProvider, ds, sourceLoc);
-
DatasetUtil.truncate(metadataProvider, ds);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/cloud_storage/RetryingQueryTranslator.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/cloud_storage/RetryingQueryTranslator.java
index af580b2..feff749 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/cloud_storage/RetryingQueryTranslator.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/cloud_storage/RetryingQueryTranslator.java
@@ -31,7 +31,6 @@
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.statement.LoadStatement;
import org.apache.asterix.lang.common.statement.TruncateDatasetStatement;
-import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.metadata.utils.Creator;
import org.apache.asterix.translator.IRequestParameters;
@@ -128,8 +127,8 @@
metadataProvider.getLocks().reset();
ex = e;
LoadStatement loadStmt = (LoadStatement) stmt;
- TruncateDatasetStatement truncateDatasetStatement = new TruncateDatasetStatement(
- loadStmt.getNamespace(), new Identifier(loadStmt.getDatasetName()), true);
+ TruncateDatasetStatement truncateDatasetStatement =
+ new TruncateDatasetStatement(loadStmt.getNamespace(), loadStmt.getDatasetName(), true);
super.handleDatasetTruncateStatement(metadataProvider, truncateDatasetStatement,
requestParameters);
metadataProvider.getLocks().reset();
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.01.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.01.ddl.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.01.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.01.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.02.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.02.update.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.02.update.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.02.update.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.03.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.03.query.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.03.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.03.query.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.04.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.04.query.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.04.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.04.query.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.05.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.05.query.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.05.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.05.query.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.06.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.06.ddl.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.06.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.06.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.07.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.07.query.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.07.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.07.query.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.08.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.08.query.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.08.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.08.query.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.09.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.09.query.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.09.query.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.09.query.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.10.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.10.ddl.sqlpp
similarity index 100%
rename from asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset.10.ddl.sqlpp
rename to asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.10.ddl.sqlpp
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
index 87baa0d..a8eec59 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -5273,7 +5273,7 @@
<test-case FilePath="dml">
<compilation-unit name="upsert-dataset-with-meta">
<output-dir compare="Text">upsert-dataset-with-meta</output-dir>
- <expected-error>upsert into dataset is not supported on datasets with meta records</expected-error>
+ <expected-error>Cannot use upsert into with 'DatasetWithMeta'. upsert into is not supported on datasets with meta records</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="dml">
@@ -5299,13 +5299,13 @@
<test-case FilePath="dml">
<compilation-unit name="delete-dataset-with-meta">
<output-dir compare="Text">delete-dataset-with-meta</output-dir>
- <expected-error>delete from dataset is not supported on datasets with meta records</expected-error>
+ <expected-error>Cannot use delete from with 'DatasetWithMeta'. delete from is not supported on datasets with meta records</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="dml">
<compilation-unit name="insert-dataset-with-meta">
<output-dir compare="Text">insert-dataset-with-meta</output-dir>
- <expected-error>insert into dataset is not supported on datasets with meta records</expected-error>
+ <expected-error>Cannot use insert into with 'DatasetWithMeta'. insert into is not supported on datasets with meta records</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="dml">
@@ -14154,7 +14154,7 @@
<test-case FilePath="load">
<compilation-unit name="dataset-with-meta">
<output-dir compare="Text">dataset-with-meta</output-dir>
- <expected-error>ASX1184: Compilation error: DatasetWithMeta: load dataset is not supported on datasets with meta records (in line 27, at column 1)</expected-error>
+ <expected-error>Cannot use load with 'DatasetWithMeta'. load is not supported on datasets with meta records (in line 27, at column 1)</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="load">
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index d06a9e5..b003b92 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -320,6 +320,7 @@
FAILED_EXTERNAL_CROSS_ACCOUNT_AUTHENTICATION(1213),
LONG_LIVED_CREDENTIALS_NEEDED_TO_ASSUME_ROLE(1214),
TEMPORARY_CREDENTIALS_CANNOT_BE_USED_TO_ASSUME_ROLE(1215),
+ CANNOT_TRUNCATE_DATASET_TYPE(1216),
// Feed errors
DATAFLOW_ILLEGAL_STATE(3001),
diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index c1ffd13..baa4213 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -290,7 +290,7 @@
1181 = Unsupported computed field type: '%1$s'
1182 = Failed to calculate computed fields: %1$s
1183 = In the file '%1$s' the expected type for the '%2$s' field is '%3$s' but the value '%4$s' was found instead.
-1184 = Compilation error: %1$s: %2$s dataset is not supported on datasets with meta records
+1184 = Cannot use %1$s with '%2$s'. %1$s is not supported on datasets with meta records
1185 = Cannot find database with name %1$s
1186 = A database with this name %1$s already exists
1187 = Cannot drop database: %1$s %2$s being used by %3$s %4$s
@@ -322,6 +322,7 @@
1213 = Failed to perform cross-account authentication. Encountered error : '%1$s'
1214 = Long-lived credentials are required to assume a role
1215 = Temporary credentials cannot be used to assume a role
+1216 = Cannot truncate %1$s '%2$s'
# Feed Errors
3001 = Illegal state.
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TruncateDatasetStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TruncateDatasetStatement.java
index 7367f1d..8e19d94 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TruncateDatasetStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TruncateDatasetStatement.java
@@ -23,15 +23,14 @@
import org.apache.asterix.common.metadata.Namespace;
import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
-import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
public class TruncateDatasetStatement extends AbstractStatement {
- private final Namespace namespace;
- private final Identifier datasetName;
+ private Namespace namespace;
+ private String datasetName;
private final boolean ifExists;
- public TruncateDatasetStatement(Namespace namespace, Identifier datasetName, boolean ifExists) {
+ public TruncateDatasetStatement(Namespace namespace, String datasetName, boolean ifExists) {
this.namespace = namespace;
this.datasetName = datasetName;
this.ifExists = ifExists;
@@ -46,11 +45,15 @@
return namespace;
}
+ public String getDatabaseName() {
+ return namespace == null ? null : namespace.getDatabaseName();
+ }
+
public DataverseName getDataverseName() {
return namespace == null ? null : namespace.getDataverseName();
}
- public Identifier getDatasetName() {
+ public String getDatasetName() {
return datasetName;
}
@@ -58,6 +61,14 @@
return ifExists;
}
+ public void setNamespace(Namespace namespace) {
+ this.namespace = namespace;
+ }
+
+ public void setDatasetName(String datasetName) {
+ this.datasetName = datasetName;
+ }
+
@Override
public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException {
return visitor.visit(this, arg);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppStatementRewriter.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppStatementRewriter.java
index 30b20bb..e7c38e2 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppStatementRewriter.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppStatementRewriter.java
@@ -36,6 +36,7 @@
case UPSERT:
case DELETE:
case COPY_TO:
+ case TRUNCATE:
return true;
default:
return false;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSynonymRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSynonymRewriteVisitor.java
index 7c1c112..d6f10b3 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSynonymRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSynonymRewriteVisitor.java
@@ -26,6 +26,7 @@
import org.apache.asterix.lang.common.statement.DeleteStatement;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.LoadStatement;
+import org.apache.asterix.lang.common.statement.TruncateDatasetStatement;
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppAstVisitor;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -33,7 +34,7 @@
import org.apache.hyracks.api.exceptions.SourceLocation;
/**
- * This class resolves dataset synonyms in load/insert/upsert/delete statements
+ * This class resolves dataset synonyms in load/insert/upsert/delete/truncate statements
*/
public class SqlppSynonymRewriteVisitor extends AbstractSqlppAstVisitor<Void, MetadataProvider> {
@@ -78,6 +79,18 @@
return null;
}
+ @Override
+ public Void visit(TruncateDatasetStatement truncateStmt, MetadataProvider mp) throws CompilationException {
+ Quadruple<DataverseName, String, Boolean, String> dsName =
+ resolveDatasetNameUsingSynonyms(mp, truncateStmt.getDatabaseName(), truncateStmt.getDataverseName(),
+ truncateStmt.getDatasetName(), false, truncateStmt.getSourceLocation());
+ if (dsName != null) {
+ truncateStmt.setNamespace(new Namespace(dsName.getFourth(), dsName.getFirst()));
+ truncateStmt.setDatasetName(dsName.getSecond());
+ }
+ return null;
+ }
+
private Quadruple<DataverseName, String, Boolean, String> resolveDatasetNameUsingSynonyms(
MetadataProvider metadataProvider, String databaseName, DataverseName dataverseName, String datasetName,
boolean includingViews, SourceLocation sourceLoc) throws CompilationException {
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index 31641a7..0d0b694 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -2388,7 +2388,7 @@
TruncateDatasetStatement stmt = null;
}
{
- Dataset() stmt = TruncateDatasetSpecification(startStmtToken)
+ DatasetToken() stmt = TruncateDatasetSpecification(startStmtToken)
{
return stmt;
}
@@ -2402,7 +2402,7 @@
{
pairId = QualifiedName() ifExists = IfExists()
{
- TruncateDatasetStatement stmt = new TruncateDatasetStatement(pairId.first, pairId.second, ifExists);
+ TruncateDatasetStatement stmt = new TruncateDatasetStatement(pairId.first, pairId.second.getValue(), ifExists);
return addSourceLocation(stmt, startStmtToken);
}
}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
index 8bcf7a2..2551b86 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java
@@ -768,7 +768,9 @@
hcc = metadataProvider.getApplicationContext().getHcc();
JobUtils.runJobIfActive(hcc, job, true);
} else {
- throw new IllegalArgumentException("Cannot truncate a non-internal dataset.");
+ // check should have been done by caller
+ throw new IllegalArgumentException(
+ "Cannot truncate a non-internal dataset " + ds.getDatasetFullyQualifiedName());
}
}