>From Ali Alsuliman <[email protected]>: Ali Alsuliman has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19487 )
( 3 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )Change subject: [ASTERIXDB-3537][COMP] Follow-up patch to support truncate ...................................................................... [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 <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> Reviewed-by: Murtadha Hubail <[email protected]> --- R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.08.query.sqlpp M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.09.query.sqlpp R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.01.ddl.sqlpp M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TruncateDatasetStatement.java R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.10.ddl.sqlpp M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/DatasetUtil.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.07.query.sqlpp M asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.02.update.sqlpp M asterixdb/asterix-app/src/test/java/org/apache/asterix/test/cloud_storage/RetryingQueryTranslator.java M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppStatementRewriter.java M asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSynonymRewriteVisitor.java R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.05.query.sqlpp M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.06.ddl.sqlpp R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.04.query.sqlpp M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties R asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dml/truncate-dataset-1/truncate-dataset-1.03.query.sqlpp 21 files changed, 90 insertions(+), 29 deletions(-) Approvals: Murtadha Hubail: Looks good to me, approved Ali Alsuliman: Looks good to me, but someone else must approve Jenkins: Verified; Verified 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()); } } -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19487 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: I6940bafaddfef4d6e79093781dff506dc064cd0c Gerrit-Change-Number: 19487 Gerrit-PatchSet: 5 Gerrit-Owner: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Murtadha Hubail <[email protected]> Gerrit-Reviewer: Peeyush Gupta <[email protected]> Gerrit-MessageType: merged
