>From Hussain Towaileb <[email protected]>:
Hussain Towaileb has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18146 )
Change subject: [ASTERIXDB-3347][COMP] Refactor COPY TO to support different
types of write destinations
......................................................................
[ASTERIXDB-3347][COMP] Refactor COPY TO to support different types of write
destinations
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
This change refactors the COPY TO KV code
to allow for easier extendability for supporting
other types of destinations to write to.
Change-Id: Id90a30c1e9f41ca82ef28f6edd0569a69002572c
---
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToStatement.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppContainsExpressionVisitor.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppCopyToRewriteVisitor.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
M asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/CompiledStatements.java
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
M
asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckDatasetOnlyResolutionVisitor.java
A
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToCloudStoreStatement.java
M
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java
18 files changed, 209 insertions(+), 130 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/46/18146/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/CompiledStatements.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/CompiledStatements.java
index 0ff0b72..2c21c4c 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/CompiledStatements.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/CompiledStatements.java
@@ -27,7 +27,7 @@
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.clause.OrderbyClause;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.ExternalDetailsDecl;
import org.apache.asterix.lang.common.statement.Query;
import org.apache.asterix.metadata.entities.Dataset;
@@ -591,7 +591,7 @@
}
}
- public static class CompiledCopyToStatement extends
AbstractCompiledStatement {
+ public static class CompileCopyToCloudStoreStatement extends
AbstractCompiledStatement {
private final Query query;
private final VariableExpr sourceVariable;
private final String adapter;
@@ -603,7 +603,7 @@
private final List<OrderbyClause.OrderModifier> orderByModifiers;
private final List<OrderbyClause.NullOrderModifier>
orderByNullModifierList;
- public CompiledCopyToStatement(CopyToStatement copyToStatement) {
+ public CompileCopyToCloudStoreStatement(CopyToCloudStoreStatement
copyToStatement) {
this.query = copyToStatement.getQuery();
this.sourceVariable = copyToStatement.getSourceVariable();
ExternalDetailsDecl eddDecl =
copyToStatement.getExternalDetailsDecl();
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 7dd0217..8e846b0 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
@@ -104,6 +104,7 @@
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.IAType;
import org.apache.asterix.om.utils.ConstantExpressionUtil;
+import
org.apache.asterix.translator.CompiledStatements.CompileCopyToCloudStoreStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledCopyFromFileStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
@@ -363,7 +364,7 @@
private ILogicalPlan translateCopyTo(Query expr,
CompiledStatements.ICompiledStatement stmt,
IResultMetadata resultMetadata) throws AlgebricksException {
- CompiledStatements.CompiledCopyToStatement copyTo =
(CompiledStatements.CompiledCopyToStatement) stmt;
+ CompileCopyToCloudStoreStatement copyTo =
(CompileCopyToCloudStoreStatement) stmt;
MutableObject<ILogicalOperator> base = new MutableObject<>(new
EmptyTupleSourceOperator());
Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, base);
ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new
ArrayList<>();
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 30c7127..ab90fea 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
@@ -125,6 +125,7 @@
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
import org.apache.asterix.lang.common.statement.CopyFromStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.CopyToStatement;
import org.apache.asterix.lang.common.statement.CreateAdapterStatement;
import org.apache.asterix.lang.common.statement.CreateDatabaseStatement;
@@ -225,7 +226,7 @@
import
org.apache.asterix.transaction.management.service.transaction.GlobalTxInfo;
import org.apache.asterix.translator.AbstractLangTranslator;
import org.apache.asterix.translator.ClientRequest;
-import org.apache.asterix.translator.CompiledStatements;
+import
org.apache.asterix.translator.CompiledStatements.CompileCopyToCloudStoreStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledCopyFromFileStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledDeleteStatement;
import
org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement;
@@ -4026,7 +4027,14 @@
IHyracksClientConnection hcc, IResultSet resultSet, ResultDelivery
resultDelivery,
ResultMetadata outMetadata, IRequestParameters requestParameters,
Map<String, IAObject> stmtParams,
Stats stats) throws Exception {
- CopyToStatement copyTo = (CopyToStatement) stmt;
+ CopyToStatement copyTo;
+ if (stmt instanceof CopyToCloudStoreStatement) {
+ copyTo = (CopyToCloudStoreStatement) stmt;
+ } else {
+ // TODO(htowaileb)
+ throw new IllegalStateException("NYI");
+ }
+
final IRequestTracker requestTracker = appCtx.getRequestTracker();
final ClientRequest clientRequest =
(ClientRequest)
requestTracker.get(requestParameters.getRequestReference().getUuid());
@@ -4066,8 +4074,8 @@
Pair<IReturningStatement, Integer> rewrittenResult =
apiFramework.reWriteQuery(langRewritingContext,
copyTo, sessionOutput, true, true,
externalVars.keySet());
- CompiledStatements.CompiledCopyToStatement
compiledCopyToStatement =
- new CompiledStatements.CompiledCopyToStatement(copyTo);
+ CompileCopyToCloudStoreStatement compiledCopyToStatement =
+ new
CompileCopyToCloudStoreStatement((CopyToCloudStoreStatement) copyTo);
// Query Compilation (happens under the same ongoing metadata
transaction)
final JobSpecification jobSpec =
apiFramework.compileQuery(hcc, metadataProvider, copyTo.getQuery(),
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToCloudStoreStatement.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToCloudStoreStatement.java
new file mode 100644
index 0000000..183a0d2
--- /dev/null
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToCloudStoreStatement.java
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.statement;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.metadata.Namespace;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.IReturningStatement;
+import org.apache.asterix.lang.common.clause.OrderbyClause;
+import org.apache.asterix.lang.common.expression.LiteralExpr;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.literal.StringLiteral;
+import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+
+public class CopyToCloudStoreStatement extends CopyToStatement implements
IReturningStatement {
+ private final Map<Integer, VariableExpr> partitionsVariables;
+ private final List<OrderbyClause.OrderModifier> orderByModifiers;
+ private final List<OrderbyClause.NullOrderModifier>
orderByNullModifierList;
+
+ private List<Expression> pathExpressions;
+
+ private List<Expression> partitionExpressions;
+ private List<Expression> orderByList;
+
+ public CopyToCloudStoreStatement(Namespace namespace, String datasetName,
Query query, VariableExpr sourceVariable,
+ ExternalDetailsDecl externalDetailsDecl, List<Expression>
pathExpressions,
+ List<Expression> partitionExpressions, Map<Integer, VariableExpr>
partitionsVariables,
+ List<Expression> orderbyList, List<OrderbyClause.OrderModifier>
orderByModifiers,
+ List<OrderbyClause.NullOrderModifier> orderByNullModifierList, int
varCounter) {
+ super(namespace, datasetName, query, sourceVariable, varCounter,
externalDetailsDecl);
+ this.pathExpressions = pathExpressions;
+ this.partitionExpressions = partitionExpressions;
+ this.partitionsVariables = partitionsVariables;
+ this.orderByList = orderbyList;
+ this.orderByModifiers = orderByModifiers;
+ this.orderByNullModifierList = orderByNullModifierList;
+
+ if (pathExpressions.isEmpty()) {
+ // Ensure path expressions to have at least an empty string
+ pathExpressions.add(new LiteralExpr(new StringLiteral("")));
+ }
+ }
+
+ @Override
+ public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws
CompilationException {
+ return visitor.visit(this, arg);
+ }
+
+ public List<Expression> getPathExpressions() {
+ return pathExpressions;
+ }
+
+ public void setPathExpressions(List<Expression> pathExpressions) {
+ if (pathExpressions.isEmpty()) {
+ pathExpressions.add(new LiteralExpr(new StringLiteral("")));
+ }
+ this.pathExpressions = pathExpressions;
+ }
+
+ public List<Expression> getPartitionExpressions() {
+ return partitionExpressions;
+ }
+
+ public void setPartitionExpressions(List<Expression> partitionExpressions)
{
+ this.partitionExpressions = partitionExpressions;
+ }
+
+ public Map<Integer, VariableExpr> getPartitionsVariables() {
+ return partitionsVariables;
+ }
+
+ public List<Expression> getOrderByList() {
+ return orderByList;
+ }
+
+ public void setOrderByList(List<Expression> orderbyList) {
+ this.orderByList = orderbyList;
+ }
+
+ public List<OrderbyClause.OrderModifier> getOrderByModifiers() {
+ return orderByModifiers;
+ }
+
+ public List<OrderbyClause.NullOrderModifier> getOrderByNullModifierList() {
+ return orderByNullModifierList;
+ }
+
+ public boolean hasOverClause() {
+ return hasPartitionClause() || hasOrderClause();
+ }
+
+ public boolean hasPartitionClause() {
+ return !partitionExpressions.isEmpty();
+ }
+
+ public boolean hasOrderClause() {
+ return !orderByList.isEmpty();
+ }
+
+ @Override
+ public List<Expression> getDirectlyEnclosedExpressions() {
+ List<Expression> topLevelExpressions = new ArrayList<>();
+ topLevelExpressions.add(query.getBody());
+ topLevelExpressions.addAll(pathExpressions);
+ topLevelExpressions.addAll(partitionExpressions);
+ topLevelExpressions.addAll(orderByList);
+ return topLevelExpressions;
+ }
+
+}
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToStatement.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToStatement.java
index dbe7b35..f0ad3f4 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToStatement.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CopyToStatement.java
@@ -22,62 +22,33 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
-import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.metadata.Namespace;
import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.IReturningStatement;
-import org.apache.asterix.lang.common.clause.OrderbyClause;
-import org.apache.asterix.lang.common.expression.LiteralExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.literal.StringLiteral;
-import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class CopyToStatement extends AbstractStatement implements
IReturningStatement {
- private final String datasetName;
- private final VariableExpr sourceVariable;
+public abstract class CopyToStatement extends AbstractStatement implements
IReturningStatement {
+ // TODO(htowaileb): consider replacing this to just a map
private final ExternalDetailsDecl externalDetailsDecl;
- private final Map<Integer, VariableExpr> partitionsVariables;
- private final List<OrderbyClause.OrderModifier> orderByModifiers;
- private final List<OrderbyClause.NullOrderModifier>
orderByNullModifierList;
- private Namespace namespace;
- private Query query;
- private List<Expression> pathExpressions;
+ final String datasetName;
+ final VariableExpr sourceVariable;
- private List<Expression> partitionExpressions;
- private List<Expression> orderByList;
- private int varCounter;
+ Namespace namespace;
+ Query query;
+
+ int varCounter;
public CopyToStatement(Namespace namespace, String datasetName, Query
query, VariableExpr sourceVariable,
- ExternalDetailsDecl externalDetailsDecl, List<Expression>
pathExpressions,
- List<Expression> partitionExpressions, Map<Integer, VariableExpr>
partitionsVariables,
- List<Expression> orderbyList, List<OrderbyClause.OrderModifier>
orderByModifiers,
- List<OrderbyClause.NullOrderModifier> orderByNullModifierList, int
varCounter) {
+ int varCounter, ExternalDetailsDecl externalDetailsDecl) {
this.namespace = namespace;
this.datasetName = datasetName;
this.query = query;
this.sourceVariable = sourceVariable;
- this.externalDetailsDecl = externalDetailsDecl;
- this.pathExpressions = pathExpressions;
- this.partitionExpressions = partitionExpressions;
- this.partitionsVariables = partitionsVariables;
- this.orderByList = orderbyList;
- this.orderByModifiers = orderByModifiers;
- this.orderByNullModifierList = orderByNullModifierList;
this.varCounter = varCounter;
-
- if (pathExpressions.isEmpty()) {
- // Ensure path expressions to have at least an empty string
- pathExpressions.add(new LiteralExpr(new StringLiteral("")));
- }
- }
-
- @Override
- public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws
CompilationException {
- return visitor.visit(this, arg);
+ this.externalDetailsDecl = externalDetailsDecl;
}
@Override
@@ -114,61 +85,6 @@
return sourceVariable;
}
- public ExternalDetailsDecl getExternalDetailsDecl() {
- return externalDetailsDecl;
- }
-
- public List<Expression> getPathExpressions() {
- return pathExpressions;
- }
-
- public void setPathExpressions(List<Expression> pathExpressions) {
- if (pathExpressions.isEmpty()) {
- pathExpressions.add(new LiteralExpr(new StringLiteral("")));
- }
- this.pathExpressions = pathExpressions;
- }
-
- public List<Expression> getPartitionExpressions() {
- return partitionExpressions;
- }
-
- public void setPartitionExpressions(List<Expression> partitionExpressions)
{
- this.partitionExpressions = partitionExpressions;
- }
-
- public Map<Integer, VariableExpr> getPartitionsVariables() {
- return partitionsVariables;
- }
-
- public List<Expression> getOrderByList() {
- return orderByList;
- }
-
- public void setOrderByList(List<Expression> orderbyList) {
- this.orderByList = orderbyList;
- }
-
- public List<OrderbyClause.OrderModifier> getOrderByModifiers() {
- return orderByModifiers;
- }
-
- public List<OrderbyClause.NullOrderModifier> getOrderByNullModifierList() {
- return orderByNullModifierList;
- }
-
- public boolean hasOverClause() {
- return hasPartitionClause() || hasOrderClause();
- }
-
- public boolean hasPartitionClause() {
- return !partitionExpressions.isEmpty();
- }
-
- public boolean hasOrderClause() {
- return !orderByList.isEmpty();
- }
-
@Override
public int getVarCounter() {
return varCounter;
@@ -179,6 +95,10 @@
this.varCounter = varCounter;
}
+ public ExternalDetailsDecl getExternalDetailsDecl() {
+ return externalDetailsDecl;
+ }
+
@Override
public boolean isTopLevel() {
return true;
@@ -188,9 +108,6 @@
public List<Expression> getDirectlyEnclosedExpressions() {
List<Expression> topLevelExpressions = new ArrayList<>();
topLevelExpressions.add(query.getBody());
- topLevelExpressions.addAll(pathExpressions);
- topLevelExpressions.addAll(partitionExpressions);
- topLevelExpressions.addAll(orderByList);
return topLevelExpressions;
}
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
index 8c7b915..034a823 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/AbstractInlineUdfsVisitor.java
@@ -52,7 +52,7 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
import org.apache.asterix.lang.common.rewrites.VariableSubstitutionEnvironment;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
@@ -283,7 +283,7 @@
}
@Override
- public Boolean visit(CopyToStatement stmtCopy, Void arg) throws
CompilationException {
+ public Boolean visit(CopyToCloudStoreStatement stmtCopy, Void arg) throws
CompilationException {
boolean changed = false;
Pair<Boolean, Expression> queryBody =
inlineUdfsAndViewsInExpr(stmtCopy.getBody());
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
index 3091b30..609d687 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
@@ -71,7 +71,7 @@
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
import org.apache.asterix.lang.common.statement.CopyFromStatement;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.CreateAdapterStatement;
import org.apache.asterix.lang.common.statement.CreateDatabaseStatement;
import org.apache.asterix.lang.common.statement.CreateDataverseStatement;
@@ -560,7 +560,7 @@
}
@Override
- public Void visit(CopyToStatement cto, Integer step) throws
CompilationException {
+ public Void visit(CopyToCloudStoreStatement cto, Integer step) throws
CompilationException {
out.println(skip(step) + "copy ");
if (cto.getQuery() != null) {
out.print("(");
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
index febc9d8..de77b52 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/GatherFunctionCallsVisitor.java
@@ -48,7 +48,7 @@
import org.apache.asterix.lang.common.expression.TypeReferenceExpression;
import org.apache.asterix.lang.common.expression.UnaryExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
import org.apache.asterix.lang.common.struct.Identifier;
@@ -250,7 +250,7 @@
}
@Override
- public Void visit(CopyToStatement stmtCopy, Void arg) throws
CompilationException {
+ public Void visit(CopyToCloudStoreStatement stmtCopy, Void arg) throws
CompilationException {
stmtCopy.getQuery().accept(this, arg);
acceptList(stmtCopy.getPathExpressions(), arg);
acceptList(stmtCopy.getPartitionExpressions(), arg);
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java
index 0118f4c..9d71b3a 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/AbstractQueryExpressionVisitor.java
@@ -30,7 +30,7 @@
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
import org.apache.asterix.lang.common.statement.CopyFromStatement;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.CreateAdapterStatement;
import org.apache.asterix.lang.common.statement.CreateDatabaseStatement;
import org.apache.asterix.lang.common.statement.CreateDataverseStatement;
@@ -126,7 +126,7 @@
}
@Override
- public R visit(CopyToStatement stmtCopy, T arg) throws
CompilationException {
+ public R visit(CopyToCloudStoreStatement stmtCopy, T arg) throws
CompilationException {
return null;
}
diff --git
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java
index 1ed9b3c..1e1813d 100644
---
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java
+++
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/base/ILangVisitor.java
@@ -48,7 +48,7 @@
import org.apache.asterix.lang.common.statement.CompactStatement;
import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
import org.apache.asterix.lang.common.statement.CopyFromStatement;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.CreateAdapterStatement;
import org.apache.asterix.lang.common.statement.CreateDatabaseStatement;
import org.apache.asterix.lang.common.statement.CreateDataverseStatement;
@@ -107,7 +107,7 @@
R visit(CopyFromStatement stmtCopy, T arg) throws CompilationException;
- R visit(CopyToStatement cto, T arg) throws CompilationException;
+ R visit(CopyToCloudStoreStatement cto, T arg) throws CompilationException;
R visit(DropDatasetStatement del, T arg) throws CompilationException;
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppCopyToRewriteVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppCopyToRewriteVisitor.java
index d15eb2d..720753a 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppCopyToRewriteVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppCopyToRewriteVisitor.java
@@ -24,6 +24,7 @@
import org.apache.asterix.common.metadata.DataverseName;
import org.apache.asterix.lang.common.expression.CallExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.CopyToStatement;
import org.apache.asterix.lang.common.statement.Query;
import org.apache.asterix.lang.common.util.FunctionUtil;
@@ -42,7 +43,8 @@
public static final SqlppCopyToRewriteVisitor INSTANCE = new
SqlppCopyToRewriteVisitor();
@Override
- public Void visit(CopyToStatement stmtCopy, MetadataProvider
metadataProvider) throws CompilationException {
+ public Void visit(CopyToCloudStoreStatement stmtCopy, MetadataProvider
metadataProvider)
+ throws CompilationException {
if (stmtCopy.getNamespace() == null) {
stmtCopy.setNamespace(metadataProvider.getDefaultNamespace());
}
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckDatasetOnlyResolutionVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckDatasetOnlyResolutionVisitor.java
index ad4385c..150f550 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckDatasetOnlyResolutionVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckDatasetOnlyResolutionVisitor.java
@@ -39,7 +39,7 @@
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.UnaryExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
@@ -107,7 +107,7 @@
}
@Override
- public Boolean visit(CopyToStatement stmtCopy, VariableExpr arg) throws
CompilationException {
+ public Boolean visit(CopyToCloudStoreStatement stmtCopy, VariableExpr arg)
throws CompilationException {
return contains(stmtCopy.getQuery(), arg);
}
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
index 1863956..8c0be19 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/CheckSubqueryVisitor.java
@@ -44,7 +44,7 @@
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.UnaryExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.Query;
import org.apache.asterix.lang.common.struct.Identifier;
@@ -314,7 +314,7 @@
}
@Override
- public Boolean visit(CopyToStatement stmtCopy, ILangExpression arg) throws
CompilationException {
+ public Boolean visit(CopyToCloudStoreStatement stmtCopy, ILangExpression
arg) throws CompilationException {
return stmtCopy.getQuery().accept(this, arg) ||
visitExprList(stmtCopy.getPathExpressions(), arg)
|| visitExprList(stmtCopy.getPartitionExpressions(), arg)
|| visitExprList(stmtCopy.getOrderByList(), arg);
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
index bfa5c91..80a30f7 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
@@ -47,7 +47,7 @@
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.UnaryExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.Query;
import org.apache.asterix.lang.common.struct.Identifier;
@@ -519,7 +519,8 @@
}
@Override
- public Void visit(CopyToStatement stmtCopy, Collection<VariableExpr>
freeVars) throws CompilationException {
+ public Void visit(CopyToCloudStoreStatement stmtCopy,
Collection<VariableExpr> freeVars)
+ throws CompilationException {
stmtCopy.getBody().accept(this, freeVars);
visit(stmtCopy.getPathExpressions(), freeVars);
visit(stmtCopy.getPartitionExpressions(), freeVars);
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppContainsExpressionVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppContainsExpressionVisitor.java
index e4117f0..90de180 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppContainsExpressionVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppContainsExpressionVisitor.java
@@ -43,7 +43,7 @@
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.UnaryExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.struct.QuantifiedPair;
import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
@@ -309,7 +309,7 @@
}
@Override
- public Boolean visit(CopyToStatement stmtCopy, T arg) throws
CompilationException {
+ public Boolean visit(CopyToCloudStoreStatement stmtCopy, T arg) throws
CompilationException {
return stmtCopy.accept(this, arg) ||
visitExprList(stmtCopy.getPathExpressions(), arg)
|| visitExprList(stmtCopy.getPartitionExpressions(), arg)
|| visitExprList(stmtCopy.getOrderByList(), arg);
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
index e3e2484..fc038ed 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
@@ -42,7 +42,7 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.parser.ScopeChecker;
import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
@@ -414,7 +414,7 @@
}
@Override
- public Expression visit(CopyToStatement stmtCopy, ILangExpression arg)
throws CompilationException {
+ public Expression visit(CopyToCloudStoreStatement stmtCopy,
ILangExpression arg) throws CompilationException {
stmtCopy.setBody(stmtCopy.getBody().accept(this, stmtCopy));
// Scope that only contains the source variable
diff --git
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
index f3d2675..77932be 100644
---
a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
+++
b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
@@ -45,7 +45,7 @@
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.expression.UnaryExpr;
import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.statement.CopyToStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.FunctionDecl;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.Query;
@@ -359,7 +359,7 @@
}
@Override
- public Expression visit(CopyToStatement stmtCopy, ILangExpression arg)
throws CompilationException {
+ public Expression visit(CopyToCloudStoreStatement stmtCopy,
ILangExpression arg) throws CompilationException {
stmtCopy.setBody(stmtCopy.getBody().accept(this, arg));
stmtCopy.setPathExpressions(visit(stmtCopy.getPathExpressions(), arg));
stmtCopy.setPartitionExpressions(visit(stmtCopy.getPartitionExpressions(),
arg));
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index a81807c..159a71b 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -167,6 +167,7 @@
import org.apache.asterix.lang.common.statement.InternalDetailsDecl;
import org.apache.asterix.lang.common.statement.LoadStatement;
import org.apache.asterix.lang.common.statement.CopyFromStatement;
+import org.apache.asterix.lang.common.statement.CopyToCloudStoreStatement;
import org.apache.asterix.lang.common.statement.CopyToStatement;
import org.apache.asterix.lang.common.statement.NodeGroupDropStatement;
import org.apache.asterix.lang.common.statement.NodegroupDecl;
@@ -2868,12 +2869,13 @@
VariableExpr alias = null;
}
{
+ // TODO check if the LOOKAHEAD below is needed
<COPY>
( LOOKAHEAD(1) <INTO> { startToken = token; }
nameComponents = QualifiedName()
((<AS>)? (typeExpr =
DatasetTypeSpecification(RecordTypeDefinition.RecordKind.OPEN)))?
stmt = CopyFromStatement(startToken, nameComponents, typeExpr)
- | LOOKAHEAD(1) <LEFTPAREN> { startToken = token; } query = Query()
<RIGHTPAREN> (<AS>)? alias = Variable() stmt = CopyToStatement(startToken,
nameComponents, query, alias)
+ | LOOKAHEAD(1) <LEFTPAREN> { startToken = token; } query = Query()
<RIGHTPAREN> (<AS>)? alias = Variable() stmt = CopyToStatement(startToken,
nameComponents, query, alias)
| { startToken = token; } nameComponents = QualifiedName()
(<AS>)? (typeExpr =
DatasetTypeSpecification(RecordTypeDefinition.RecordKind.OPEN) | alias =
Variable())?
(stmt = CopyFromStatement(startToken, nameComponents, typeExpr) | stmt =
CopyToStatement(startToken, nameComponents, query, alias))
@@ -2942,7 +2944,7 @@
usedAlias = new
VariableExpr(SqlppVariableUtil.toInternalVariableIdentifier(datasetName));
}
- CopyToStatement stmt = new CopyToStatement(namespace, datasetName,
query, usedAlias, edd, pathExprs,
+ CopyToStatement stmt = new CopyToCloudStoreStatement(namespace,
datasetName, query, usedAlias, edd, pathExprs,
partitionExprs, partitionVarExprs, orderbyList,
orderbyModifierList, orderbyNullModifierList, getVarCounter());
return addSourceLocation(stmt, startToken);
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18146
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: Id90a30c1e9f41ca82ef28f6edd0569a69002572c
Gerrit-Change-Number: 18146
Gerrit-PatchSet: 1
Gerrit-Owner: Hussain Towaileb <[email protected]>
Gerrit-MessageType: newchange