[ASTERIXDB-2393][COMP][RT] Add source location to error messages
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
- Add source locations to compiler and runtime error messages
- Add source location enforcement to the test framework
and enable it for SqlppExecutionTest
Change-Id: Ie279ce345d1edcb5dea8e55cdb0233151c7bfd66
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2659
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <tillw@apache.org>
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java
index 724b284..15267aa 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/extension/ExtensionStatement.java
@@ -18,7 +18,7 @@
*/
package org.apache.asterix.algebra.extension;
-import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.translator.IRequestParameters;
import org.apache.asterix.translator.IStatementExecutor;
@@ -29,7 +29,7 @@
/**
* An interface that provides an extension mechanism to extend a language with additional statements
*/
-public abstract class ExtensionStatement implements Statement {
+public abstract class ExtensionStatement extends AbstractStatement {
@Override
public final Kind getKind() {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java
index 39d33f0..94d3461 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/BTreeSearchPOperator.java
@@ -139,9 +139,11 @@
jobGenParams.getIndexName(), lowKeyIndexes, highKeyIndexes, jobGenParams.isLowKeyInclusive(),
jobGenParams.isHighKeyInclusive(), propagateFilter, minFilterFieldIndexes, maxFilterFieldIndexes,
tupleFilterFactory, outputLimit, unnestMap.getGenerateCallBackProceedResultVar());
+ IOperatorDescriptor opDesc = btreeSearch.first;
+ opDesc.setSourceLocation(unnestMap.getSourceLocation());
- builder.contributeHyracksOperator(unnestMap, btreeSearch.first);
- builder.contributeAlgebricksPartitionConstraint(btreeSearch.first, btreeSearch.second);
+ builder.contributeHyracksOperator(unnestMap, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, btreeSearch.second);
ILogicalOperator srcExchange = unnestMap.getInputs().get(0).getValue();
builder.contributeGraphEdge(srcExchange, 0, unnestMap, 0);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/CommitPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/CommitPOperator.java
index f06fe45..a24a83b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/CommitPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/CommitPOperator.java
@@ -85,6 +85,7 @@
//get dataset splits
IPushRuntimeFactory runtime = dataset.getCommitRuntimeFactory(metadataProvider, primaryKeyFields, isSink);
+ runtime.setSourceLocation(op.getSourceLocation());
builder.contributeMicroOperator(op, runtime, recDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/ExternalDataLookupPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/ExternalDataLookupPOperator.java
index 1d79455..fc899c6 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/ExternalDataLookupPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/ExternalDataLookupPOperator.java
@@ -135,8 +135,10 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> externalLoopup =
metadataProvider.buildExternalDataLookupRuntime(builder.getJobSpec(), dataset, ridIndexes, retainInput,
typeEnv, opSchema, context, metadataProvider, retainMissing);
- builder.contributeHyracksOperator(unnestMap, externalLoopup.first);
- builder.contributeAlgebricksPartitionConstraint(externalLoopup.first, externalLoopup.second);
+ IOperatorDescriptor opDesc = externalLoopup.first;
+ opDesc.setSourceLocation(unnestMap.getSourceLocation());
+ builder.contributeHyracksOperator(unnestMap, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, externalLoopup.second);
ILogicalOperator srcExchange = unnestMap.getInputs().get(0).getValue();
builder.contributeGraphEdge(srcExchange, 0, unnestMap, 0);
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
index eeb6688..7b5eb83 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/InvertedIndexPOperator.java
@@ -120,10 +120,12 @@
jobGenParams.getIndexName(), jobGenParams.getSearchKeyType(), keyIndexes,
jobGenParams.getSearchModifierType(), jobGenParams.getSimilarityThreshold(),
minFilterFieldIndexes, maxFilterFieldIndexes, jobGenParams.getIsFullTextSearch(), frameLimit);
+ IOperatorDescriptor opDesc = invIndexSearch.first;
+ opDesc.setSourceLocation(unnestMapOp.getSourceLocation());
// Contribute operator in hyracks job.
- builder.contributeHyracksOperator(unnestMapOp, invIndexSearch.first);
- builder.contributeAlgebricksPartitionConstraint(invIndexSearch.first, invIndexSearch.second);
+ builder.contributeHyracksOperator(unnestMapOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, invIndexSearch.second);
ILogicalOperator srcExchange = unnestMapOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(srcExchange, 0, unnestMapOp, 0);
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/RTreeSearchPOperator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/RTreeSearchPOperator.java
index 949be23..a80e5b3 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/RTreeSearchPOperator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/operators/physical/RTreeSearchPOperator.java
@@ -102,9 +102,11 @@
builder.getJobSpec(), outputVars, opSchema, typeEnv, context, jobGenParams.getRetainInput(), retainNull,
dataset, jobGenParams.getIndexName(), keyIndexes, propagateIndexFilter, minFilterFieldIndexes,
maxFilterFieldIndexes, unnestMap.getGenerateCallBackProceedResultVar());
+ IOperatorDescriptor opDesc = rtreeSearch.first;
+ opDesc.setSourceLocation(unnestMap.getSourceLocation());
- builder.contributeHyracksOperator(unnestMap, rtreeSearch.first);
- builder.contributeAlgebricksPartitionConstraint(rtreeSearch.first, rtreeSearch.second);
+ builder.contributeHyracksOperator(unnestMap, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, rtreeSearch.second);
ILogicalOperator srcExchange = unnestMap.getInputs().get(0).getValue();
builder.contributeGraphEdge(srcExchange, 0, unnestMap, 0);
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
index 02d79c4..32f8001 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
@@ -194,10 +194,11 @@
}
}
- private IFunctionDescriptor resolveFunction(ILogicalExpression expr, IVariableTypeEnvironment env,
+ private IFunctionDescriptor resolveFunction(AbstractFunctionCallExpression expr, IVariableTypeEnvironment env,
JobGenContext context) throws AlgebricksException {
- FunctionIdentifier fnId = ((AbstractFunctionCallExpression) expr).getFunctionIdentifier();
+ FunctionIdentifier fnId = expr.getFunctionIdentifier();
IFunctionDescriptor fd = functionManager.lookupFunction(fnId);
+ fd.setSourceLocation(expr.getSourceLocation());
IFunctionTypeInferer fnTypeInfer = functionManager.lookupFunctionTypeInferer(fnId);
if (fnTypeInfer != null) {
CompilerProperties compilerProps = ((IApplicationContext) context.getAppContext()).getCompilerProperties();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AddEquivalenceClassForRecordConstructorRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AddEquivalenceClassForRecordConstructorRule.java
index b9b5340..8219bcd 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AddEquivalenceClassForRecordConstructorRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AddEquivalenceClassForRecordConstructorRule.java
@@ -112,14 +112,16 @@
LogicalVariable fieldVar = varExpr.getVariableReference();
Map<LogicalVariable, EquivalenceClass> ecs = context.getEquivalenceClassMap(assignOp);
if (ecs == null) {
- ecs = new HashMap<LogicalVariable, EquivalenceClass>();
+ ecs = new HashMap<>();
context.putEquivalenceClassMap(assignOp, ecs);
}
- ILogicalExpression expr = new ScalarFunctionCallExpression(
+ VariableReferenceExpression recordVarRef = new VariableReferenceExpression(recordVar);
+ recordVarRef.setSourceLocation(funcExpr.getSourceLocation());
+ ScalarFunctionCallExpression expr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX),
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(recordVar)),
- new MutableObject<ILogicalExpression>(
+ new MutableObject<>(recordVarRef), new MutableObject<>(
new ConstantExpression(new AsterixConstantValue(new AInt32(parameterIndex / 2))))); // Every two parameters corresponds to a field.
+ expr.setSourceLocation(funcExpr.getSourceLocation());
EquivalenceClass equivClass = new EquivalenceClass(Collections.singletonList(fieldVar), fieldVar,
Collections.singletonList(expr));
ecs.put(fieldVar, equivClass);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AsterixIntroduceGroupByCombinerRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AsterixIntroduceGroupByCombinerRule.java
index 5a70d3c..8bfd120 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AsterixIntroduceGroupByCombinerRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/AsterixIntroduceGroupByCombinerRule.java
@@ -36,6 +36,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
import org.apache.hyracks.algebricks.rewriter.rules.AbstractIntroduceGroupByCombinerRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class AsterixIntroduceGroupByCombinerRule extends AbstractIntroduceGroupByCombinerRule {
@@ -43,36 +44,46 @@
@Override
protected void processNullTest(IOptimizationContext context, GroupByOperator nestedGby,
List<LogicalVariable> aggregateVarsProducedByCombiner) {
+ SourceLocation sourceLoc = nestedGby.getSourceLocation();
IFunctionInfo finfoEq = context.getMetadataProvider().lookupFunction(BuiltinFunctions.IS_SYSTEM_NULL);
SelectOperator selectNonSystemNull;
if (aggregateVarsProducedByCombiner.size() == 1) {
- ILogicalExpression isSystemNullTest =
- new ScalarFunctionCallExpression(finfoEq, new MutableObject<ILogicalExpression>(
- new VariableReferenceExpression(aggregateVarsProducedByCombiner.get(0))));
+ VariableReferenceExpression aggVarRef =
+ new VariableReferenceExpression(aggregateVarsProducedByCombiner.get(0));
+ aggVarRef.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression isSystemNullTest =
+ new ScalarFunctionCallExpression(finfoEq, new MutableObject<>(aggVarRef));
+ isSystemNullTest.setSourceLocation(sourceLoc);
IFunctionInfo finfoNot = context.getMetadataProvider().lookupFunction(AlgebricksBuiltinFunctions.NOT);
ScalarFunctionCallExpression nonSystemNullTest =
- new ScalarFunctionCallExpression(finfoNot, new MutableObject<ILogicalExpression>(isSystemNullTest));
- selectNonSystemNull =
- new SelectOperator(new MutableObject<ILogicalExpression>(nonSystemNullTest), false, null);
+ new ScalarFunctionCallExpression(finfoNot, new MutableObject<>(isSystemNullTest));
+ nonSystemNullTest.setSourceLocation(sourceLoc);
+ selectNonSystemNull = new SelectOperator(new MutableObject<>(nonSystemNullTest), false, null);
+ selectNonSystemNull.setSourceLocation(sourceLoc);
} else {
- List<Mutable<ILogicalExpression>> isSystemNullTestList = new ArrayList<Mutable<ILogicalExpression>>();
+ List<Mutable<ILogicalExpression>> isSystemNullTestList = new ArrayList<>();
for (LogicalVariable aggVar : aggregateVarsProducedByCombiner) {
- ILogicalExpression isSystemNullTest = new ScalarFunctionCallExpression(finfoEq,
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(aggVar)));
+ VariableReferenceExpression aggVarRef = new VariableReferenceExpression(aggVar);
+ aggVarRef.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression isSystemNullTest =
+ new ScalarFunctionCallExpression(finfoEq, new MutableObject<>(aggVarRef));
+ isSystemNullTest.setSourceLocation(sourceLoc);
IFunctionInfo finfoNot = context.getMetadataProvider().lookupFunction(AlgebricksBuiltinFunctions.NOT);
- ScalarFunctionCallExpression nonSystemNullTest = new ScalarFunctionCallExpression(finfoNot,
- new MutableObject<ILogicalExpression>(isSystemNullTest));
- isSystemNullTestList.add(new MutableObject<ILogicalExpression>(nonSystemNullTest));
+ ScalarFunctionCallExpression nonSystemNullTest =
+ new ScalarFunctionCallExpression(finfoNot, new MutableObject<>(isSystemNullTest));
+ nonSystemNullTest.setSourceLocation(sourceLoc);
+ isSystemNullTestList.add(new MutableObject<>(nonSystemNullTest));
}
IFunctionInfo finfoAnd = context.getMetadataProvider().lookupFunction(AlgebricksBuiltinFunctions.AND);
- selectNonSystemNull = new SelectOperator(new MutableObject<ILogicalExpression>(
- new ScalarFunctionCallExpression(finfoAnd, isSystemNullTestList)), false, null);
+ selectNonSystemNull = new SelectOperator(
+ new MutableObject<>(new ScalarFunctionCallExpression(finfoAnd, isSystemNullTestList)), false, null);
+ selectNonSystemNull.setSourceLocation(sourceLoc);
}
//add the not-system-null check into the nested pipeline
Mutable<ILogicalOperator> ntsBeforeNestedGby = nestedGby.getInputs().get(0);
- nestedGby.getInputs().set(0, new MutableObject<ILogicalOperator>(selectNonSystemNull));
+ nestedGby.getInputs().set(0, new MutableObject<>(selectNonSystemNull));
selectNonSystemNull.getInputs().add(ntsBeforeNestedGby);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java
index 5cf6769..b0c3bdf 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java
@@ -38,6 +38,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class ByNameToByHandleFieldAccessRule implements IAlgebraicRewriteRule {
@@ -65,6 +66,7 @@
AbstractFunctionCallExpression fce =
(AbstractFunctionCallExpression) fieldAccessOp.getExpressions().get(0).getValue();
ILogicalExpression a1 = fce.getArguments().get(0).getValue();
+ SourceLocation sourceLoc = fieldAccessOp.getSourceLocation();
VariableReferenceExpression x;
if (a1.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
@@ -76,7 +78,9 @@
ArrayList<Mutable<ILogicalExpression>> exprArray = new ArrayList<Mutable<ILogicalExpression>>(1);
exprArray.add(new MutableObject<ILogicalExpression>(a1));
AssignOperator assignVar = new AssignOperator(varArray, exprArray);
+ assignVar.setSourceLocation(sourceLoc);
x = new VariableReferenceExpression(var1);
+ x.setSourceLocation(sourceLoc);
assignVar.getInputs().add(opUnder);
opUnder = new MutableObject<ILogicalOperator>(assignVar);
}
@@ -88,24 +92,33 @@
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.TYPE_OF));
typeOf.getArguments().add(new MutableObject<ILogicalExpression>(x));
AssignOperator typAssign = new AssignOperator(t, new MutableObject<ILogicalExpression>(typeOf));
+ typAssign.setSourceLocation(sourceLoc);
typAssign.getInputs().add(opUnder);
// let $w := get-handle($t, path-expression)
LogicalVariable w = context.newVar();
AbstractFunctionCallExpression getHandle =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_HANDLE));
- getHandle.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(t)));
+ getHandle.setSourceLocation(sourceLoc);
+ VariableReferenceExpression tRef = new VariableReferenceExpression(t);
+ tRef.setSourceLocation(sourceLoc);
+ getHandle.getArguments().add(new MutableObject<ILogicalExpression>(tRef));
// the accessed field
getHandle.getArguments().add(new MutableObject<ILogicalExpression>(fce.getArguments().get(1).getValue()));
AssignOperator handleAssign = new AssignOperator(w, new MutableObject<ILogicalExpression>(getHandle));
+ handleAssign.setSourceLocation(sourceLoc);
handleAssign.getInputs().add(new MutableObject<ILogicalOperator>(typAssign));
// let $y := get-data(x, $w)
AbstractFunctionCallExpression getData =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_DATA));
+ getData.setSourceLocation(sourceLoc);
VariableReferenceExpression ref2 = new VariableReferenceExpression(x.getVariableReference());
+ ref2.setSourceLocation(sourceLoc);
getData.getArguments().add(new MutableObject<ILogicalExpression>(ref2));
- getData.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(w)));
+ VariableReferenceExpression wRef = new VariableReferenceExpression(w);
+ wRef.setSourceLocation(sourceLoc);
+ getData.getArguments().add(new MutableObject<ILogicalExpression>(wRef));
fieldAccessOp.getExpressions().get(0).setValue(getData);
List<Mutable<ILogicalOperator>> faInputs = fieldAccessOp.getInputs();
faInputs.clear();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
index 19cd4b6..9c478ee 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
@@ -47,6 +47,7 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule {
@@ -100,10 +101,14 @@
if (firstArg.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
return false;
}
+ SourceLocation sourceLoc = firstArg.getSourceLocation();
LogicalVariable var1 = context.newVar();
AssignOperator assignOp = new AssignOperator(new ArrayList<>(Collections.singletonList(var1)),
new ArrayList<>(Collections.singletonList(new MutableObject<>(firstArg))));
- fce.getArguments().get(0).setValue(new VariableReferenceExpression(var1));
+ assignOp.setSourceLocation(sourceLoc);
+ VariableReferenceExpression var1Ref = new VariableReferenceExpression(var1);
+ var1Ref.setSourceLocation(sourceLoc);
+ fce.getArguments().get(0).setValue(var1Ref);
assignOp.getInputs().add(new MutableObject<>(op.getInputs().get(0).getValue()));
op.getInputs().get(0).setValue(assignOp);
context.computeAndSetTypeEnvironmentForOperator(assignOp);
@@ -148,8 +153,10 @@
if (k < 0) {
return null;
}
- return new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX),
- fce.getArguments().get(0),
+ ScalarFunctionCallExpression faExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX), fce.getArguments().get(0),
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(k)))));
+ faExpr.setSourceLocation(fce.getSourceLocation());
+ return faExpr;
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CancelUnnestWithNestedListifyRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CancelUnnestWithNestedListifyRule.java
index 6cc87ad..567e6c3 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CancelUnnestWithNestedListifyRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CancelUnnestWithNestedListifyRule.java
@@ -51,6 +51,7 @@
import org.apache.hyracks.algebricks.core.algebra.properties.UnpartitionedPropertyComputer;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import com.google.common.collect.ImmutableSet;
@@ -225,8 +226,11 @@
ArrayList<LogicalVariable> assgnVars = new ArrayList<LogicalVariable>(1);
assgnVars.add(unnest1.getVariable());
ArrayList<Mutable<ILogicalExpression>> assgnExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
- assgnExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(paramVar)));
+ VariableReferenceExpression paramRef = new VariableReferenceExpression(paramVar);
+ paramRef.setSourceLocation(arg0.getSourceLocation());
+ assgnExprs.add(new MutableObject<ILogicalExpression>(paramRef));
AssignOperator assign = new AssignOperator(assgnVars, assgnExprs);
+ assign.setSourceLocation(arg0.getSourceLocation());
LogicalVariable posVar = unnest1.getPositionalVariable();
if (posVar == null) {
@@ -252,6 +256,7 @@
opRef.setValue(assign);
assign.getInputs().add(aggInputOpRef);
AssignOperator gbyKeyAssign = new AssignOperator(gbyKeyAssgnVars, gbyKeyAssgnExprs);
+ gbyKeyAssign.setSourceLocation(gby.getSourceLocation());
gbyKeyAssign.getInputs().add(gby.getInputs().get(0));
bottomOpRef.setValue(gbyKeyAssign);
@@ -266,6 +271,8 @@
nestedAssignVars.add(unnest1.getVariable());
nestedAssignExprs.add(new MutableObject<ILogicalExpression>(arg0));
AssignOperator nestedAssign = new AssignOperator(nestedAssignVars, nestedAssignExprs);
+ SourceLocation sourceLoc = unnest1.getSourceLocation();
+ nestedAssign.setSourceLocation(sourceLoc);
nestedAssign.getInputs().add(opRef2);
// Then create running aggregation for the positional variable
@@ -274,8 +281,10 @@
raggVars.add(posVar);
StatefulFunctionCallExpression fce = new StatefulFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.TID), UnpartitionedPropertyComputer.INSTANCE);
+ fce.setSourceLocation(sourceLoc);
raggExprs.add(new MutableObject<ILogicalExpression>(fce));
RunningAggregateOperator raggOp = new RunningAggregateOperator(raggVars, raggExprs);
+ raggOp.setSourceLocation(sourceLoc);
raggOp.setExecutionMode(unnest1.getExecutionMode());
RunningAggregatePOperator raggPOp = new RunningAggregatePOperator();
raggOp.setPhysicalOperator(raggPOp);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
index 444e5bc..1eb3e75 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
@@ -19,6 +19,8 @@
package org.apache.asterix.optimizer.rules;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.AUnionType;
import org.apache.asterix.om.types.IAType;
@@ -62,7 +64,7 @@
IAType condType = (IAType) env.getType(condition);
if (condType.getTypeTag() != ATypeTag.BOOLEAN && condType.getTypeTag() != ATypeTag.ANY
&& !isPossibleBoolean(condType)) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, condition.getSourceLocation(),
"The select condition " + condition.toString() + " should be of the boolean type.");
}
return false;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckInsertUpsertReturningRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckInsertUpsertReturningRule.java
index 7c01ebd..5849d88 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckInsertUpsertReturningRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckInsertUpsertReturningRule.java
@@ -42,8 +42,9 @@
if (checked) {
return false;
}
- if (InsertUpsertCheckUtil.check(opRef.getValue())) {
- throw new CompilationException(ErrorCode.COMPILATION_INVALID_RETURNING_EXPRESSION);
+ ILogicalOperator op = opRef.getValue();
+ if (InsertUpsertCheckUtil.check(op)) {
+ throw new CompilationException(ErrorCode.COMPILATION_INVALID_RETURNING_EXPRESSION, op.getSourceLocation());
}
checked = true;
return false;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java
index 85ee0ef..952c12b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/DisjunctivePredicateToJoinRule.java
@@ -51,6 +51,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class DisjunctivePredicateToJoinRule implements IAlgebraicRewriteRule {
@@ -117,6 +118,8 @@
}
}
+ SourceLocation sourceLoc = select.getSourceLocation();
+
AOrderedList list = new AOrderedList(new AOrderedListType(valType, "orderedlist"));
for (AsterixConstantValue value : values) {
list.add(value.getObject());
@@ -129,14 +132,19 @@
Mutable<ILogicalExpression> mutCExp = new MutableObject<>(cExp);
IFunctionInfo scanFctInfo = BuiltinFunctions.getAsterixFunctionInfo(BuiltinFunctions.SCAN_COLLECTION);
UnnestingFunctionCallExpression scanExp = new UnnestingFunctionCallExpression(scanFctInfo, mutCExp);
+ scanExp.setSourceLocation(sourceLoc);
LogicalVariable scanVar = context.newVar();
UnnestOperator unn = new UnnestOperator(scanVar, new MutableObject<>(scanExp));
+ unn.setSourceLocation(sourceLoc);
unn.getInputs().add(new MutableObject<>(ets));
context.computeAndSetTypeEnvironmentForOperator(unn);
IFunctionInfo eqFctInfo = BuiltinFunctions.getAsterixFunctionInfo(AlgebricksBuiltinFunctions.EQ);
AbstractFunctionCallExpression eqExp = new ScalarFunctionCallExpression(eqFctInfo);
- eqExp.getArguments().add(new MutableObject<>(new VariableReferenceExpression(scanVar)));
+ eqExp.setSourceLocation(sourceLoc);
+ VariableReferenceExpression scanVarRef = new VariableReferenceExpression(scanVar);
+ scanVarRef.setSourceLocation(sourceLoc);
+ eqExp.getArguments().add(new MutableObject<>(scanVarRef));
eqExp.getArguments().add(new MutableObject<>(varEx.cloneExpression()));
eqExp.getAnnotations().put(IndexedNLJoinExpressionAnnotation.INSTANCE,
IndexedNLJoinExpressionAnnotation.INSTANCE);
@@ -145,6 +153,7 @@
eqExp.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
InnerJoinOperator jOp = new InnerJoinOperator(new MutableObject<>(eqExp));
+ jOp.setSourceLocation(sourceLoc);
jOp.getInputs().add(new MutableObject<>(unn));
jOp.getInputs().add(select.getInputs().get(0));
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java
index 01b37a4..f340898 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java
@@ -69,7 +69,8 @@
continue;
}
LogicalVariable v = extractExprIntoAssignOpRef(expr.getValue(), opRef2, context);
- ILogicalExpression newExpr = new VariableReferenceExpression(v);
+ VariableReferenceExpression newExpr = new VariableReferenceExpression(v);
+ newExpr.setSourceLocation(expr.getValue().getSourceLocation());
newExprList.add(new MutableObject<ILogicalExpression>(newExpr));
changed = true;
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractOrderExpressionsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractOrderExpressionsRule.java
index 4fbd632..585077f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractOrderExpressionsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ExtractOrderExpressionsRule.java
@@ -65,7 +65,9 @@
ILogicalExpression expr = orderPair.second.getValue();
if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE && !AnalysisUtil.isAccessToFieldRecord(expr)) {
LogicalVariable v = extractExprIntoAssignOpRef(expr, opRef2, context);
- orderPair.second.setValue(new VariableReferenceExpression(v));
+ VariableReferenceExpression vRef = new VariableReferenceExpression(v);
+ vRef.setSourceLocation(expr.getSourceLocation());
+ orderPair.second.setValue(vRef);
}
}
context.computeAndSetTypeEnvironmentForOperator(oo);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FeedScanCollectionToUnnest.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FeedScanCollectionToUnnest.java
index fef2323..6b03d32 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FeedScanCollectionToUnnest.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FeedScanCollectionToUnnest.java
@@ -63,9 +63,10 @@
UnnestOperator unnest = (UnnestOperator) op;
ILogicalExpression unnestExpr = unnest.getExpressionRef().getValue();
if (needsScanCollection(unnestExpr, op)) {
- ILogicalExpression newExpr =
+ UnnestingFunctionCallExpression newExpr =
new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
new MutableObject<ILogicalExpression>(unnestExpr));
+ newExpr.setSourceLocation(unnestExpr.getSourceLocation());
unnest.getExpressionRef().setValue(newExpr);
context.addToDontApplySet(this, op);
return true;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FixReplicateOperatorOutputsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FixReplicateOperatorOutputsRule.java
index c594ff8..e580e65 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FixReplicateOperatorOutputsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FixReplicateOperatorOutputsRule.java
@@ -24,6 +24,7 @@
import java.util.Map;
import org.apache.asterix.algebra.operators.CommitOperator;
+import org.apache.asterix.common.exceptions.AsterixException;
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableInt;
@@ -102,7 +103,8 @@
&& ((DelegateOperator) op).getDelegate() instanceof CommitOperator)) {
for (Map.Entry<AbstractReplicateOperator, MutableInt> entry : replicateOperators.entrySet()) {
if (entry.getKey().getOutputs().size() != entry.getValue().getValue()) {
- throw new AlgebricksException(ErrorCode.ASTERIX, ErrorCode.COMPILATION_FAILED_DUE_TO_REPLICATE_OP);
+ throw new AsterixException(ErrorCode.COMPILATION_FAILED_DUE_TO_REPLICATE_OP,
+ op.getSourceLocation());
}
}
return false;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java
index a93b732..9a44022 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FullTextContainsParameterCheckRule.java
@@ -44,6 +44,7 @@
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Checks whether the given parameters of the ftcontains() function are correct during the compilation.
@@ -144,8 +145,8 @@
// The number of parameters should be three: exp1, exp2, and the option
if (oldExprs.size() != numberOfCorrectArguments) {
- throw CompilationException.create(ErrorCode.COMPILATION_INVALID_PARAMETER_NUMBER, fi,
- oldExprs.size());
+ throw CompilationException.create(ErrorCode.COMPILATION_INVALID_PARAMETER_NUMBER,
+ funcExpr.getSourceLocation(), fi, oldExprs.size());
}
// The last expression before the option needs to be copied first.
@@ -184,8 +185,8 @@
ILogicalExpression firstExpr = exprs.get(0).getValue();
if (firstExpr.getExpressionTag() == LogicalExpressionTag.CONSTANT
&& ConstantExpressionUtil.getConstantIaObjectType(firstExpr) != ATypeTag.STRING) {
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName,
- ConstantExpressionUtil.getConstantIaObjectType(firstExpr));
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, firstExpr.getSourceLocation(),
+ functionName, ConstantExpressionUtil.getConstantIaObjectType(firstExpr));
}
// Check the second parameter - Expression2. If it's a constant, then we can check the type here.
@@ -198,7 +199,8 @@
case ARRAY:
break;
default:
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, exprTypeTag);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, secondExpr.getSourceLocation(),
+ functionName, exprTypeTag);
}
}
}
@@ -216,12 +218,14 @@
FunctionIdentifier openRecConsFi = openRecConsExpr.getFunctionIdentifier();
if (openRecConsFi != BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR
&& openRecConsFi != BuiltinFunctions.CLOSED_RECORD_CONSTRUCTOR) {
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, openRecConsFi);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, openRecConsExpr.getSourceLocation(),
+ functionName, openRecConsFi);
}
// We multiply 2 because the layout of the arguments are: [expr, val, expr1, val1, ...]
if (openRecConsExpr.getArguments().size() > FullTextContainsDescriptor.getParamTypeMap().size() * 2) {
- throw CompilationException.create(ErrorCode.TOO_MANY_OPTIONS_FOR_FUNCTION, functionName);
+ throw CompilationException.create(ErrorCode.TOO_MANY_OPTIONS_FOR_FUNCTION,
+ openRecConsExpr.getSourceLocation(), functionName);
}
for (int i = 0; i < openRecConsExpr.getArguments().size(); i = i + 2) {
@@ -231,13 +235,14 @@
String option = ConstantExpressionUtil.getStringConstant(optionExpr);
if (optionExpr.getExpressionTag() != LogicalExpressionTag.CONSTANT || option == null) {
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName,
- optionExpr.getExpressionTag());
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, optionExpr.getSourceLocation(),
+ functionName, optionExpr.getExpressionTag());
}
option = option.toLowerCase();
if (!FullTextContainsDescriptor.getParamTypeMap().containsKey(option)) {
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, option);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, optionExprVal.getSourceLocation(),
+ functionName, option);
}
String optionTypeStringVal = null;
@@ -248,22 +253,25 @@
case STRING:
optionTypeStringVal = ConstantExpressionUtil.getStringConstant(optionExprVal);
if (optionTypeStringVal == null) {
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, option);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED,
+ optionExprVal.getSourceLocation(), functionName, option);
}
optionTypeStringVal = optionTypeStringVal.toLowerCase();
break;
default:
// Currently, we only have a string parameter. So, the flow doesn't reach here.
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, option);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED,
+ optionExprVal.getSourceLocation(), functionName, option);
}
// Check the validity of option value
switch (option) {
case FullTextContainsDescriptor.SEARCH_MODE_OPTION:
- checkSearchModeOption(optionTypeStringVal, functionName);
+ checkSearchModeOption(optionTypeStringVal, functionName, optionExprVal.getSourceLocation());
break;
default:
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, option);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED,
+ optionExprVal.getSourceLocation(), functionName, option);
}
}
@@ -273,12 +281,13 @@
}
}
- private void checkSearchModeOption(String optionVal, String functionName) throws AlgebricksException {
+ private void checkSearchModeOption(String optionVal, String functionName, SourceLocation sourceLoc)
+ throws AlgebricksException {
if (optionVal.equals(FullTextContainsDescriptor.CONJUNCTIVE_SEARCH_MODE_OPTION)
|| optionVal.equals(FullTextContainsDescriptor.DISJUNCTIVE_SEARCH_MODE_OPTION)) {
return;
} else {
- throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, functionName, optionVal);
+ throw CompilationException.create(ErrorCode.TYPE_UNSUPPORTED, sourceLoc, functionName, optionVal);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyEqRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyEqRule.java
index 511ec55..895746a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyEqRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyEqRule.java
@@ -45,6 +45,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FuzzyEqRule implements IAlgebraicRewriteRule {
@@ -88,6 +89,7 @@
AbstractFunctionCallExpression funcExp = (AbstractFunctionCallExpression) exp;
FunctionIdentifier fi = funcExp.getFunctionIdentifier();
if (fi.equals(BuiltinFunctions.FUZZY_EQ)) {
+ SourceLocation sourceLoc = funcExp.getSourceLocation();
List<Mutable<ILogicalExpression>> inputExps = funcExp.getArguments();
String simFuncName = FuzzyUtils.getSimFunction(metadataProvider);
@@ -100,13 +102,15 @@
FunctionIdentifier simFunctionIdentifier = FuzzyUtils.getFunctionIdentifier(simFuncName);
ScalarFunctionCallExpression similarityExp = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(simFunctionIdentifier), similarityArgs);
+ similarityExp.setSourceLocation(sourceLoc);
// Add annotations from the original fuzzy-eq function.
similarityExp.getAnnotations().putAll(funcExp.getAnnotations());
ArrayList<Mutable<ILogicalExpression>> cmpArgs = new ArrayList<Mutable<ILogicalExpression>>();
cmpArgs.add(new MutableObject<ILogicalExpression>(similarityExp));
IAObject simThreshold = FuzzyUtils.getSimThreshold(metadataProvider, simFuncName);
- cmpArgs.add(new MutableObject<ILogicalExpression>(
- new ConstantExpression(new AsterixConstantValue(simThreshold))));
+ ConstantExpression simThresholdExpr = new ConstantExpression(new AsterixConstantValue(simThreshold));
+ simThresholdExpr.setSourceLocation(sourceLoc);
+ cmpArgs.add(new MutableObject<ILogicalExpression>(simThresholdExpr));
ScalarFunctionCallExpression cmpExpr = FuzzyUtils.getComparisonExpr(simFuncName, cmpArgs);
expRef.setValue(cmpExpr);
return true;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
index 003cff0..fae10e1 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
@@ -329,6 +329,7 @@
switch (joinOp.getJoinKind()) {
case INNER: {
extraSelect = new SelectOperator(expRef, false, null);
+ extraSelect.setSourceLocation(expRef.getValue().getSourceLocation());
extraSelect.getInputs().add(new MutableObject<ILogicalOperator>(outputOp));
outputOp = extraSelect;
break;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForSwitchCaseRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForSwitchCaseRule.java
index 27b2712..92b2d6a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForSwitchCaseRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForSwitchCaseRule.java
@@ -103,6 +103,7 @@
ScalarFunctionCallExpression castFunc =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CAST_TYPE),
new ArrayList<>(Collections.singletonList(new MutableObject<>(argExpr))));
+ castFunc.setSourceLocation(argExpr.getSourceLocation());
TypeCastUtils.setRequiredAndInputTypes(castFunc, producedType, type);
argRef.setValue(castFunc);
rewritten = true;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForUnionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForUnionRule.java
index 748f326..b7c1854 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForUnionRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InjectTypeCastForUnionRule.java
@@ -43,6 +43,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* This rule injects type casts for inputs of a UnionAllOperator if those
@@ -69,6 +70,7 @@
IVariableTypeEnvironment env = context.getOutputTypeEnvironment(op);
Mutable<ILogicalOperator> branchOpRef = op.getInputs().get(childIndex);
IVariableTypeEnvironment childEnv = context.getOutputTypeEnvironment(branchOpRef.getValue());
+ SourceLocation sourceLoc = branchOpRef.getValue().getSourceLocation();
// The two lists are used for the assign operator that calls cast functions.
List<LogicalVariable> varsToCast = new ArrayList<>();
@@ -89,9 +91,12 @@
// Resets triple variables to new variables that bind to the results of type casting.
triple.first = childIndex == 0 ? castedVar : triple.first;
triple.second = childIndex > 0 ? castedVar : triple.second;
- ScalarFunctionCallExpression castFunc = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.CAST_TYPE), new ArrayList<>(Collections
- .singletonList(new MutableObject<>(new VariableReferenceExpression(varToCast)))));
+ VariableReferenceExpression varToCastRef = new VariableReferenceExpression(varToCast);
+ varToCastRef.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression castFunc =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CAST_TYPE),
+ new ArrayList<>(Collections.singletonList(new MutableObject<>(varToCastRef))));
+ castFunc.setSourceLocation(sourceLoc);
TypeCastUtils.setRequiredAndInputTypes(castFunc, producedType, inputType);
// Adds the variable and function expression into lists, for the assign operator.
@@ -103,6 +108,7 @@
}
// Injects an assign operator to perform type casts.
AssignOperator assignOp = new AssignOperator(varsToCast, castFunctionsForLeft);
+ assignOp.setSourceLocation(sourceLoc);
assignOp.getInputs().add(new MutableObject<>(branchOpRef.getValue()));
branchOpRef.setValue(assignOp);
context.computeAndSetTypeEnvironmentForOperator(assignOp);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
index 14c3d87..f1b20d8 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
@@ -52,6 +52,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class IntroduceAutogenerateIDRule implements IAlgebraicRewriteRule {
@@ -122,6 +123,7 @@
}
AssignOperator assignOp = (AssignOperator) parentOp;
LogicalVariable inputRecord;
+ SourceLocation inputRecordSourceLoc;
boolean hasFilter = false;
AbstractLogicalOperator grandparentOp = (AbstractLogicalOperator) parentOp.getInputs().get(0).getValue();
@@ -130,9 +132,11 @@
if (grandparentOp.getOperatorTag() == LogicalOperatorTag.PROJECT) {
ProjectOperator projectOp = (ProjectOperator) grandparentOp;
inputRecord = projectOp.getVariables().get(0);
+ inputRecordSourceLoc = projectOp.getSourceLocation();
} else if (grandparentOp.getOperatorTag() == LogicalOperatorTag.DATASOURCESCAN) {
DataSourceScanOperator dssOp = (DataSourceScanOperator) grandparentOp;
inputRecord = dssOp.getVariables().get(0);
+ inputRecordSourceLoc = dssOp.getSourceLocation();
} else if (grandparentOp.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
AbstractLogicalOperator greatgrandparentOp =
(AbstractLogicalOperator) grandparentOp.getInputs().get(0).getValue();
@@ -142,6 +146,7 @@
//filter case
ProjectOperator projectOp = (ProjectOperator) greatgrandparentOp;
inputRecord = projectOp.getVariables().get(0);
+ inputRecordSourceLoc = projectOp.getSourceLocation();
newAssignParentOp = greatgrandparentOp;
newAssignChildOp = grandparentOp;
hasFilter = true;
@@ -149,15 +154,18 @@
return false;
}
+ SourceLocation insertOpSourceLoc = insertOp.getSourceLocation();
List<String> pkFieldName =
((InternalDatasetDetails) dds.getDataset().getDatasetDetails()).getPrimaryKey().get(0);
- ILogicalExpression rec0 = new VariableReferenceExpression(inputRecord);
- ILogicalExpression rec1 = createPrimaryKeyRecordExpression(pkFieldName);
- ILogicalExpression mergedRec = createRecordMergeFunction(rec0, rec1);
+ VariableReferenceExpression rec0 = new VariableReferenceExpression(inputRecord);
+ rec0.setSourceLocation(inputRecordSourceLoc);
+ ILogicalExpression rec1 = createPrimaryKeyRecordExpression(pkFieldName, insertOpSourceLoc);
+ ILogicalExpression mergedRec = createRecordMergeFunction(rec0, rec1, insertOpSourceLoc);
ILogicalExpression nonNullMergedRec = createNotNullFunction(mergedRec);
LogicalVariable v = context.newVar();
AssignOperator newAssign = new AssignOperator(v, new MutableObject<ILogicalExpression>(nonNullMergedRec));
+ newAssign.setSourceLocation(insertOpSourceLoc);
newAssign.getInputs().add(new MutableObject<ILogicalOperator>(newAssignParentOp));
newAssignChildOp.getInputs().set(0, new MutableObject<ILogicalOperator>(newAssign));
if (hasFilter) {
@@ -184,21 +192,25 @@
args.add(new MutableObject<ILogicalExpression>(mergedRec));
AbstractFunctionCallExpression notNullFn =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CHECK_UNKNOWN), args);
+ notNullFn.setSourceLocation(mergedRec.getSourceLocation());
return notNullFn;
}
- private AbstractFunctionCallExpression createPrimaryKeyRecordExpression(List<String> pkFieldName) {
+ private AbstractFunctionCallExpression createPrimaryKeyRecordExpression(List<String> pkFieldName,
+ SourceLocation sourceLoc) {
//Create lowest level of nested uuid
AbstractFunctionCallExpression uuidFn =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_UUID));
+ uuidFn.setSourceLocation(sourceLoc);
List<Mutable<ILogicalExpression>> openRecordConsArgs = new ArrayList<>();
- Mutable<ILogicalExpression> pkFieldNameExpression = new MutableObject<ILogicalExpression>(
- new ConstantExpression(new AsterixConstantValue(new AString(pkFieldName.get(pkFieldName.size() - 1)))));
- openRecordConsArgs.add(pkFieldNameExpression);
- Mutable<ILogicalExpression> pkFieldValueExpression = new MutableObject<ILogicalExpression>(uuidFn);
- openRecordConsArgs.add(pkFieldValueExpression);
+ ConstantExpression pkFieldNameExpression =
+ new ConstantExpression(new AsterixConstantValue(new AString(pkFieldName.get(pkFieldName.size() - 1))));
+ pkFieldNameExpression.setSourceLocation(sourceLoc);
+ openRecordConsArgs.add(new MutableObject<>(pkFieldNameExpression));
+ openRecordConsArgs.add(new MutableObject<>(uuidFn));
AbstractFunctionCallExpression openRecFn = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR), openRecordConsArgs);
+ openRecFn.setSourceLocation(sourceLoc);
//Create higher levels
for (int i = pkFieldName.size() - 2; i > -1; i--) {
@@ -209,17 +221,20 @@
openRecordConsArgs.add(new MutableObject<ILogicalExpression>(openRecFn));
openRecFn = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR), openRecordConsArgs);
+ openRecFn.setSourceLocation(sourceLoc);
}
return openRecFn;
}
- private AbstractFunctionCallExpression createRecordMergeFunction(ILogicalExpression rec0, ILogicalExpression rec1) {
+ private AbstractFunctionCallExpression createRecordMergeFunction(ILogicalExpression rec0, ILogicalExpression rec1,
+ SourceLocation sourceLoc) {
List<Mutable<ILogicalExpression>> recordMergeFnArgs = new ArrayList<>();
recordMergeFnArgs.add(new MutableObject<>(rec0));
recordMergeFnArgs.add(new MutableObject<>(rec1));
AbstractFunctionCallExpression recordMergeFn = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.RECORD_MERGE), recordMergeFnArgs);
+ recordMergeFn.setSourceLocation(sourceLoc);
return recordMergeFn;
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
index 5644a6c..97e2174 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
@@ -74,8 +74,8 @@
IAType inputRecordType;
ARecordType requiredRecordType;
for (int iter1 = 0; iter1 < funcCallExpr.getArguments().size(); iter1++) {
- inputRecordType = (IAType) op.computeOutputTypeEnvironment(context)
- .getType(funcCallExpr.getArguments().get(iter1).getValue());
+ Mutable<ILogicalExpression> argExpr = funcCallExpr.getArguments().get(iter1);
+ inputRecordType = (IAType) op.computeOutputTypeEnvironment(context).getType(argExpr.getValue());
if (!(((ExternalScalarFunctionInfo) funcCallExpr.getFunctionInfo()).getArgumenTypes()
.get(iter1) instanceof ARecordType)) {
continue;
@@ -92,14 +92,16 @@
inputRecordType = ((AUnionType) inputRecordType).getActualType();
checkUnknown = true;
}
- boolean castFlag = !IntroduceDynamicTypeCastRule.compatible(requiredRecordType, inputRecordType);
+ boolean castFlag = !IntroduceDynamicTypeCastRule.compatible(requiredRecordType, inputRecordType,
+ argExpr.getValue().getSourceLocation());
if (castFlag || checkUnknown) {
AbstractFunctionCallExpression castFunc =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CAST_TYPE));
- castFunc.getArguments().add(funcCallExpr.getArguments().get(iter1));
+ castFunc.setSourceLocation(argExpr.getValue().getSourceLocation());
+ castFunc.getArguments().add(argExpr);
TypeCastUtils.setRequiredAndInputTypes(castFunc, requiredRecordType, inputRecordType);
funcCallExpr.getArguments().set(iter1, new MutableObject<>(castFunc));
- changed = changed || true;
+ changed = true;
}
}
return changed;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
index 2695337..a7ed0fd 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
@@ -23,6 +23,8 @@
import java.util.List;
import org.apache.asterix.algebra.operators.CommitOperator;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.metadata.declared.DataSource;
import org.apache.asterix.om.functions.BuiltinFunctions;
@@ -52,6 +54,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteUpsertOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Dynamically cast a variable from its type to a specified required type, in a
@@ -164,7 +167,7 @@
}
/** see whether the input record type needs to be casted */
- boolean cast = !compatible(requiredRecordType, inputRecordType);
+ boolean cast = !compatible(requiredRecordType, inputRecordType, op.getSourceLocation());
if (checkUnknown) {
recordVar = addWrapperFunction(requiredRecordType, recordVar, op, context, BuiltinFunctions.CHECK_UNKNOWN);
@@ -197,6 +200,7 @@
for (int index = 0; index < opRefs.size(); index++) {
Mutable<ILogicalOperator> opRef = opRefs.get(index);
ILogicalOperator op = opRef.getValue();
+ SourceLocation sourceLoc = op.getSourceLocation();
/** get produced vars */
List<LogicalVariable> producedVars = new ArrayList<LogicalVariable>();
@@ -209,13 +213,16 @@
IAType actualType = (IAType) env.getVarType(var);
AbstractFunctionCallExpression cast =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fd));
- cast.getArguments()
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+ cast.setSourceLocation(sourceLoc);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(sourceLoc);
+ cast.getArguments().add(new MutableObject<ILogicalExpression>(varRef));
/** enforce the required record type */
TypeCastUtils.setRequiredAndInputTypes(cast, requiredRecordType, actualType);
LogicalVariable newAssignVar = context.newVar();
AssignOperator newAssignOperator =
new AssignOperator(newAssignVar, new MutableObject<ILogicalExpression>(cast));
+ newAssignOperator.setSourceLocation(sourceLoc);
newAssignOperator.getInputs().add(new MutableObject<ILogicalOperator>(op));
opRef.setValue(newAssignOperator);
context.computeAndSetTypeEnvironmentForOperator(newAssignOperator);
@@ -240,15 +247,18 @@
*
* @param reqType
* @param inputType
+ * @param sourceLoc
* @return true if compatible; false otherwise
* @throws AlgebricksException
*/
- public static boolean compatible(ARecordType reqType, IAType inputType) throws AlgebricksException {
+ public static boolean compatible(ARecordType reqType, IAType inputType, SourceLocation sourceLoc)
+ throws AlgebricksException {
if (inputType.getTypeTag() == ATypeTag.ANY) {
return false;
}
if (inputType.getTypeTag() != ATypeTag.OBJECT) {
- throw new AlgebricksException("The input type " + inputType + " is not a valid record type!");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "The input type " + inputType + " is not a valid record type!");
}
ARecordType inputRecType = (ARecordType) inputType;
if (reqType.isOpen() != inputRecType.isOpen()) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceMaterializationForInsertWithSelfScanRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceMaterializationForInsertWithSelfScanRule.java
index 0fa4d30..f4d8419 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceMaterializationForInsertWithSelfScanRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceMaterializationForInsertWithSelfScanRule.java
@@ -63,6 +63,7 @@
if (sameDataset) {
MaterializeOperator materializeOperator = new MaterializeOperator();
+ materializeOperator.setSourceLocation(op.getSourceLocation());
MaterializePOperator materializePOperator = new MaterializePOperator(true);
materializeOperator.setPhysicalOperator(materializePOperator);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceRandomPartitioningFeedComputationRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceRandomPartitioningFeedComputationRule.java
index c41601b..fd6ff25 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceRandomPartitioningFeedComputationRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceRandomPartitioningFeedComputationRule.java
@@ -67,6 +67,7 @@
}
ExchangeOperator exchangeOp = new ExchangeOperator();
+ exchangeOp.setSourceLocation(op.getSourceLocation());
INodeDomain runtimeDomain = feedDataSource.getComputationNodeDomain();
exchangeOp.setPhysicalOperator(new RandomPartitionExchangePOperator(runtimeDomain));
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
index 6d53c13..7e2e4ea 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
@@ -27,6 +27,8 @@
import org.apache.asterix.algebra.operators.CommitOperator;
import org.apache.asterix.common.config.DatasetConfig.DatasetType;
import org.apache.asterix.common.config.DatasetConfig.IndexType;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.metadata.declared.DataSource;
import org.apache.asterix.metadata.declared.DataSourceIndex;
@@ -73,6 +75,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.TokenizeOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* This rule matches the pattern:
@@ -115,6 +118,7 @@
primaryIndexModificationOp.getAdditionalNonFilteringExpressions();
LogicalVariable newRecordVar;
LogicalVariable newMetaVar = null;
+ SourceLocation sourceLoc = primaryIndexModificationOp.getSourceLocation();
/**
* inputOp is the assign operator which extracts primary keys from the input
@@ -125,7 +129,7 @@
newRecordVar = getRecordVar(context, inputOp, newRecordExpr, 0);
if (newMetaExprs != null && !newMetaExprs.isEmpty()) {
if (newMetaExprs.size() > 1) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Number of meta records can't be more than 1. Number of meta records found = "
+ newMetaExprs.size());
}
@@ -146,7 +150,8 @@
String datasetName = datasetSource.getId().getDatasourceName();
Dataset dataset = mp.findDataset(dataverseName, datasetName);
if (dataset == null) {
- throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown dataset " + datasetName + " in dataverse " + dataverseName);
}
if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
return false;
@@ -156,7 +161,7 @@
String itemTypeName = dataset.getItemTypeName();
IAType itemType = mp.findType(dataset.getItemTypeDataverseName(), itemTypeName);
if (itemType.getTypeTag() != ATypeTag.OBJECT) {
- throw new AlgebricksException("Only record types can be indexed.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Only record types can be indexed.");
}
ARecordType recType = (ARecordType) itemType;
// meta type
@@ -195,8 +200,9 @@
.getAdditionalFilteringExpressions()) {
filteringExpression.getValue().getUsedVariables(filteringVars);
for (LogicalVariable var : filteringVars) {
- filteringExpressions
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(filteringExpression.getValue().getSourceLocation());
+ filteringExpressions.add(new MutableObject<ILogicalExpression>(varRef));
}
}
}
@@ -207,6 +213,7 @@
// Split the logical plan into "each secondary index update branch"
// to replicate each <PK,OBJECT> pair.
replicateOp = new ReplicateOperator(secondaryIndexTotalCnt);
+ replicateOp.setSourceLocation(sourceLoc);
replicateOp.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
replicateOp.setExecutionMode(ExecutionMode.PARTITIONED);
context.computeAndSetTypeEnvironmentForOperator(replicateOp);
@@ -270,10 +277,14 @@
secondaryKeyFields.get(i), secondaryKeyTypes.get(i).getTypeTag());
LogicalVariable skVar = fieldVarsForNewRecord.get(indexFieldId);
secondaryKeyVars.add(skVar);
- secondaryExpressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(skVar)));
+ VariableReferenceExpression skVarRef = new VariableReferenceExpression(skVar);
+ skVarRef.setSourceLocation(sourceLoc);
+ secondaryExpressions.add(new MutableObject<ILogicalExpression>(skVarRef));
if (primaryIndexModificationOp.getOperation() == Kind.UPSERT) {
- beforeOpSecondaryExpressions.add(new MutableObject<ILogicalExpression>(
- new VariableReferenceExpression(fieldVarsForBeforeOperation.get(indexFieldId))));
+ VariableReferenceExpression varRef =
+ new VariableReferenceExpression(fieldVarsForBeforeOperation.get(indexFieldId));
+ varRef.setSourceLocation(sourceLoc);
+ beforeOpSecondaryExpressions.add(new MutableObject<ILogicalExpression>(varRef));
}
}
@@ -283,7 +294,7 @@
Mutable<ILogicalExpression> filterExpression =
(primaryIndexModificationOp.getOperation() == Kind.UPSERT) ? null
: createFilterExpression(secondaryKeyVars, context.getOutputTypeEnvironment(currentTop),
- index.isOverridingKeyFieldTypes());
+ index.isOverridingKeyFieldTypes(), sourceLoc);
DataSourceIndex dataSourceIndex = new DataSourceIndex(index, dataverseName, datasetName, mp);
// Introduce the TokenizeOperator only when doing bulk-load,
@@ -306,8 +317,9 @@
List<Mutable<ILogicalExpression>> tokenizeKeyExprs = new ArrayList<>();
LogicalVariable tokenVar = context.newVar();
tokenizeKeyVars.add(tokenVar);
- tokenizeKeyExprs
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(tokenVar)));
+ VariableReferenceExpression tokenVarRef = new VariableReferenceExpression(tokenVar);
+ tokenVarRef.setSourceLocation(sourceLoc);
+ tokenizeKeyExprs.add(new MutableObject<ILogicalExpression>(tokenVarRef));
// Check the field type of the secondary key.
IAType secondaryKeyType;
@@ -325,8 +337,9 @@
if (isPartitioned) {
LogicalVariable lengthVar = context.newVar();
tokenizeKeyVars.add(lengthVar);
- tokenizeKeyExprs
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(lengthVar)));
+ VariableReferenceExpression lengthVarRef = new VariableReferenceExpression(lengthVar);
+ lengthVarRef.setSourceLocation(sourceLoc);
+ tokenizeKeyExprs.add(new MutableObject<ILogicalExpression>(lengthVarRef));
varTypes.add(BuiltinType.SHORTWITHOUTTYPEINFO);
}
@@ -335,6 +348,7 @@
primaryIndexModificationOp.getPrimaryKeyExpressions(), secondaryExpressions,
tokenizeKeyVars, filterExpression, primaryIndexModificationOp.getOperation(),
primaryIndexModificationOp.isBulkload(), isPartitioned, varTypes);
+ tokenUpdate.setSourceLocation(sourceLoc);
tokenUpdate.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
context.computeAndSetTypeEnvironmentForOperator(tokenUpdate);
replicateOutput = tokenUpdate;
@@ -343,6 +357,7 @@
primaryIndexModificationOp.getOperation(), primaryIndexModificationOp.isBulkload(),
primaryIndexModificationOp.getAdditionalNonFilteringExpressions() == null ? 0
: primaryIndexModificationOp.getAdditionalNonFilteringExpressions().size());
+ indexUpdate.setSourceLocation(sourceLoc);
indexUpdate.setAdditionalFilteringExpressions(filteringExpressions);
indexUpdate.getInputs().add(new MutableObject<ILogicalOperator>(tokenUpdate));
} else {
@@ -353,15 +368,18 @@
primaryIndexModificationOp.isBulkload(),
primaryIndexModificationOp.getAdditionalNonFilteringExpressions() == null ? 0
: primaryIndexModificationOp.getAdditionalNonFilteringExpressions().size());
+ indexUpdate.setSourceLocation(sourceLoc);
indexUpdate.setAdditionalFilteringExpressions(filteringExpressions);
replicateOutput = indexUpdate;
// We add the necessary expressions for upsert
if (primaryIndexModificationOp.getOperation() == Kind.UPSERT) {
indexUpdate.setBeforeOpSecondaryKeyExprs(beforeOpSecondaryExpressions);
if (filteringFields != null) {
+ VariableReferenceExpression varRef =
+ new VariableReferenceExpression(primaryIndexModificationOp.getBeforeOpFilterVar());
+ varRef.setSourceLocation(sourceLoc);
indexUpdate.setBeforeOpAdditionalFilteringExpression(
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
- primaryIndexModificationOp.getBeforeOpFilterVar())));
+ new MutableObject<ILogicalExpression>(varRef));
}
}
indexUpdate.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
@@ -383,8 +401,11 @@
keyVarList.add(keyVar);
AbstractFunctionCallExpression createMBR =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_MBR));
- createMBR.getArguments().add(new MutableObject<ILogicalExpression>(
- new VariableReferenceExpression(secondaryKeyVars.get(0))));
+ createMBR.setSourceLocation(sourceLoc);
+ VariableReferenceExpression secondaryKeyVarRef =
+ new VariableReferenceExpression(secondaryKeyVars.get(0));
+ secondaryKeyVarRef.setSourceLocation(sourceLoc);
+ createMBR.getArguments().add(new MutableObject<ILogicalExpression>(secondaryKeyVarRef));
createMBR.getArguments().add(new MutableObject<ILogicalExpression>(
new ConstantExpression(new AsterixConstantValue(new AInt32(dimension)))));
createMBR.getArguments().add(new MutableObject<ILogicalExpression>(
@@ -393,18 +414,22 @@
}
secondaryExpressions.clear();
for (LogicalVariable secondaryKeyVar : keyVarList) {
- secondaryExpressions.add(
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVar)));
+ VariableReferenceExpression secondaryKeyVarRef = new VariableReferenceExpression(secondaryKeyVar);
+ secondaryKeyVarRef.setSourceLocation(sourceLoc);
+ secondaryExpressions.add(new MutableObject<ILogicalExpression>(secondaryKeyVarRef));
}
if (isPointMBR && isBulkload) {
//for PointMBR optimization: see SecondaryRTreeOperationsHelper.buildLoadingJobSpec() and
//createFieldPermutationForBulkLoadOp(int) for more details.
for (LogicalVariable secondaryKeyVar : keyVarList) {
- secondaryExpressions.add(new MutableObject<ILogicalExpression>(
- new VariableReferenceExpression(secondaryKeyVar)));
+ VariableReferenceExpression secondaryKeyVarRef =
+ new VariableReferenceExpression(secondaryKeyVar);
+ secondaryKeyVarRef.setSourceLocation(sourceLoc);
+ secondaryExpressions.add(new MutableObject<ILogicalExpression>(secondaryKeyVarRef));
}
}
AssignOperator assignCoordinates = new AssignOperator(keyVarList, keyExprList);
+ assignCoordinates.setSourceLocation(sourceLoc);
assignCoordinates.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
context.computeAndSetTypeEnvironmentForOperator(assignCoordinates);
replicateOutput = assignCoordinates;
@@ -420,6 +445,7 @@
originalKeyVarList.add(keyVar);
AbstractFunctionCallExpression createMBR = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_MBR));
+ createMBR.setSourceLocation(sourceLoc);
createMBR.getArguments().add(beforeOpSecondaryExpressions.get(0));
createMBR.getArguments().add(new MutableObject<ILogicalExpression>(
new ConstantExpression(new AsterixConstantValue(new AInt32(dimension)))));
@@ -429,10 +455,13 @@
}
beforeOpSecondaryExpressions.clear();
for (LogicalVariable secondaryKeyVar : originalKeyVarList) {
- beforeOpSecondaryExpressions.add(new MutableObject<ILogicalExpression>(
- new VariableReferenceExpression(secondaryKeyVar)));
+ VariableReferenceExpression secondaryKeyVarRef =
+ new VariableReferenceExpression(secondaryKeyVar);
+ secondaryKeyVarRef.setSourceLocation(sourceLoc);
+ beforeOpSecondaryExpressions.add(new MutableObject<ILogicalExpression>(secondaryKeyVarRef));
}
originalAssignCoordinates = new AssignOperator(originalKeyVarList, originalKeyExprList);
+ originalAssignCoordinates.setSourceLocation(sourceLoc);
originalAssignCoordinates.getInputs().add(new MutableObject<ILogicalOperator>(assignCoordinates));
context.computeAndSetTypeEnvironmentForOperator(originalAssignCoordinates);
} else {
@@ -440,7 +469,7 @@
// nullable.
boolean forceFilter = keyPairType.second;
filterExpression = createFilterExpression(keyVarList,
- context.getOutputTypeEnvironment(assignCoordinates), forceFilter);
+ context.getOutputTypeEnvironment(assignCoordinates), forceFilter, sourceLoc);
}
DataSourceIndex dataSourceIndex = new DataSourceIndex(index, dataverseName, datasetName, mp);
indexUpdate = new IndexInsertDeleteUpsertOperator(dataSourceIndex,
@@ -448,12 +477,16 @@
primaryIndexModificationOp.getOperation(), primaryIndexModificationOp.isBulkload(),
primaryIndexModificationOp.getAdditionalNonFilteringExpressions() == null ? 0
: primaryIndexModificationOp.getAdditionalNonFilteringExpressions().size());
+ indexUpdate.setSourceLocation(sourceLoc);
indexUpdate.setAdditionalFilteringExpressions(filteringExpressions);
if (primaryIndexModificationOp.getOperation() == Kind.UPSERT) {
// set before op secondary key expressions
if (filteringFields != null) {
- indexUpdate.setBeforeOpAdditionalFilteringExpression(new MutableObject<ILogicalExpression>(
- new VariableReferenceExpression(primaryIndexModificationOp.getBeforeOpFilterVar())));
+ VariableReferenceExpression varRef =
+ new VariableReferenceExpression(primaryIndexModificationOp.getBeforeOpFilterVar());
+ varRef.setSourceLocation(sourceLoc);
+ indexUpdate.setBeforeOpAdditionalFilteringExpression(
+ new MutableObject<ILogicalExpression>(varRef));
}
// set filtering expressions
indexUpdate.setBeforeOpSecondaryKeyExprs(beforeOpSecondaryExpressions);
@@ -546,6 +579,7 @@
boolean afterOp) throws AlgebricksException {
List<LogicalVariable> vars = new ArrayList<>();
List<Mutable<ILogicalExpression>> exprs = new ArrayList<>();
+ SourceLocation sourceLoc = currentTop.getSourceLocation();
for (Index index : indexes) {
if (index.isPrimaryIndex()) {
continue;
@@ -566,7 +600,8 @@
? indicators.get(i).intValue() == Index.RECORD_INDICATOR ? recordVar : metaVar : recordVar;
LogicalVariable fieldVar = context.newVar();
// create record variable ref
- Mutable<ILogicalExpression> varRef = new MutableObject<>(new VariableReferenceExpression(sourceVar));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(sourceVar);
+ varRef.setSourceLocation(sourceLoc);
IAType fieldType = sourceType.getSubFieldType(indexFieldId.fieldName);
AbstractFunctionCallExpression theFieldAccessFunc;
if (fieldType == null) {
@@ -574,11 +609,12 @@
// make handling of records with incorrect value type for this field easier and cleaner
context.addNotToBeInlinedVar(fieldVar);
// create field access
- AbstractFunctionCallExpression fieldAccessFunc =
- getOpenOrNestedFieldAccessFunction(varRef, indexFieldId.fieldName);
+ AbstractFunctionCallExpression fieldAccessFunc = getOpenOrNestedFieldAccessFunction(
+ new MutableObject<>(varRef), indexFieldId.fieldName, sourceLoc);
// create cast
theFieldAccessFunc = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(
index.isEnforced() ? BuiltinFunctions.CAST_TYPE : BuiltinFunctions.CAST_TYPE_LAX));
+ theFieldAccessFunc.setSourceLocation(sourceLoc);
// The first argument is the field
theFieldAccessFunc.getArguments().add(new MutableObject<ILogicalExpression>(fieldAccessFunc));
TypeCastUtils.setRequiredAndInputTypes(theFieldAccessFunc, skTypes.get(i), BuiltinType.ANY);
@@ -587,9 +623,10 @@
int pos = indexFieldId.fieldName.size() > 1 ? -1
: sourceType.getFieldIndex(indexFieldId.fieldName.get(0));
// Field not found --> This is either an open field or a nested field. it can't be accessed by index
- theFieldAccessFunc =
- (pos == -1) ? getOpenOrNestedFieldAccessFunction(varRef, indexFieldId.fieldName)
- : getClosedFieldAccessFunction(varRef, pos);
+ theFieldAccessFunc = (pos == -1)
+ ? getOpenOrNestedFieldAccessFunction(new MutableObject<>(varRef), indexFieldId.fieldName,
+ sourceLoc)
+ : getClosedFieldAccessFunction(new MutableObject<>(varRef), pos, sourceLoc);
}
vars.add(fieldVar);
exprs.add(new MutableObject<ILogicalExpression>(theFieldAccessFunc));
@@ -598,6 +635,7 @@
}
// AssignOperator assigns secondary keys to their vars
AssignOperator castedFieldAssignOperator = new AssignOperator(vars, exprs);
+ castedFieldAssignOperator.setSourceLocation(sourceLoc);
return introduceNewOp(context, currentTop, castedFieldAssignOperator, afterOp);
}
@@ -618,15 +656,17 @@
}
private static AbstractFunctionCallExpression getClosedFieldAccessFunction(Mutable<ILogicalExpression> varRef,
- int position) {
+ int position, SourceLocation sourceLoc) {
Mutable<ILogicalExpression> indexRef =
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(position))));
- return new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX),
- varRef, indexRef);
+ ScalarFunctionCallExpression fnExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX), varRef, indexRef);
+ fnExpr.setSourceLocation(sourceLoc);
+ return fnExpr;
}
private static AbstractFunctionCallExpression getOpenOrNestedFieldAccessFunction(Mutable<ILogicalExpression> varRef,
- List<String> fields) {
+ List<String> fields, SourceLocation sourceLoc) {
ScalarFunctionCallExpression func;
if (fields.size() > 1) {
IAObject fieldList = stringListToAOrderedList(fields);
@@ -641,6 +681,7 @@
func = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME),
varRef, fieldRef);
}
+ func.setSourceLocation(sourceLoc);
return func;
}
@@ -657,7 +698,8 @@
}
private Mutable<ILogicalExpression> createFilterExpression(List<LogicalVariable> secondaryKeyVars,
- IVariableTypeEnvironment typeEnv, boolean forceFilter) throws AlgebricksException {
+ IVariableTypeEnvironment typeEnv, boolean forceFilter, SourceLocation sourceLoc)
+ throws AlgebricksException {
List<Mutable<ILogicalExpression>> filterExpressions = new ArrayList<>();
// Add 'is not null' to all nullable secondary index keys as a filtering
// condition.
@@ -666,12 +708,16 @@
if (!NonTaggedFormatUtil.isOptional(secondaryKeyType) && !forceFilter) {
continue;
}
+ VariableReferenceExpression secondaryKeyVarRef = new VariableReferenceExpression(secondaryKeyVar);
+ secondaryKeyVarRef.setSourceLocation(sourceLoc);
ScalarFunctionCallExpression isUnknownFuncExpr =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.IS_UNKNOWN),
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVar)));
+ new MutableObject<ILogicalExpression>(secondaryKeyVarRef));
+ isUnknownFuncExpr.setSourceLocation(sourceLoc);
ScalarFunctionCallExpression notFuncExpr =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT),
new MutableObject<ILogicalExpression>(isUnknownFuncExpr));
+ notFuncExpr.setSourceLocation(sourceLoc);
filterExpressions.add(new MutableObject<ILogicalExpression>(notFuncExpr));
}
// No nullable secondary keys.
@@ -681,8 +727,10 @@
Mutable<ILogicalExpression> filterExpression;
if (filterExpressions.size() > 1) {
// Create a conjunctive condition.
- filterExpression = new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), filterExpressions));
+ ScalarFunctionCallExpression andExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), filterExpressions);
+ andExpr.setSourceLocation(sourceLoc);
+ filterExpression = new MutableObject<>(andExpr);
} else {
filterExpression = filterExpressions.get(0);
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java
index c5cb6ae..926df0e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java
@@ -64,12 +64,14 @@
LogicalVariable v = context.newVar();
AssignOperator assignOperator =
new AssignOperator(v, new MutableObject<ILogicalExpression>(selectOperator.getCondition().getValue()));
-
+ assignOperator.setSourceLocation(selectOperator.getSourceLocation());
//set the input of the new assign-operator to the input of the select-operator.
assignOperator.getInputs().add(childOfSelect);
//set the result value of the assign-operator to the condition of the select-operator
- selectOperator.getCondition().setValue(new VariableReferenceExpression(v));//scalarFunctionCallExpression);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(v);
+ varRef.setSourceLocation(selectOperator.getSourceLocation());
+ selectOperator.getCondition().setValue(varRef);//scalarFunctionCallExpression);
selectOperator.getInputs().set(0, new MutableObject<ILogicalOperator>(assignOperator));
context.computeAndSetTypeEnvironmentForOperator(assignOperator);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceUnnestForCollectionToSequenceRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceUnnestForCollectionToSequenceRule.java
index 561afb9..02d8f14 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceUnnestForCollectionToSequenceRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceUnnestForCollectionToSequenceRule.java
@@ -85,11 +85,13 @@
}
/** change the assign operator to an unnest operator */
LogicalVariable var = assign.getVariables().get(0);
+ UnnestingFunctionCallExpression scanCollExpr =
+ new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
+ new MutableObject<ILogicalExpression>(argExpr));
+ scanCollExpr.setSourceLocation(func.getSourceLocation());
@SuppressWarnings("unchecked")
- UnnestOperator unnest = new UnnestOperator(var,
- new MutableObject<ILogicalExpression>(new UnnestingFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
- new MutableObject<ILogicalExpression>(argExpr))));
+ UnnestOperator unnest = new UnnestOperator(var, new MutableObject<ILogicalExpression>(scanCollExpr));
+ unnest.setSourceLocation(assign.getSourceLocation());
unnest.getInputs().addAll(assign.getInputs());
opRef.setValue(unnest);
context.computeAndSetTypeEnvironmentForOperator(unnest);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
index 2fe6460..7f23775 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ListifyUnnestingFunctionRule.java
@@ -43,6 +43,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* In principle, an unnest operator produces a sequence of items from a collection.
@@ -104,25 +105,35 @@
return false;
}
+ SourceLocation sourceLoc = func.getSourceLocation();
+
// Generates the listified collection in a subplan.
SubplanOperator subplanOperator = new SubplanOperator();
+ subplanOperator.setSourceLocation(sourceLoc);
// Creates a nested tuple source operator.
NestedTupleSourceOperator ntsOperator = new NestedTupleSourceOperator(new MutableObject<>(subplanOperator));
-
+ ntsOperator.setSourceLocation(sourceLoc);
// Unnests the dataset.
LogicalVariable unnestVar = context.newVar();
- ILogicalExpression unnestExpr = new UnnestingFunctionCallExpression(functionInfo, func.getArguments());
+ UnnestingFunctionCallExpression unnestExpr =
+ new UnnestingFunctionCallExpression(functionInfo, func.getArguments());
+ unnestExpr.setSourceLocation(sourceLoc);
UnnestOperator unnestOperator = new UnnestOperator(unnestVar, new MutableObject<>(unnestExpr));
+ unnestOperator.setSourceLocation(sourceLoc);
unnestOperator.getInputs().add(new MutableObject<>(ntsOperator));
// Listify the dataset into one collection.
LogicalVariable aggVar = context.newVar();
- Mutable<ILogicalExpression> aggArgExprRef = new MutableObject<>(new VariableReferenceExpression(unnestVar));
- ILogicalExpression aggExpr =
+ VariableReferenceExpression unnestVarRef = new VariableReferenceExpression(unnestVar);
+ unnestVarRef.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> aggArgExprRef = new MutableObject<>(unnestVarRef);
+ AggregateFunctionCallExpression aggExpr =
new AggregateFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.LISTIFY), false,
new ArrayList<>(Collections.singletonList(aggArgExprRef)));
+ aggExpr.setSourceLocation(sourceLoc);
AggregateOperator aggregateOperator = new AggregateOperator(new ArrayList<>(Collections.singletonList(aggVar)),
new ArrayList<>(Collections.singletonList(new MutableObject<>(aggExpr))));
+ aggregateOperator.setSourceLocation(sourceLoc);
aggregateOperator.getInputs().add(new MutableObject<>(unnestOperator));
// Adds the aggregate operator as the root of the subplan.
@@ -136,7 +147,9 @@
// asterixdb/asterix-app/src/test/resources/runtimets/results/list/query-ASTERIXDB-159-3
subplanOperator.getInputs().add(op.getInputs().get(0));
op.getInputs().set(0, new MutableObject<>(subplanOperator));
- exprRef.setValue(new VariableReferenceExpression(aggVar));
+ VariableReferenceExpression aggVarRef = new VariableReferenceExpression(aggVar);
+ aggVarRef.setSourceLocation(sourceLoc);
+ exprRef.setValue(aggVarRef);
// Computes type environments for new operators.
context.computeAndSetTypeEnvironmentForOperator(ntsOperator);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java
index d6581a2..32fa744 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java
@@ -25,6 +25,8 @@
import java.util.List;
import org.apache.asterix.algebra.base.OperatorAnnotation;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.om.base.AInt32;
import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.constants.AsterixConstantValue;
@@ -140,6 +142,7 @@
// create an assign
LogicalVariable v = context.newVar();
AssignOperator a2 = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
+ a2.setSourceLocation(expr.getSourceLocation());
pushFieldAssign(a2, topOp, context);
context.computeAndSetTypeEnvironmentForOperator(a2);
ILogicalExpression arg = f.getArguments().get(0).getValue();
@@ -154,7 +157,9 @@
context.addPrimaryKey(pk);
}
}
- exprRef.setValue(new VariableReferenceExpression(v));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(v);
+ varRef.setSourceLocation(expr.getSourceLocation());
+ exprRef.setValue(varRef);
return true;
} else {
boolean pushed = false;
@@ -217,7 +222,7 @@
}
}
}
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, a2.getSourceLocation(),
"Field access " + getFirstExpr(a2) + " does not correspond to any input of operator " + topOp);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
index 13ff0ee..cd99c28 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/MetaFunctionToMetaVariableRule.java
@@ -21,6 +21,8 @@
import java.util.ArrayList;
import java.util.List;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.metadata.declared.DataSource;
import org.apache.asterix.metadata.declared.IMutationDataSource;
@@ -45,6 +47,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* This rule rewrites all meta() function calls in a query plan
@@ -204,7 +207,8 @@
}
// The user query provides more than one parameter for the meta function.
if (argRefs.size() > 1) {
- throw new AlgebricksException("The meta function can at most have one argument!");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, expr.getSourceLocation(),
+ "The meta function can at most have one argument!");
}
// The user query provides exact one parameter for the meta function.
@@ -218,16 +222,21 @@
if (!dataVar.equals(argVar)) {
return false;
}
- exprRef.setValue(new VariableReferenceExpression(metaVar));
+ VariableReferenceExpression metaVarRef = new VariableReferenceExpression(metaVar);
+ metaVarRef.setSourceLocation(expr.getSourceLocation());
+ exprRef.setValue(metaVarRef);
return true;
}
// The user query provides zero parameter for the meta function.
if (variableRequired) {
- throw new AlgebricksException("Cannot resolve to ambiguity on the meta function call --"
- + " there are more than one dataset choices!");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, expr.getSourceLocation(),
+ "Cannot resolve to ambiguity on the meta function call --"
+ + " there are more than one dataset choices!");
}
- exprRef.setValue(new VariableReferenceExpression(metaVar));
+ VariableReferenceExpression metaVarRef = new VariableReferenceExpression(metaVar);
+ metaVarRef.setSourceLocation(expr.getSourceLocation());
+ exprRef.setValue(metaVarRef);
return true;
}
}
@@ -268,6 +277,7 @@
if (!funcExpr.getFunctionIdentifier().equals(BuiltinFunctions.META_KEY)) {
return false;
}
+ SourceLocation sourceLoc = expr.getSourceLocation();
// Get arguments
// first argument : Resource key
// second argument: field
@@ -286,13 +296,18 @@
functionIdentifier = BuiltinFunctions.FIELD_ACCESS_BY_NAME;
break;
default:
- throw new AlgebricksException("Unsupported field name type " + fieldNameType.getTypeTag());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unsupported field name type " + fieldNameType.getTypeTag());
}
IFunctionInfo finfoAccess = FunctionUtil.getFunctionInfo(functionIdentifier);
ArrayList<Mutable<ILogicalExpression>> argExprs = new ArrayList<>(2);
- argExprs.add(new MutableObject<>(new VariableReferenceExpression(metaVar)));
+ VariableReferenceExpression metaVarRef = new VariableReferenceExpression(metaVar);
+ metaVarRef.setSourceLocation(sourceLoc);
+ argExprs.add(new MutableObject<>(metaVarRef));
argExprs.add(new MutableObject<>(fieldNameExpression));
- exprRef.setValue(new ScalarFunctionCallExpression(finfoAccess, argExprs));
+ ScalarFunctionCallExpression fAccessExpr = new ScalarFunctionCallExpression(finfoAccess, argExprs);
+ fAccessExpr.setSourceLocation(sourceLoc);
+ exprRef.setValue(fAccessExpr);
return true;
}
}
@@ -321,7 +336,9 @@
// Function is meta key access
for (int i = 0; i < metaKeyAccessExpressions.size(); i++) {
if (metaKeyAccessExpressions.get(i).equals(funcExpr)) {
- exprRef.setValue(new VariableReferenceExpression(keyVars.get(i)));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(keyVars.get(i));
+ varRef.setSourceLocation(expr.getSourceLocation());
+ exprRef.setValue(varRef);
return true;
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java
index 233171e..f51358b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java
@@ -63,8 +63,10 @@
ArrayList<Mutable<ILogicalExpression>> rOpExprList = new ArrayList<Mutable<ILogicalExpression>>();
StatefulFunctionCallExpression fce = new StatefulFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.TID), UnpartitionedPropertyComputer.INSTANCE);
+ fce.setSourceLocation(op.getSourceLocation());
rOpExprList.add(new MutableObject<ILogicalExpression>(fce));
RunningAggregateOperator rOp = new RunningAggregateOperator(rOpVars, rOpExprList);
+ rOp.setSourceLocation(unnest.getSourceLocation());
rOp.setExecutionMode(unnest.getExecutionMode());
RunningAggregatePOperator rPop = new RunningAggregatePOperator();
rOp.setPhysicalOperator(rPop);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
index cf5088b..82c0d4c 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
@@ -221,12 +221,15 @@
aggArgs.add(aggOpExpr.getArguments().get(0));
AggregateFunctionCallExpression aggFuncExpr =
BuiltinFunctions.makeAggregateFunctionExpression(aggFuncIdent, aggArgs);
+ aggFuncExpr.setSourceLocation(assignFuncExpr.getSourceLocation());
LogicalVariable newVar = context.newVar();
aggOp.getVariables().add(newVar);
aggOp.getExpressions().add(new MutableObject<ILogicalExpression>(aggFuncExpr));
// The assign now just "renames" the variable to make sure the upstream plan still works.
- srcAssignExprRef.setValue(new VariableReferenceExpression(newVar));
+ VariableReferenceExpression newVarRef = new VariableReferenceExpression(newVar);
+ newVarRef.setSourceLocation(assignFuncExpr.getSourceLocation());
+ srcAssignExprRef.setValue(newVarRef);
}
context.computeAndSetTypeEnvironmentForOperator(aggOp);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoNestedSubplanRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoNestedSubplanRule.java
index ccf7ccb..3c97ec8 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoNestedSubplanRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoNestedSubplanRule.java
@@ -285,8 +285,10 @@
LogicalVariable newVar = context.newVar();
AggregateFunctionCallExpression aggFun =
BuiltinFunctions.makeAggregateFunctionExpression(fi, fce.getArguments());
+ aggFun.setSourceLocation(expr.getSourceLocation());
rewriteAggregateInNestedSubplan(argVar, nspOp, aggFun, newVar, context);
- ILogicalExpression newVarExpr = new VariableReferenceExpression(newVar);
+ VariableReferenceExpression newVarExpr = new VariableReferenceExpression(newVar);
+ newVarExpr.setSourceLocation(expr.getSourceLocation());
aggregateExprToVarExpr.put(expr, newVarExpr);
return new Pair<>(Boolean.TRUE, newVarExpr);
} else {
@@ -328,6 +330,7 @@
(AbstractFunctionCallExpression) aggOp.getExpressions().get(i).getValue();
AggregateFunctionCallExpression newAggFun = BuiltinFunctions
.makeAggregateFunctionExpression(aggFun.getFunctionIdentifier(), new ArrayList<>());
+ newAggFun.setSourceLocation(oldAggExpr.getSourceLocation());
for (Mutable<ILogicalExpression> arg : oldAggExpr.getArguments()) {
ILogicalExpression cloned = arg.getValue().cloneExpression();
newAggFun.getArguments().add(new MutableObject<>(cloned));
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java
index 769894d..cf8935a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java
@@ -25,6 +25,8 @@
import org.apache.asterix.algebra.base.OperatorAnnotation;
import org.apache.asterix.common.config.DatasetConfig.DatasetType;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.metadata.declared.DataSource;
import org.apache.asterix.metadata.declared.DataSourceId;
import org.apache.asterix.metadata.declared.MetadataProvider;
@@ -125,7 +127,8 @@
Dataset dataset = mp.findDataset(asid.getDataverseName(), asid.getDatasourceName());
if (dataset == null) {
- throw new AlgebricksException("Dataset " + asid.getDatasourceName() + " not found.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, scan.getSourceLocation(),
+ "Dataset " + asid.getDatasourceName() + " not found.");
}
if (dataset.getDatasetType() != DatasetType.INTERNAL) {
return false;
@@ -228,8 +231,10 @@
for (Pair<LogicalVariable, LogicalVariable> m : varMappings) {
LogicalVariable v2 = context.newVar();
LogicalVariable oldVar = access.getVariables().get(0);
+ VariableReferenceExpression v2Ref = new VariableReferenceExpression(v2);
+ v2Ref.setSourceLocation(g.getSourceLocation());
g.getDecorList().add(new Pair<LogicalVariable, Mutable<ILogicalExpression>>(oldVar,
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v2))));
+ new MutableObject<ILogicalExpression>(v2Ref)));
changed = true;
access.getVariables().set(0, v2);
VariableUtilities.substituteVariables(access, m.first, m.second, context);
@@ -275,8 +280,9 @@
}
}
}
- throw new AlgebricksException("Field access " + access.getExpressions().get(0).getValue()
- + " does not correspond to any input of operator " + op2);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, access.getSourceLocation(),
+ "Field access " + access.getExpressions().get(0).getValue()
+ + " does not correspond to any input of operator " + op2);
} else {
// Check if the accessed field is not one of the partitioning key
// fields. If yes, we can equate the two variables.
@@ -294,7 +300,8 @@
MetadataProvider mp = (MetadataProvider) context.getMetadataProvider();
Dataset dataset = mp.findDataset(asid.getDataverseName(), asid.getDatasourceName());
if (dataset == null) {
- throw new AlgebricksException("Dataset " + asid.getDatasourceName() + " not found.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, scan.getSourceLocation(),
+ "Dataset " + asid.getDatasourceName() + " not found.");
}
if (dataset.getDatasetType() != DatasetType.INTERNAL) {
setAsFinal(access, context, finalAnnot);
@@ -319,7 +326,9 @@
return false;
}
LogicalVariable keyVar = scan.getVariables().get(p);
- access.getExpressions().get(0).setValue(new VariableReferenceExpression(keyVar));
+ VariableReferenceExpression keyVarRef = new VariableReferenceExpression(keyVar);
+ keyVarRef.setSourceLocation(varRef.getSourceLocation());
+ access.getExpressions().get(0).setValue(keyVarRef);
return true;
}
@@ -368,8 +377,11 @@
return false;
}
AssignOperator a2 = (AssignOperator) op2;
- if (getFirstExpr(access).equals(getFirstExpr(a2))) {
- access.getExpressions().get(0).setValue(new VariableReferenceExpression(a2.getVariables().get(0)));
+ ILogicalExpression accessExpr0 = getFirstExpr(access);
+ if (accessExpr0.equals(getFirstExpr(a2))) {
+ VariableReferenceExpression varRef = new VariableReferenceExpression(a2.getVariables().get(0));
+ varRef.setSourceLocation(accessExpr0.getSourceLocation());
+ access.getExpressions().get(0).setValue(varRef);
return true;
} else {
return false;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushLimitIntoOrderByRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushLimitIntoOrderByRule.java
index 4c0247f..56dc675 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushLimitIntoOrderByRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushLimitIntoOrderByRule.java
@@ -133,6 +133,7 @@
// Create the new ORDER operator, set the topK value, and replace the current one.
OrderOperator newOrderOp = new OrderOperator(orderOp.getOrderExpressions(), (int) topK);
+ newOrderOp.setSourceLocation(orderOp.getSourceLocation());
newOrderOp.setPhysicalOperator(
new StableSortPOperator(physicalOptimizationConfig.getMaxFramesExternalSort(), newOrderOp.getTopK()));
newOrderOp.getInputs().addAll(orderOp.getInputs());
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveLeftOuterUnnestForLeftOuterJoinRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveLeftOuterUnnestForLeftOuterJoinRule.java
index 1d7a61a..364816b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveLeftOuterUnnestForLeftOuterJoinRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveLeftOuterUnnestForLeftOuterJoinRule.java
@@ -262,13 +262,16 @@
List<LogicalVariable> lhs = new ArrayList<>();
List<Mutable<ILogicalExpression>> rhs = new ArrayList<>();
lhs.add(outerUnnest.getVariable());
- rhs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(listifyVar)));
+ VariableReferenceExpression listifyVarRef = new VariableReferenceExpression(listifyVar);
+ listifyVarRef.setSourceLocation(gbyOperator.getSourceLocation());
+ rhs.add(new MutableObject<ILogicalExpression>(listifyVarRef));
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> gbyList = gbyOperator.getGroupByList();
for (Pair<LogicalVariable, Mutable<ILogicalExpression>> gbyPair : gbyList) {
lhs.add(gbyPair.first);
rhs.add(gbyPair.second);
}
AssignOperator assignOp = new AssignOperator(lhs, rhs);
+ assignOp.setSourceLocation(outerUnnest.getSourceLocation());
assignOp.getInputs().add(new MutableObject<ILogicalOperator>(lojOperator));
context.computeAndSetTypeEnvironmentForOperator(assignOp);
opRef.setValue(assignOp);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantListifyRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantListifyRule.java
index 7b46b39..96b052b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantListifyRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/RemoveRedundantListifyRule.java
@@ -205,8 +205,11 @@
List<LogicalVariable> assgnVars = new ArrayList<>(1);
assgnVars.add(unnest1.getVariable());
List<Mutable<ILogicalExpression>> assgnExprs = new ArrayList<>(1);
- assgnExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(paramVar)));
+ VariableReferenceExpression paramVarRef = new VariableReferenceExpression(paramVar);
+ paramVarRef.setSourceLocation(arg0.getSourceLocation());
+ assgnExprs.add(new MutableObject<ILogicalExpression>(paramVarRef));
AssignOperator assign = new AssignOperator(assgnVars, assgnExprs);
+ assign.setSourceLocation(agg.getSourceLocation());
assign.getInputs().add(agg.getInputs().get(0));
context.computeAndSetTypeEnvironmentForOperator(assign);
LogicalVariable posVar = unnest1.getPositionalVariable();
@@ -220,8 +223,10 @@
List<Mutable<ILogicalExpression>> rAggExprs = new ArrayList<>(1);
StatefulFunctionCallExpression tidFun = new StatefulFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.TID), UnpartitionedPropertyComputer.INSTANCE);
+ tidFun.setSourceLocation(agg.getSourceLocation());
rAggExprs.add(new MutableObject<ILogicalExpression>(tidFun));
RunningAggregateOperator rAgg = new RunningAggregateOperator(raggVars, rAggExprs);
+ rAgg.setSourceLocation(agg.getSourceLocation());
rAgg.getInputs().add(new MutableObject<ILogicalOperator>(assign));
aggregateParentRef.setValue(rAgg);
context.computeAndSetTypeEnvironmentForOperator(rAgg);
@@ -289,6 +294,7 @@
List<LogicalVariable> assgnVars = new ArrayList<>(1);
assgnVars.add(aggVar);
AssignOperator assign = new AssignOperator(assgnVars, scanFunc.getArguments());
+ assign.setSourceLocation(agg.getSourceLocation());
assign.getInputs().add(unnest.getInputs().get(0));
context.computeAndSetTypeEnvironmentForOperator(assign);
opRef.setValue(assign);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
index 4afccb0..fed17bd 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
@@ -25,6 +25,8 @@
import org.apache.asterix.algebra.operators.physical.InvertedIndexPOperator;
import org.apache.asterix.algebra.operators.physical.RTreeSearchPOperator;
import org.apache.asterix.common.config.DatasetConfig.IndexType;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.metadata.declared.DataSourceId;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.metadata.entities.Dataset;
@@ -131,6 +133,7 @@
AggregateFunctionCallExpression serialAggExpr =
BuiltinFunctions.makeSerializableAggregateFunctionExpression(
expr.getFunctionIdentifier(), expr.getArguments());
+ serialAggExpr.setSourceLocation(expr.getSourceLocation());
if (mergeAggregationExpressionFactory.createMergeAggregation(
originalVariables.get(i), serialAggExpr, context) == null) {
hasIntermediateAgg = false;
@@ -157,6 +160,7 @@
AggregateFunctionCallExpression serialAggExpr =
BuiltinFunctions.makeSerializableAggregateFunctionExpression(
expr.getFunctionIdentifier(), expr.getArguments());
+ serialAggExpr.setSourceLocation(expr.getSourceLocation());
aggOp.getExpressions().get(i).setValue(serialAggExpr);
}
ExternalGroupByPOperator externalGby = new ExternalGroupByPOperator(
@@ -184,8 +188,7 @@
context.getPhysicalOptimizationConfig().getMaxFramesForGroupBy()));
}
}
- } else if (((AbstractLogicalOperator) (r0.getValue())).getOperatorTag()
- .equals(LogicalOperatorTag.RUNNINGAGGREGATE)) {
+ } else if (r0.getValue().getOperatorTag().equals(LogicalOperatorTag.RUNNINGAGGREGATE)) {
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> gbyList = gby.getGroupByList();
List<LogicalVariable> columnList = new ArrayList<LogicalVariable>(gbyList.size());
for (Pair<LogicalVariable, Mutable<ILogicalExpression>> p : gbyList) {
@@ -198,8 +201,9 @@
op.setPhysicalOperator(new PreclusteredGroupByPOperator(columnList, gby.isGroupAll(),
context.getPhysicalOptimizationConfig().getMaxFramesForGroupBy()));
} else {
- throw new AlgebricksException("Unsupported nested operator within a group-by: "
- + ((AbstractLogicalOperator) (r0.getValue())).getOperatorTag().name());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, gby.getSourceLocation(),
+ "Unsupported nested operator within a group-by: "
+ + r0.getValue().getOperatorTag().name());
}
}
}
@@ -235,8 +239,9 @@
mp.findDataSourceIndex(jobGenParams.getIndexName(), dataSourceId);
INodeDomain storageDomain = mp.findNodeDomain(dataset.getNodeGroupName());
if (dsi == null) {
- throw new AlgebricksException("Could not find index " + jobGenParams.getIndexName()
- + " for dataset " + dataSourceId);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, op.getSourceLocation(),
+ "Could not find index " + jobGenParams.getIndexName() + " for dataset "
+ + dataSourceId);
}
IndexType indexType = jobGenParams.getIndexType();
boolean requiresBroadcast = jobGenParams.getRequiresBroadcast();
@@ -288,13 +293,13 @@
private static void generateMergeAggregationExpressions(GroupByOperator gby, IOptimizationContext context)
throws AlgebricksException {
if (gby.getNestedPlans().size() != 1) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, gby.getSourceLocation(),
"External group-by currently works only for one nested plan with one root containing"
+ "an aggregate and a nested-tuple-source.");
}
ILogicalPlan p0 = gby.getNestedPlans().get(0);
if (p0.getRoots().size() != 1) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, gby.getSourceLocation(),
"External group-by currently works only for one nested plan with one root containing"
+ "an aggregate and a nested-tuple-source.");
}
@@ -303,8 +308,9 @@
Mutable<ILogicalOperator> r0 = p0.getRoots().get(0);
AbstractLogicalOperator r0Logical = (AbstractLogicalOperator) r0.getValue();
if (r0Logical.getOperatorTag() != LogicalOperatorTag.AGGREGATE) {
- throw new AlgebricksException("The merge aggregation expression generation should not process a "
- + r0Logical.getOperatorTag() + " operator.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, gby.getSourceLocation(),
+ "The merge aggregation expression generation should not process a " + r0Logical.getOperatorTag()
+ + " operator.");
}
AggregateOperator aggOp = (AggregateOperator) r0.getValue();
List<Mutable<ILogicalExpression>> aggFuncRefs = aggOp.getExpressions();
@@ -312,11 +318,13 @@
int n = aggOp.getExpressions().size();
List<Mutable<ILogicalExpression>> mergeExpressionRefs = new ArrayList<Mutable<ILogicalExpression>>();
for (int i = 0; i < n; i++) {
+ ILogicalExpression aggFuncExpr = aggFuncRefs.get(i).getValue();
ILogicalExpression mergeExpr = mergeAggregationExpressionFactory
- .createMergeAggregation(aggProducedVars.get(i), aggFuncRefs.get(i).getValue(), context);
+ .createMergeAggregation(aggProducedVars.get(i), aggFuncExpr, context);
if (mergeExpr == null) {
- throw new AlgebricksException("The aggregation function " + aggFuncRefs.get(i).getValue()
- + " does not have a registered intermediate aggregation function.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, aggFuncExpr.getSourceLocation(),
+ "The aggregation function " + aggFuncExpr
+ + " does not have a registered intermediate aggregation function.");
}
mergeExpressionRefs.add(new MutableObject<ILogicalExpression>(mergeExpr));
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
index 48a744d..52858e5 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
@@ -19,6 +19,8 @@
package org.apache.asterix.optimizer.rules;
import org.apache.asterix.common.config.GlobalConfig;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
@@ -110,7 +112,7 @@
if (reqType == null || !reqType.isOpen()) {
int n = expr.getArguments().size();
if (n % 2 > 0) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, expr.getSourceLocation(),
"Record constructor expected to have an even number of arguments: " + expr);
}
for (int i = 0; i < n / 2; i++) {
@@ -166,7 +168,7 @@
throws AlgebricksException {
Object varType = env.getVarType(expr.getVariableReference());
if (varType == null) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, expr.getSourceLocation(),
"Could not infer type for variable '" + expr.getVariableReference() + "'.");
}
return new ClosedDataInfo(false, TypeHelper.isClosed((IAType) varType), expr);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetupCommitExtensionOpRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetupCommitExtensionOpRule.java
index 90491d3..cc50dce4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetupCommitExtensionOpRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetupCommitExtensionOpRule.java
@@ -104,6 +104,7 @@
//create ExtensionOperator and put the commitOperator in it.
DelegateOperator extensionOperator = new DelegateOperator(commitOperator);
+ extensionOperator.setSourceLocation(eOp.getSourceLocation());
extensionOperator.setPhysicalOperator(commitPOperator);
//update plan link
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java
index 0c3de91..d4061e0 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SimilarityCheckRule.java
@@ -50,6 +50,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Looks for a select operator, containing a condition:
@@ -181,10 +182,12 @@
// Only non-null if we found that varRefExpr refers to an optimizable similarity function call.
if (simCheckFuncExpr != null) {
+ SourceLocation sourceLoc = simCheckFuncExpr.getSourceLocation();
// Create a new assign under matchingAssign which assigns the result of our similarity-check function to a variable.
LogicalVariable newVar = context.newVar();
AssignOperator newAssign =
new AssignOperator(newVar, new MutableObject<ILogicalExpression>(simCheckFuncExpr));
+ newAssign.setSourceLocation(sourceLoc);
// Hook up inputs.
newAssign.getInputs()
.add(new MutableObject<ILogicalOperator>(matchingAssign.getInputs().get(0).getValue()));
@@ -193,12 +196,15 @@
// Replace select condition with a get-item on newVarFromExpression.
List<Mutable<ILogicalExpression>> selectGetItemArgs = new ArrayList<Mutable<ILogicalExpression>>();
// First arg is a variable reference expr on newVarFromExpression.
- selectGetItemArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(newVar)));
+ VariableReferenceExpression newVarRef1 = new VariableReferenceExpression(newVar);
+ newVarRef1.setSourceLocation(sourceLoc);
+ selectGetItemArgs.add(new MutableObject<ILogicalExpression>(newVarRef1));
// Second arg is the item index to be accessed, here 0.
selectGetItemArgs.add(new MutableObject<ILogicalExpression>(
new ConstantExpression(new AsterixConstantValue(new AInt32(0)))));
- ILogicalExpression selectGetItemExpr = new ScalarFunctionCallExpression(
+ ScalarFunctionCallExpression selectGetItemExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_ITEM), selectGetItemArgs);
+ selectGetItemExpr.setSourceLocation(sourceLoc);
// Replace the old similarity function call with the new getItemExpr.
expRef.setValue(selectGetItemExpr);
@@ -206,12 +212,15 @@
// newVarFromExpression.
List<Mutable<ILogicalExpression>> assignGetItemArgs = new ArrayList<Mutable<ILogicalExpression>>();
// First arg is a variable reference expr on newVarFromExpression.
- assignGetItemArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(newVar)));
+ VariableReferenceExpression newVarRef2 = new VariableReferenceExpression(newVar);
+ newVarRef2.setSourceLocation(sourceLoc);
+ assignGetItemArgs.add(new MutableObject<ILogicalExpression>(newVarRef2));
// Second arg is the item index to be accessed, here 1.
assignGetItemArgs.add(new MutableObject<ILogicalExpression>(
new ConstantExpression(new AsterixConstantValue(new AInt32(1)))));
- ILogicalExpression assignGetItemExpr = new ScalarFunctionCallExpression(
+ ScalarFunctionCallExpression assignGetItemExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_ITEM), assignGetItemArgs);
+ assignGetItemExpr.setSourceLocation(sourceLoc);
// Replace the original assign expr with the get-item expr.
simFuncExprRef.setValue(assignGetItemExpr);
@@ -238,8 +247,9 @@
// Second arg is the item index to be accessed.
getItemArgs.add(new MutableObject<ILogicalExpression>(
new ConstantExpression(new AsterixConstantValue(new AInt32(0)))));
- ILogicalExpression getItemExpr = new ScalarFunctionCallExpression(
+ ScalarFunctionCallExpression getItemExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_ITEM), getItemArgs);
+ getItemExpr.setSourceLocation(simCheckFuncExpr.getSourceLocation());
// Replace the old similarity function call with the new getItemExpr.
expRef.setValue(getItemExpr);
return true;
@@ -282,6 +292,7 @@
new ConstantExpression(new AsterixConstantValue(jaccThresh))));
simCheckFuncExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.SIMILARITY_JACCARD_CHECK), similarityArgs);
+ simCheckFuncExpr.setSourceLocation(funcExpr.getSourceLocation());
}
// Look for edit-distance function call, and LE or LT.
@@ -310,6 +321,7 @@
new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(edThresh))));
simCheckFuncExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.EDIT_DISTANCE_CHECK), similarityArgs);
+ simCheckFuncExpr.setSourceLocation(funcExpr.getSourceLocation());
}
// Preserve all annotations.
if (simCheckFuncExpr != null) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
index b1f646a..8372851 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SweepIllegalNonfunctionalFunctions.java
@@ -20,6 +20,8 @@
import java.util.List;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
@@ -102,7 +104,7 @@
if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
if (!expr.isFunctional()) {
AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, fce.getSourceLocation(),
"Found non-functional function " + fce.getFunctionIdentifier() + " in op " + op);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
index 1a4f1c0..c8bec85 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
@@ -625,7 +625,9 @@
optFuncExpr.setOptimizableSubTree(funcVarIndex, subTree);
List<String> fieldName = null;
if (subTree.getDataSourceType() == DataSourceType.COLLECTION_SCAN) {
- optFuncExpr.setLogicalExpr(funcVarIndex, new VariableReferenceExpression(var));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(unnestOp.getSourceLocation());
+ optFuncExpr.setLogicalExpr(funcVarIndex, varRef);
} else {
fieldName = getFieldNameFromSubTree(optFuncExpr, subTree, assignOrUnnestIndex, 0, subTree.getRecordType(),
funcVarIndex, optFuncExpr.getFuncExpr().getArguments().get(funcVarIndex).getValue(),
@@ -731,7 +733,9 @@
optFuncExpr.setFieldName(funcVarIndex, fieldName);
optFuncExpr.setOptimizableSubTree(funcVarIndex, subTree);
optFuncExpr.setSourceVar(funcVarIndex, var);
- optFuncExpr.setLogicalExpr(funcVarIndex, new VariableReferenceExpression(var));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(subTree.getDataSourceRef().getValue().getSourceLocation());
+ optFuncExpr.setLogicalExpr(funcVarIndex, varRef);
setTypeTag(context, subTree, optFuncExpr, funcVarIndex);
if (subTree.hasDataSourceScan()) {
fillIndexExprs(datasetIndexes, fieldName, fieldType, optFuncExpr, optFuncExprIndex, funcVarIndex,
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodJobGenParams.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
index e541a79..cba4411 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
@@ -107,8 +107,8 @@
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(varList.size()))));
funcArgs.add(numKeysRef);
for (LogicalVariable keyVar : varList) {
- Mutable<ILogicalExpression> keyVarRef = new MutableObject<>(new VariableReferenceExpression(keyVar));
- funcArgs.add(keyVarRef);
+ VariableReferenceExpression keyVarRef = new VariableReferenceExpression(keyVar);
+ funcArgs.add(new MutableObject<>(keyVarRef));
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
index eafbdaf..6368058 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
@@ -95,6 +95,7 @@
import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.storage.am.lsm.invertedindex.tokenizers.DelimitedUTF8StringBinaryTokenizer;
/**
@@ -274,7 +275,8 @@
break;
default:
throw new CompilationException(ErrorCode.COMPILATION_TYPE_UNSUPPORTED,
- BuiltinFunctions.FULLTEXT_CONTAINS.getName(), objectFromExpr.getType().getTypeTag());
+ constExpression.getSourceLocation(), BuiltinFunctions.FULLTEXT_CONTAINS.getName(),
+ objectFromExpr.getType().getTypeTag());
}
}
@@ -421,7 +423,8 @@
case CONDITIONAL_SPLIT_VAR:
// Sanity check - the given unnest map should generate this variable.
if (!abstractUnnestMapOp.getGenerateCallBackProceedResultVar()) {
- throw CompilationException.create(ErrorCode.CANNOT_GET_CONDITIONAL_SPLIT_KEY_VARIABLE);
+ throw CompilationException.create(ErrorCode.CANNOT_GET_CONDITIONAL_SPLIT_KEY_VARIABLE,
+ unnestMapOp.getSourceLocation());
}
// Fetches conditional splitter - the last position
start = numSecondaryKeys + numPrimaryKeys;
@@ -465,6 +468,7 @@
public static Triple<ILogicalExpression, ILogicalExpression, Boolean> createSearchKeyExpr(Index index,
IOptimizableFuncExpr optFuncExpr, IAType indexedFieldType, OptimizableOperatorSubTree probeSubTree)
throws AlgebricksException {
+ SourceLocation sourceLoc = optFuncExpr.getFuncExpr().getSourceLocation();
if (probeSubTree == null) {
// We are optimizing a selection query. Search key is a constant.
// Type Checking and type promotion is done here
@@ -473,7 +477,9 @@
//We are looking at a selection case, but using two variables
//This means that the second variable comes from a nonPure function call
//TODO: Right now we miss on type promotion for nonpure functions
- return new Triple<>(new VariableReferenceExpression(optFuncExpr.getLogicalVar(1)), null, false);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(optFuncExpr.getLogicalVar(1));
+ varRef.setSourceLocation(sourceLoc);
+ return new Triple<>(varRef, null, false);
}
ILogicalExpression constantAtRuntimeExpression = optFuncExpr.getConstantExpr(0);
@@ -539,25 +545,25 @@
case LT:
case GE:
// round-up
- replacedConstantValue =
- getReplacedConstantValue(constantValue.getObject(), constantValueTag,
- indexedFieldTypeTag, index.isEnforced(), TypeCastingMathFunctionType.CEIL);
+ replacedConstantValue = getReplacedConstantValue(constantValue.getObject(),
+ constantValueTag, indexedFieldTypeTag, index.isEnforced(),
+ TypeCastingMathFunctionType.CEIL, sourceLoc);
break;
case LE:
case GT:
// round-down
- replacedConstantValue =
- getReplacedConstantValue(constantValue.getObject(), constantValueTag,
- indexedFieldTypeTag, index.isEnforced(), TypeCastingMathFunctionType.FLOOR);
+ replacedConstantValue = getReplacedConstantValue(constantValue.getObject(),
+ constantValueTag, indexedFieldTypeTag, index.isEnforced(),
+ TypeCastingMathFunctionType.FLOOR, sourceLoc);
break;
case EQ:
// equality case - both CEIL and FLOOR need to be applied.
- replacedConstantValue =
- getReplacedConstantValue(constantValue.getObject(), constantValueTag,
- indexedFieldTypeTag, index.isEnforced(), TypeCastingMathFunctionType.FLOOR);
- replacedConstantValueForEQCase =
- getReplacedConstantValue(constantValue.getObject(), constantValueTag,
- indexedFieldTypeTag, index.isEnforced(), TypeCastingMathFunctionType.CEIL);
+ replacedConstantValue = getReplacedConstantValue(constantValue.getObject(),
+ constantValueTag, indexedFieldTypeTag, index.isEnforced(),
+ TypeCastingMathFunctionType.FLOOR, sourceLoc);
+ replacedConstantValueForEQCase = getReplacedConstantValue(constantValue.getObject(),
+ constantValueTag, indexedFieldTypeTag, index.isEnforced(),
+ TypeCastingMathFunctionType.CEIL, sourceLoc);
break;
default:
// NEQ should not be a case.
@@ -566,7 +572,7 @@
} else {
// Type conversion only case: (e.g., INT -> BIGINT)
replacedConstantValue = getReplacedConstantValue(constantValue.getObject(), constantValueTag,
- indexedFieldTypeTag, index.isEnforced(), TypeCastingMathFunctionType.NONE);
+ indexedFieldTypeTag, index.isEnforced(), TypeCastingMathFunctionType.NONE, sourceLoc);
}
}
// No type-casting at all
@@ -586,7 +592,8 @@
OptimizableOperatorSubTree opSubTree0 = optFuncExpr.getOperatorSubTree(0);
int probeVarIndex = opSubTree0 == null || opSubTree0 == probeSubTree ? 0 : 1;
LogicalVariable probeVar = optFuncExpr.getLogicalVar(probeVarIndex);
- ILogicalExpression probeExpr = new VariableReferenceExpression(probeVar);
+ VariableReferenceExpression probeExpr = new VariableReferenceExpression(probeVar);
+ probeExpr.setSourceLocation(sourceLoc);
ATypeTag indexedFieldTypeTag = TypeComputeUtils.getActualType(indexedFieldType).getTypeTag();
if (ATypeHierarchy.getTypeDomain(indexedFieldTypeTag) == ATypeHierarchy.Domain.NUMERIC) {
@@ -595,6 +602,7 @@
if (probeTypeTypeTag != indexedFieldTypeTag) {
ScalarFunctionCallExpression castFunc = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.CAST_TYPE_LAX));
+ castFunc.setSourceLocation(sourceLoc);
castFunc.getArguments().add(new MutableObject<>(probeExpr));
TypeCastUtils.setRequiredAndInputTypes(castFunc, indexedFieldType, probeType);
boolean realTypeConvertedToIntegerType =
@@ -607,14 +615,14 @@
}
private static AsterixConstantValue getReplacedConstantValue(IAObject sourceObject, ATypeTag sourceTypeTag,
- ATypeTag targetTypeTag, boolean strictDemote, TypeCastingMathFunctionType mathFunction)
- throws CompilationException {
+ ATypeTag targetTypeTag, boolean strictDemote, TypeCastingMathFunctionType mathFunction,
+ SourceLocation sourceLoc) throws CompilationException {
try {
return ATypeHierarchy.getAsterixConstantValueFromNumericTypeObject(sourceObject, targetTypeTag,
strictDemote, mathFunction);
} catch (HyracksDataException e) {
- throw new CompilationException(ErrorCode.ERROR_OCCURRED_BETWEEN_TWO_TYPES_CONVERSION, e, sourceTypeTag,
- targetTypeTag);
+ throw new CompilationException(ErrorCode.ERROR_OCCURRED_BETWEEN_TWO_TYPES_CONVERSION, e, sourceLoc,
+ sourceTypeTag, targetTypeTag);
}
}
@@ -749,6 +757,7 @@
// Non-index only plan case
indexSubTree.getDataSourceRef().setValue(finalIndexSearchOp);
SelectOperator topSelectOp = new SelectOperator(conditionRef, isLeftOuterJoin, newNullPlaceHolderVar);
+ topSelectOp.setSourceLocation(finalIndexSearchOp.getSourceLocation());
topSelectOp.getInputs().add(indexSubTree.getRootRef());
topSelectOp.setExecutionMode(ExecutionMode.LOCAL);
context.computeAndSetTypeEnvironmentForOperator(topSelectOp);
@@ -768,6 +777,7 @@
ARecordType metaRecordType, Index index, ILogicalOperator inputOp, AccessMethodJobGenParams jobGenParams,
IOptimizationContext context, boolean retainInput, boolean retainNull,
boolean generateInstantTrylockResultFromIndexSearch) throws AlgebricksException {
+ SourceLocation sourceLoc = inputOp.getSourceLocation();
// The job gen parameters are transferred to the actual job gen via the UnnestMapOperator's function arguments.
ArrayList<Mutable<ILogicalExpression>> secondaryIndexFuncArgs = new ArrayList<>();
jobGenParams.writeToFuncArgs(secondaryIndexFuncArgs);
@@ -784,6 +794,7 @@
IFunctionInfo secondaryIndexSearch = FunctionUtil.getFunctionInfo(BuiltinFunctions.INDEX_SEARCH);
UnnestingFunctionCallExpression secondaryIndexSearchFunc =
new UnnestingFunctionCallExpression(secondaryIndexSearch, secondaryIndexFuncArgs);
+ secondaryIndexSearchFunc.setSourceLocation(sourceLoc);
secondaryIndexSearchFunc.setReturnsUniqueValues(true);
// This is the operator that jobgen will be looking for. It contains an unnest function that has all
// necessary arguments to determine which index to use, which variables contain the index-search keys,
@@ -796,6 +807,7 @@
LeftOuterUnnestMapOperator secondaryIndexLeftOuterUnnestOp = new LeftOuterUnnestMapOperator(
secondaryIndexUnnestVars, new MutableObject<ILogicalExpression>(secondaryIndexSearchFunc),
secondaryIndexOutputTypes, true);
+ secondaryIndexLeftOuterUnnestOp.setSourceLocation(sourceLoc);
secondaryIndexLeftOuterUnnestOp
.setGenerateCallBackProceedResultVar(generateInstantTrylockResultFromIndexSearch);
secondaryIndexLeftOuterUnnestOp.getInputs().add(new MutableObject<>(inputOp));
@@ -804,13 +816,15 @@
return secondaryIndexLeftOuterUnnestOp;
} else {
// Left-outer-join without retainInput doesn't make sense.
- throw new AlgebricksException("Left-outer-join should propagate all inputs from the outer branch.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Left-outer-join should propagate all inputs from the outer branch.");
}
} else {
// If this is not a left-outer-join case, then we use UNNEST-MAP operator.
UnnestMapOperator secondaryIndexUnnestOp = new UnnestMapOperator(secondaryIndexUnnestVars,
new MutableObject<ILogicalExpression>(secondaryIndexSearchFunc), secondaryIndexOutputTypes,
retainInput);
+ secondaryIndexUnnestOp.setSourceLocation(sourceLoc);
secondaryIndexUnnestOp.setGenerateCallBackProceedResultVar(generateInstantTrylockResultFromIndexSearch);
secondaryIndexUnnestOp.getInputs().add(new MutableObject<>(inputOp));
context.computeAndSetTypeEnvironmentForOperator(secondaryIndexUnnestOp);
@@ -824,12 +838,16 @@
boolean retainMissing, boolean requiresBroadcast, List<LogicalVariable> primaryKeyVars,
List<LogicalVariable> primaryIndexUnnestVars, List<Object> primaryIndexOutputTypes)
throws AlgebricksException {
+ SourceLocation sourceLoc = inputOp.getSourceLocation();
// Optionally add a sort on the primary-index keys before searching the primary index.
OrderOperator order = null;
if (sortPrimaryKeys) {
order = new OrderOperator();
+ order.setSourceLocation(sourceLoc);
for (LogicalVariable pkVar : primaryKeyVars) {
- Mutable<ILogicalExpression> vRef = new MutableObject<>(new VariableReferenceExpression(pkVar));
+ VariableReferenceExpression pkVarRef = new VariableReferenceExpression(pkVar);
+ pkVarRef.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> vRef = new MutableObject<>(pkVarRef);
order.getOrderExpressions().add(new Pair<>(OrderOperator.ASC_ORDER, vRef));
}
// The secondary-index search feeds into the sort.
@@ -837,9 +855,11 @@
order.setExecutionMode(ExecutionMode.LOCAL);
context.computeAndSetTypeEnvironmentForOperator(order);
}
+
// Creates the primary-index search unnest-map operator.
- AbstractUnnestMapOperator primaryIndexUnnestMapOp = createPrimaryIndexUnnestMapOp(dataset, retainInput,
- retainMissing, requiresBroadcast, primaryKeyVars, primaryIndexUnnestVars, primaryIndexOutputTypes);
+ AbstractUnnestMapOperator primaryIndexUnnestMapOp =
+ createPrimaryIndexUnnestMapOp(dataset, retainInput, retainMissing, requiresBroadcast, primaryKeyVars,
+ primaryIndexUnnestVars, primaryIndexOutputTypes, sourceLoc);
if (sortPrimaryKeys) {
primaryIndexUnnestMapOp.getInputs().add(new MutableObject<ILogicalOperator>(order));
} else {
@@ -859,6 +879,7 @@
LogicalVariable newMissingPlaceHolderForLOJ, List<LogicalVariable> pkVarsFromSIdxUnnestMapOp,
List<LogicalVariable> primaryIndexUnnestVars, List<Object> primaryIndexOutputTypes)
throws AlgebricksException {
+ SourceLocation sourceLoc = inputOp.getSourceLocation();
Quadruple<Boolean, Boolean, Boolean, Boolean> indexOnlyPlanInfo = analysisCtx.getIndexOnlyPlanInfo();
// From now on, we deal with the index-only plan.
// Initializes the information required for the index-only plan optimization.
@@ -930,19 +951,24 @@
switch (spatialType.getTypeTag()) {
case POINT:
// Reconstructs a POINT value.
- AbstractFunctionCallExpression createPointExpr = createPointExpression(skVarsFromSIdxUnnestMap);
+ AbstractFunctionCallExpression createPointExpr =
+ createPointExpression(skVarsFromSIdxUnnestMap, sourceLoc);
restoredSKVarFromRTree.add(context.newVar());
restoredSKFromRTreeExprs.add(new MutableObject<ILogicalExpression>(createPointExpr));
skVarAssignOpInRightPath = new AssignOperator(restoredSKVarFromRTree, restoredSKFromRTreeExprs);
+ skVarAssignOpInRightPath.setSourceLocation(sourceLoc);
break;
case RECTANGLE:
// Reconstructs a RECTANGLE value.
- AbstractFunctionCallExpression expr1 = createPointExpression(skVarsFromSIdxUnnestMap.subList(0, 2));
- AbstractFunctionCallExpression expr2 = createPointExpression(skVarsFromSIdxUnnestMap.subList(2, 4));
+ AbstractFunctionCallExpression expr1 =
+ createPointExpression(skVarsFromSIdxUnnestMap.subList(0, 2), sourceLoc);
+ AbstractFunctionCallExpression expr2 =
+ createPointExpression(skVarsFromSIdxUnnestMap.subList(2, 4), sourceLoc);
AbstractFunctionCallExpression createRectangleExpr = createRectangleExpression(expr1, expr2);
restoredSKVarFromRTree.add(context.newVar());
restoredSKFromRTreeExprs.add(new MutableObject<ILogicalExpression>(createRectangleExpr));
skVarAssignOpInRightPath = new AssignOperator(restoredSKVarFromRTree, restoredSKFromRTreeExprs);
+ skVarAssignOpInRightPath.setSourceLocation(sourceLoc);
break;
default:
break;
@@ -1022,6 +1048,7 @@
// If this assign operator is not used in the SELECT or JOIN operator,
// we will add this operator after creating UNION operator in the last part of this method.
constAssignOp = new AssignOperator(constAssignVars, constAssignExprs);
+ constAssignOp.setSourceLocation(sourceLoc);
if (constantAssignVarUsedInTopOp) {
// Places this assign after the secondary index-search op.
constAssignOp.getInputs().add(new MutableObject<ILogicalOperator>(inputOp));
@@ -1052,6 +1079,7 @@
// Adds a SPLIT operator after the given secondary index-search unnest-map operator.
splitOp = new SplitOperator(2,
new MutableObject<ILogicalExpression>(new VariableReferenceExpression(condSplitVars.get(0))));
+ splitOp.setSourceLocation(sourceLoc);
splitOp.getInputs().add(new MutableObject<ILogicalOperator>(currentOp));
splitOp.setExecutionMode(ExecutionMode.PARTITIONED);
context.computeAndSetTypeEnvironmentForOperator(splitOp);
@@ -1075,9 +1103,12 @@
LogicalVariable newVar = context.newVar();
liveVarAfterSplitToLeftPathMap.put(v, newVar);
assignVars.add(newVar);
- assignExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
+ VariableReferenceExpression vRef = new VariableReferenceExpression(v);
+ vRef.setSourceLocation(sourceLoc);
+ assignExprs.add(new MutableObject<ILogicalExpression>(vRef));
}
AssignOperator origVarsToLeftPathVarsAssignOp = new AssignOperator(assignVars, assignExprs);
+ origVarsToLeftPathVarsAssignOp.setSourceLocation(sourceLoc);
origVarsToLeftPathVarsAssignOp.getInputs().add(new MutableObject<ILogicalOperator>(splitOp));
context.computeAndSetTypeEnvironmentForOperator(origVarsToLeftPathVarsAssignOp);
origVarsToLeftPathVarsAssignOp.setExecutionMode(ExecutionMode.PARTITIONED);
@@ -1199,7 +1230,8 @@
// The job gen parameters are transferred to the actual job gen via the UnnestMapOperator's function arguments.
AbstractUnnestMapOperator primaryIndexUnnestMapOp = createPrimaryIndexUnnestMapOp(dataset, retainInput,
retainMissing, requiresBroadcast, pkVarsInLeftPathFromSIdxSearchBeforeSplit,
- pkVarsFromPIdxSearchInLeftPath, primaryIndexOutputTypes);
+ pkVarsFromPIdxSearchInLeftPath, primaryIndexOutputTypes, sourceLoc);
+ primaryIndexUnnestMapOp.setSourceLocation(sourceLoc);
primaryIndexUnnestMapOp.getInputs().add(new MutableObject<ILogicalOperator>(origVarsToLeftPathVarsAssignOp));
context.computeAndSetTypeEnvironmentForOperator(primaryIndexUnnestMapOp);
primaryIndexUnnestMapOp.setExecutionMode(ExecutionMode.PARTITIONED);
@@ -1217,6 +1249,7 @@
LogicalVariable newMissingPlaceHolderVar = retainMissing ? newMissingPlaceHolderForLOJ : null;
newSelectOpInLeftPath = new SelectOperator(new MutableObject<ILogicalExpression>(conditionRefExpr),
retainMissing, newMissingPlaceHolderVar);
+ newSelectOpInLeftPath.setSourceLocation(conditionRefExpr.getSourceLocation());
VariableUtilities.substituteVariables(newSelectOpInLeftPath, origVarToNewVarInLeftPathMap, context);
// If there are ASSIGN operators before the SELECT or JOIN operator,
@@ -1276,6 +1309,7 @@
ILogicalExpression conditionRefExpr2 = conditionRef.getValue().cloneExpression();
newSelectOpInRightPath = new SelectOperator(new MutableObject<ILogicalExpression>(conditionRefExpr2),
retainMissing, newMissingPlaceHolderVar);
+ newSelectOpInRightPath.setSourceLocation(conditionRefExpr2.getSourceLocation());
newSelectOpInRightPath.getInputs().add(new MutableObject<ILogicalOperator>(currentTopOpInRightPath));
VariableUtilities.substituteVariables(newSelectOpInRightPath, origVarToSIdxUnnestMapOpVarMap, context);
VariableUtilities.substituteVariables(newSelectOpInRightPath, origSKFieldVarToNewSKFieldVarMap, context);
@@ -1294,6 +1328,7 @@
// UNIONALL operator that combines both paths.
unionAllOp = new UnionAllOperator(unionVarMap);
+ unionAllOp.setSourceLocation(sourceLoc);
unionAllOp.getInputs().add(new MutableObject<ILogicalOperator>(newSelectOpInLeftPath));
unionAllOp.getInputs().add(new MutableObject<ILogicalOperator>(currentTopOpInRightPath));
@@ -1322,8 +1357,8 @@
private static AbstractUnnestMapOperator createPrimaryIndexUnnestMapOp(Dataset dataset, boolean retainInput,
boolean retainMissing, boolean requiresBroadcast, List<LogicalVariable> primaryKeyVars,
- List<LogicalVariable> primaryIndexUnnestVars, List<Object> primaryIndexOutputTypes)
- throws AlgebricksException {
+ List<LogicalVariable> primaryIndexUnnestVars, List<Object> primaryIndexOutputTypes,
+ SourceLocation sourceLoc) throws AlgebricksException {
// The job gen parameters are transferred to the actual job gen via the UnnestMapOperator's function arguments.
List<Mutable<ILogicalExpression>> primaryIndexFuncArgs = new ArrayList<>();
BTreeJobGenParams jobGenParams = new BTreeJobGenParams(dataset.getDatasetName(), IndexType.BTREE,
@@ -1339,6 +1374,7 @@
IFunctionInfo primaryIndexSearch = FunctionUtil.getFunctionInfo(BuiltinFunctions.INDEX_SEARCH);
AbstractFunctionCallExpression primaryIndexSearchFunc =
new ScalarFunctionCallExpression(primaryIndexSearch, primaryIndexFuncArgs);
+ primaryIndexSearchFunc.setSourceLocation(sourceLoc);
// This is the operator that jobgen will be looking for. It contains an unnest function that has
// all necessary arguments to determine which index to use, which variables contain the index-search keys,
// what is the original dataset, etc.
@@ -1348,14 +1384,17 @@
primaryIndexUnnestMapOp = new LeftOuterUnnestMapOperator(primaryIndexUnnestVars,
new MutableObject<ILogicalExpression>(primaryIndexSearchFunc), primaryIndexOutputTypes,
retainInput);
+ primaryIndexUnnestMapOp.setSourceLocation(sourceLoc);
} else {
// Left-outer-join without retainNull and retainInput doesn't make sense.
- throw new AlgebricksException("Left-outer-join should propagate all inputs from the outer branch.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Left-outer-join should propagate all inputs from the outer branch.");
}
} else {
primaryIndexUnnestMapOp = new UnnestMapOperator(primaryIndexUnnestVars,
new MutableObject<ILogicalExpression>(primaryIndexSearchFunc), primaryIndexOutputTypes,
retainInput);
+ primaryIndexUnnestMapOp.setSourceLocation(sourceLoc);
}
return primaryIndexUnnestMapOp;
}
@@ -1416,12 +1455,18 @@
}
}
- private static AbstractFunctionCallExpression createPointExpression(List<LogicalVariable> pointVars) {
+ private static AbstractFunctionCallExpression createPointExpression(List<LogicalVariable> pointVars,
+ SourceLocation sourceLoc) {
List<Mutable<ILogicalExpression>> expressions = new ArrayList<>();
AbstractFunctionCallExpression createPointExpr1 =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_POINT));
- expressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pointVars.get(0))));
- expressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pointVars.get(1))));
+ createPointExpr1.setSourceLocation(sourceLoc);
+ VariableReferenceExpression pointVarRef0 = new VariableReferenceExpression(pointVars.get(0));
+ pointVarRef0.setSourceLocation(sourceLoc);
+ expressions.add(new MutableObject<ILogicalExpression>(pointVarRef0));
+ VariableReferenceExpression pointVarRef1 = new VariableReferenceExpression(pointVars.get(1));
+ pointVarRef1.setSourceLocation(sourceLoc);
+ expressions.add(new MutableObject<ILogicalExpression>(pointVarRef1));
createPointExpr1.getArguments().addAll(expressions);
return createPointExpr1;
}
@@ -1431,6 +1476,7 @@
List<Mutable<ILogicalExpression>> expressions = new ArrayList<>();
AbstractFunctionCallExpression createRectangleExpr =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_RECTANGLE));
+ createRectangleExpr.setSourceLocation(createPointExpr1.getSourceLocation());
expressions.add(new MutableObject<ILogicalExpression>(createPointExpr1));
expressions.add(new MutableObject<ILogicalExpression>(createPointExpr2));
createRectangleExpr.getArguments().addAll(expressions);
@@ -1475,7 +1521,8 @@
}
if (!foundSelectNonMissing) {
- throw CompilationException.create(ErrorCode.CANNOT_FIND_NON_MISSING_SELECT_OPERATOR);
+ throw CompilationException.create(ErrorCode.CANNOT_FIND_NON_MISSING_SELECT_OPERATOR,
+ lojGroupbyOp.getSourceLocation());
}
return isMissingFuncExpr;
}
@@ -1486,8 +1533,9 @@
//reset the missing placeholder variable in groupby operator
ScalarFunctionCallExpression isMissingFuncExpr = analysisCtx.getLOJIsMissingFuncInGroupBy();
isMissingFuncExpr.getArguments().clear();
- isMissingFuncExpr.getArguments().add(
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(newMissingPlaceholderVaraible)));
+ VariableReferenceExpression newMissingVarRef = new VariableReferenceExpression(newMissingPlaceholderVaraible);
+ newMissingVarRef.setSourceLocation(isMissingFuncExpr.getSourceLocation());
+ isMissingFuncExpr.getArguments().add(new MutableObject<ILogicalExpression>(newMissingVarRef));
//recompute type environment.
OperatorPropertiesUtil.typeOpRec(analysisCtx.getLOJGroupbyOpRef(), context);
@@ -1526,12 +1574,16 @@
Dataset dataset, ARecordType recordType, ARecordType metaRecordType, ILogicalOperator inputOp,
IOptimizationContext context, Index secondaryIndex, boolean retainInput, boolean retainNull)
throws AlgebricksException {
+ SourceLocation sourceLoc = inputOp.getSourceLocation();
List<LogicalVariable> primaryKeyVars = AccessMethodUtils.getKeyVarsFromSecondaryUnnestMap(dataset, recordType,
metaRecordType, inputOp, secondaryIndex, SecondaryUnnestMapOutputVarType.PRIMARY_KEY);
// add a sort on the RID fields before fetching external data.
OrderOperator order = new OrderOperator();
+ order.setSourceLocation(sourceLoc);
for (LogicalVariable pkVar : primaryKeyVars) {
- Mutable<ILogicalExpression> vRef = new MutableObject<>(new VariableReferenceExpression(pkVar));
+ VariableReferenceExpression pkVarRef = new VariableReferenceExpression(pkVar);
+ pkVarRef.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> vRef = new MutableObject<>(pkVarRef);
order.getOrderExpressions().add(new Pair<>(OrderOperator.ASC_ORDER, vRef));
}
// The secondary-index search feeds into the sort.
@@ -1556,8 +1608,10 @@
IFunctionInfo externalLookup = FunctionUtil.getFunctionInfo(BuiltinFunctions.EXTERNAL_LOOKUP);
AbstractFunctionCallExpression externalLookupFunc =
new ScalarFunctionCallExpression(externalLookup, externalLookupArgs);
+ externalLookupFunc.setSourceLocation(sourceLoc);
UnnestMapOperator unnestOp = new UnnestMapOperator(externalUnnestVars,
new MutableObject<ILogicalExpression>(externalLookupFunc), outputTypes, retainInput);
+ unnestOp.setSourceLocation(sourceLoc);
// Fed by the order operator or the secondaryIndexUnnestOp.
unnestOp.getInputs().add(new MutableObject<ILogicalOperator>(order));
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
index 60d4d3d..099f769 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
@@ -68,6 +68,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractDataSourceOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator.ExecutionMode;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestMapOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestMapOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
@@ -353,7 +354,8 @@
keyPos = indexOf(optFuncExpr.getFieldName(1), chosenIndex.getKeyFieldNames());
}
if (keyPos < 0) {
- throw CompilationException.create(ErrorCode.NO_INDEX_FIELD_NAME_FOR_GIVEN_FUNC_EXPR);
+ throw CompilationException.create(ErrorCode.NO_INDEX_FIELD_NAME_FOR_GIVEN_FUNC_EXPR,
+ optFuncExpr.getFuncExpr().getSourceLocation());
}
// returnedSearchKeyExpr contains a pair of search expression.
// The second expression will not be null only if we are creating an EQ search predicate
@@ -368,7 +370,9 @@
if (searchKeyExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
constantAtRuntimeExpressions[keyPos] = searchKeyExpr;
constAtRuntimeExprVars[keyPos] = context.newVar();
- searchKeyExpr = new VariableReferenceExpression(constAtRuntimeExprVars[keyPos]);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(constAtRuntimeExprVars[keyPos]);
+ varRef.setSourceLocation(searchKeyExpr.getSourceLocation());
+ searchKeyExpr = varRef;
}
LimitType limit = getLimitType(optFuncExpr, probeSubTree);
@@ -576,6 +580,7 @@
if (!assignKeyVarList.isEmpty()) {
// Assign operator that sets the constant secondary-index search-key fields if necessary.
AssignOperator assignSearchKeys = new AssignOperator(assignKeyVarList, assignKeyExprList);
+ assignSearchKeys.setSourceLocation(dataSourceOp.getSourceLocation());
if (probeSubTree == null) {
// We are optimizing a selection query.
// Input to this assign is the EmptyTupleSource (which the dataSourceScan also must have had as input).
@@ -694,26 +699,33 @@
IFunctionInfo primaryIndexSearch = FunctionUtil.getFunctionInfo(BuiltinFunctions.INDEX_SEARCH);
UnnestingFunctionCallExpression primaryIndexSearchFunc =
new UnnestingFunctionCallExpression(primaryIndexSearch, primaryIndexFuncArgs);
+ primaryIndexSearchFunc.setSourceLocation(dataSourceOp.getSourceLocation());
primaryIndexSearchFunc.setReturnsUniqueValues(true);
+ AbstractUnnestMapOperator unnestMapOp;
if (!leftOuterUnnestMapRequired) {
- indexSearchOp = new UnnestMapOperator(scanVariables,
+ unnestMapOp = new UnnestMapOperator(scanVariables,
new MutableObject<ILogicalExpression>(primaryIndexSearchFunc), primaryIndexOutputTypes,
retainInput);
} else {
- indexSearchOp = new LeftOuterUnnestMapOperator(scanVariables,
+ unnestMapOp = new LeftOuterUnnestMapOperator(scanVariables,
new MutableObject<ILogicalExpression>(primaryIndexSearchFunc), primaryIndexOutputTypes,
true);
}
+ unnestMapOp.setSourceLocation(dataSourceOp.getSourceLocation());
+ indexSearchOp = unnestMapOp;
} else {
+ AbstractUnnestMapOperator unnestMapOp;
if (!leftOuterUnnestMapRequired) {
- indexSearchOp = new UnnestMapOperator(scanVariables,
+ unnestMapOp = new UnnestMapOperator(scanVariables,
((UnnestMapOperator) secondaryIndexUnnestOp).getExpressionRef(), primaryIndexOutputTypes,
retainInput);
} else {
- indexSearchOp = new LeftOuterUnnestMapOperator(scanVariables,
+ unnestMapOp = new LeftOuterUnnestMapOperator(scanVariables,
((LeftOuterUnnestMapOperator) secondaryIndexUnnestOp).getExpressionRef(),
primaryIndexOutputTypes, true);
}
+ unnestMapOp.setSourceLocation(dataSourceOp.getSourceLocation());
+ indexSearchOp = unnestMapOp;
}
indexSearchOp.getInputs().add(new MutableObject<>(inputOp));
@@ -775,7 +787,7 @@
// The original select cond must be an AND. Check it just to be sure.
if (funcExpr.getFunctionIdentifier() != AlgebricksBuiltinFunctions.AND) {
throw new CompilationException(ErrorCode.COMPILATION_FUNC_EXPRESSION_CANNOT_UTILIZE_INDEX,
- funcExpr.toString());
+ funcExpr.getSourceLocation(), funcExpr.toString());
}
// Clean the conjuncts.
for (Mutable<ILogicalExpression> arg : funcExpr.getArguments()) {
@@ -902,7 +914,9 @@
private ILogicalExpression createSelectCondition(List<Mutable<ILogicalExpression>> predList) {
if (predList.size() > 1) {
IFunctionInfo finfo = FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.AND);
- return new ScalarFunctionCallExpression(finfo, predList);
+ ScalarFunctionCallExpression andExpr = new ScalarFunctionCallExpression(finfo, predList);
+ andExpr.setSourceLocation(predList.get(0).getValue().getSourceLocation());
+ return andExpr;
}
return predList.get(0).getValue();
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java
index 7938f49..7739833 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java
@@ -66,6 +66,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestMapOperator;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class IntroduceLSMComponentFilterRule implements IAlgebraicRewriteRule {
@@ -134,7 +135,8 @@
}
private AssignOperator createAssignOperator(List<IOptimizableFuncExpr> optFuncExprs,
- List<LogicalVariable> minFilterVars, List<LogicalVariable> maxFilterVars, IOptimizationContext context) {
+ List<LogicalVariable> minFilterVars, List<LogicalVariable> maxFilterVars, IOptimizationContext context,
+ SourceLocation sourceLoc) {
List<LogicalVariable> assignKeyVarList = new ArrayList<>();
List<Mutable<ILogicalExpression>> assignKeyExprList = new ArrayList<>();
@@ -154,7 +156,9 @@
maxFilterVars.add(var);
}
}
- return new AssignOperator(assignKeyVarList, assignKeyExprList);
+ AssignOperator assignOp = new AssignOperator(assignKeyVarList, assignKeyExprList);
+ assignOp.setSourceLocation(sourceLoc);
+ return assignOp;
}
private void assignFilterFromQuery(List<IOptimizableFuncExpr> optFuncExprs, AbstractLogicalOperator op,
@@ -175,15 +179,17 @@
List<LogicalVariable> minFilterVars = new ArrayList<>();
List<LogicalVariable> maxFilterVars = new ArrayList<>();
- AssignOperator assignOp = createAssignOperator(optFuncExprs, minFilterVars, maxFilterVars, context);
+ AssignOperator assignOp = createAssignOperator(optFuncExprs, minFilterVars, maxFilterVars, context,
+ dataSourceScanOp.getSourceLocation());
dataSourceScanOp.setMinFilterVars(minFilterVars);
dataSourceScanOp.setMaxFilterVars(maxFilterVars);
List<Mutable<ILogicalExpression>> additionalFilteringExpressions = new ArrayList<>();
for (LogicalVariable var : assignOp.getVariables()) {
- additionalFilteringExpressions
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(assignOp.getSourceLocation());
+ additionalFilteringExpressions.add(new MutableObject<ILogicalExpression>(varRef));
}
dataSourceScanOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
@@ -206,16 +212,17 @@
List<LogicalVariable> minFilterVars = new ArrayList<>();
List<LogicalVariable> maxFilterVars = new ArrayList<>();
- AssignOperator assignOp =
- createAssignOperator(optFuncExprs, minFilterVars, maxFilterVars, context);
+ AssignOperator assignOp = createAssignOperator(optFuncExprs, minFilterVars, maxFilterVars,
+ context, unnestMapOp.getSourceLocation());
unnestMapOp.setMinFilterVars(minFilterVars);
unnestMapOp.setMaxFilterVars(maxFilterVars);
List<Mutable<ILogicalExpression>> additionalFilteringExpressions = new ArrayList<>();
for (LogicalVariable var : assignOp.getVariables()) {
- additionalFilteringExpressions
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(assignOp.getSourceLocation());
+ additionalFilteringExpressions.add(new MutableObject<ILogicalExpression>(varRef));
}
unnestMapOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
assignOp.getInputs().add(new MutableObject<>(unnestMapOp.getInputs().get(0).getValue()));
@@ -320,6 +327,7 @@
}
IntersectOperator intersectWithFilter = new IntersectOperator(outputVars, compareVars, filterVars);
+ intersectWithFilter.setSourceLocation(intersect.getSourceLocation());
intersectWithFilter.getInputs().addAll(intersect.getInputs());
return intersectWithFilter;
}
@@ -343,9 +351,12 @@
primaryOp.setMinFilterVars(Collections.singletonList(minFilterVar));
primaryOp.setMaxFilterVars(Collections.singletonList(maxFilterVar));
+ VariableReferenceExpression minFilterVarRef = new VariableReferenceExpression(minFilterVar);
+ minFilterVarRef.setSourceLocation(primaryOp.getSourceLocation());
+ VariableReferenceExpression maxFilterVarRef = new VariableReferenceExpression(maxFilterVar);
+ maxFilterVarRef.setSourceLocation(primaryOp.getSourceLocation());
List<Mutable<ILogicalExpression>> indexFilterExpression =
- Arrays.asList(new MutableObject<>(new VariableReferenceExpression(minFilterVar)),
- new MutableObject<>(new VariableReferenceExpression(maxFilterVar)));
+ Arrays.asList(new MutableObject<>(minFilterVarRef), new MutableObject<>(maxFilterVarRef));
primaryOp.setAdditionalFilteringExpressions(indexFilterExpression);
context.computeAndSetTypeEnvironmentForOperator(primaryOp);
@@ -366,7 +377,8 @@
AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) unnestExpr;
FunctionIdentifier fid = f.getFunctionIdentifier();
if (!fid.equals(BuiltinFunctions.INDEX_SEARCH)) {
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, fid.getName());
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, f.getSourceLocation(),
+ fid.getName());
}
AccessMethodJobGenParams jobGenParams = new AccessMethodJobGenParams();
jobGenParams.readFromFuncArgs(f.getArguments());
@@ -414,7 +426,8 @@
dataverseName = jobGenParams.dataverseName;
datasetName = jobGenParams.datasetName;
} else {
- throw new AlgebricksException("Unexpected function for Unnest Map: " + fid);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, f.getSourceLocation(),
+ "Unexpected function for Unnest Map: " + fid);
}
return ((MetadataProvider) context.getMetadataProvider()).findDataset(dataverseName, datasetName);
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
index 27e5645..d2b456f 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
@@ -262,10 +262,12 @@
List<List<LogicalVariable>> inputVars = new ArrayList<>(subRoots.size());
for (int i = 0; i < subRoots.size(); i++) {
if (lop.getOperatorTag() != subRoots.get(i).getOperatorTag()) {
- throw new AlgebricksException("The data source root should have the same operator type.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, lop.getSourceLocation(),
+ "The data source root should have the same operator type.");
}
if (lop.getInputs().size() != 1) {
- throw new AlgebricksException("The primary search has multiple inputs.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, lop.getSourceLocation(),
+ "The primary search has multiple inputs.");
}
ILogicalOperator curRoot = subRoots.get(i);
@@ -274,7 +276,8 @@
for (Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>> orderExpression : order
.getOrderExpressions()) {
if (orderExpression.second.getValue().getExpressionTag() != LogicalExpressionTag.VARIABLE) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR,
+ orderExpression.second.getValue().getSourceLocation(),
"The order by expression should be variables, but they aren't variables.");
}
VariableReferenceExpression orderedVar =
@@ -286,6 +289,7 @@
List<LogicalVariable> outputVar = inputVars.get(0);
IntersectOperator intersect = new IntersectOperator(outputVar, inputVars);
+ intersect.setSourceLocation(lop.getSourceLocation());
for (ILogicalOperator secondarySearch : subRoots) {
intersect.getInputs().add(secondarySearch.getInputs().get(0));
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
index 6f99330..ed73333 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
@@ -84,6 +84,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.storage.am.lsm.invertedindex.api.IInvertedIndexSearchModifierFactory;
import org.apache.hyracks.storage.am.lsm.invertedindex.search.ConjunctiveEditDistanceSearchModifierFactory;
import org.apache.hyracks.storage.am.lsm.invertedindex.search.ConjunctiveListEditDistanceSearchModifierFactory;
@@ -431,6 +432,7 @@
addKeyVarsAndExprs(optFuncExpr, keyVarList, keyExprList, context);
// Assign operator that sets the secondary-index search-key fields.
inputOp = new AssignOperator(keyVarList, keyExprList);
+ inputOp.setSourceLocation(dataSourceScan.getSourceLocation());
// Input to this assign is the EmptyTupleSource (which the dataSourceScan also must have had as input).
inputOp.getInputs().add(new MutableObject<>(
OperatorManipulationUtil.deepCopy(dataSourceScan.getInputs().get(0).getValue())));
@@ -571,6 +573,7 @@
// Change join into a select with the same condition.
SelectOperator topSelect = new SelectOperator(new MutableObject<ILogicalExpression>(joinCond), isLeftOuterJoin,
newNullPlaceHolderVar);
+ topSelect.setSourceLocation(indexPlanRootOp.getSourceLocation());
topSelect.getInputs().add(indexSubTree.getRootRef());
topSelect.setExecutionMode(ExecutionMode.LOCAL);
context.computeAndSetTypeEnvironmentForOperator(topSelect);
@@ -595,6 +598,7 @@
indexSubTreeVar));
}
UnionAllOperator unionAllOp = new UnionAllOperator(varMap);
+ unionAllOp.setSourceLocation(topOp.getSourceLocation());
unionAllOp.getInputs().add(new MutableObject<ILogicalOperator>(topOp));
unionAllOp.getInputs().add(panicJoinRef);
unionAllOp.setExecutionMode(ExecutionMode.PARTITIONED);
@@ -606,9 +610,10 @@
// The inner (build) branch of the join is the subtree with the data scan, since the result of the similarity join could potentially be big.
// This choice may not always be the most efficient, but it seems more robust than the alternative.
Mutable<ILogicalExpression> eqJoinConditionRef =
- createPrimaryKeysEqJoinCondition(originalSubTreePKs, surrogateSubTreePKs);
+ createPrimaryKeysEqJoinCondition(originalSubTreePKs, surrogateSubTreePKs, topOp.getSourceLocation());
InnerJoinOperator topEqJoin = new InnerJoinOperator(eqJoinConditionRef, originalProbeSubTreeRootRef,
new MutableObject<ILogicalOperator>(topOp));
+ topEqJoin.setSourceLocation(topOp.getSourceLocation());
topEqJoin.setExecutionMode(ExecutionMode.PARTITIONED);
joinRef.setValue(topEqJoin);
context.computeAndSetTypeEnvironmentForOperator(topEqJoin);
@@ -690,23 +695,30 @@
}
private Mutable<ILogicalExpression> createPrimaryKeysEqJoinCondition(List<LogicalVariable> originalSubTreePKs,
- List<LogicalVariable> surrogateSubTreePKs) {
+ List<LogicalVariable> surrogateSubTreePKs, SourceLocation sourceLoc) {
List<Mutable<ILogicalExpression>> eqExprs = new ArrayList<Mutable<ILogicalExpression>>();
int numPKVars = originalSubTreePKs.size();
for (int i = 0; i < numPKVars; i++) {
List<Mutable<ILogicalExpression>> args = new ArrayList<Mutable<ILogicalExpression>>();
- args.add(
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(surrogateSubTreePKs.get(i))));
- args.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(originalSubTreePKs.get(i))));
- ILogicalExpression eqFunc =
+ VariableReferenceExpression surrogateSubTreePKRef =
+ new VariableReferenceExpression(surrogateSubTreePKs.get(i));
+ surrogateSubTreePKRef.setSourceLocation(sourceLoc);
+ args.add(new MutableObject<ILogicalExpression>(surrogateSubTreePKRef));
+ VariableReferenceExpression originalSubTreePKRef =
+ new VariableReferenceExpression(originalSubTreePKs.get(i));
+ originalSubTreePKRef.setSourceLocation(sourceLoc);
+ args.add(new MutableObject<ILogicalExpression>(originalSubTreePKRef));
+ ScalarFunctionCallExpression eqFunc =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.EQ), args);
+ eqFunc.setSourceLocation(sourceLoc);
eqExprs.add(new MutableObject<ILogicalExpression>(eqFunc));
}
if (eqExprs.size() == 1) {
return eqExprs.get(0);
} else {
- ILogicalExpression andFunc = new ScalarFunctionCallExpression(
+ ScalarFunctionCallExpression andFunc = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.AND), eqExprs);
+ andFunc.setSourceLocation(sourceLoc);
return new MutableObject<ILogicalExpression>(andFunc);
}
}
@@ -715,16 +727,19 @@
OptimizableOperatorSubTree indexSubTree, OptimizableOperatorSubTree probeSubTree,
IOptimizableFuncExpr optFuncExpr, Index chosenIndex, Map<LogicalVariable, LogicalVariable> panicVarMap,
IOptimizationContext context) throws AlgebricksException {
+ ILogicalOperator probeRootOp = probeSubTree.getRoot();
+ SourceLocation sourceLoc = probeRootOp.getSourceLocation();
LogicalVariable inputSearchVar = getInputSearchVar(optFuncExpr, indexSubTree);
// We split the plan into two "branches", and add selections on each side.
AbstractLogicalOperator replicateOp = new ReplicateOperator(2);
- replicateOp.getInputs().add(new MutableObject<ILogicalOperator>(probeSubTree.getRoot()));
+ replicateOp.setSourceLocation(sourceLoc);
+ replicateOp.getInputs().add(new MutableObject<ILogicalOperator>(probeRootOp));
replicateOp.setExecutionMode(ExecutionMode.PARTITIONED);
context.computeAndSetTypeEnvironmentForOperator(replicateOp);
// Create select ops for removing tuples that are filterable and not filterable, respectively.
- IVariableTypeEnvironment probeTypeEnv = context.getOutputTypeEnvironment(probeSubTree.getRoot());
+ IVariableTypeEnvironment probeTypeEnv = context.getOutputTypeEnvironment(probeRootOp);
IAType inputSearchVarType;
if (chosenIndex.isEnforced()) {
inputSearchVarType = optFuncExpr.getFieldType(optFuncExpr.findLogicalVar(inputSearchVar));
@@ -770,14 +785,16 @@
IAType inputSearchVarType, IOptimizableFuncExpr optFuncExpr, Index chosenIndex,
IOptimizationContext context, Mutable<ILogicalOperator> isFilterableSelectOpRef,
Mutable<ILogicalOperator> isNotFilterableSelectOpRef) throws AlgebricksException {
+ SourceLocation sourceLoc = inputOp.getSourceLocation();
// Create select operator for removing tuples that are not filterable.
// First determine the proper filter function and args based on the type of the input search var.
ILogicalExpression isFilterableExpr = null;
switch (inputSearchVarType.getTypeTag()) {
case STRING: {
List<Mutable<ILogicalExpression>> isFilterableArgs = new ArrayList<Mutable<ILogicalExpression>>(4);
- isFilterableArgs
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(inputSearchVar)));
+ VariableReferenceExpression inputSearchVarRef = new VariableReferenceExpression(inputSearchVar);
+ inputSearchVarRef.setSourceLocation(sourceLoc);
+ isFilterableArgs.add(new MutableObject<ILogicalExpression>(inputSearchVarRef));
// Since we are optimizing a join, the similarity threshold should be the only constant in the optimizable function expression.
isFilterableArgs.add(new MutableObject<ILogicalExpression>(optFuncExpr.getConstantExpr(0)));
isFilterableArgs.add(new MutableObject<ILogicalExpression>(
@@ -793,8 +810,9 @@
case MULTISET:
case ARRAY:
List<Mutable<ILogicalExpression>> isFilterableArgs = new ArrayList<Mutable<ILogicalExpression>>(2);
- isFilterableArgs
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(inputSearchVar)));
+ VariableReferenceExpression inputSearchVarRef = new VariableReferenceExpression(inputSearchVar);
+ inputSearchVarRef.setSourceLocation(sourceLoc);
+ isFilterableArgs.add(new MutableObject<ILogicalExpression>(inputSearchVarRef));
// Since we are optimizing a join, the similarity threshold should be the only constant in the optimizable function expression.
isFilterableArgs.add(new MutableObject<ILogicalExpression>(optFuncExpr.getConstantExpr(0)));
isFilterableExpr = new ScalarFunctionCallExpression(
@@ -802,11 +820,12 @@
isFilterableArgs);
break;
default:
- throw CompilationException.create(ErrorCode.NO_SUPPORTED_TYPE);
+ throw new CompilationException(ErrorCode.NO_SUPPORTED_TYPE, sourceLoc);
}
SelectOperator isFilterableSelectOp =
new SelectOperator(new MutableObject<ILogicalExpression>(isFilterableExpr), false, null);
+ isFilterableSelectOp.setSourceLocation(sourceLoc);
isFilterableSelectOp.getInputs().add(new MutableObject<ILogicalOperator>(inputOp));
isFilterableSelectOp.setExecutionMode(ExecutionMode.LOCAL);
context.computeAndSetTypeEnvironmentForOperator(isFilterableSelectOp);
@@ -814,10 +833,12 @@
// Select operator for removing tuples that are filterable.
List<Mutable<ILogicalExpression>> isNotFilterableArgs = new ArrayList<Mutable<ILogicalExpression>>();
isNotFilterableArgs.add(new MutableObject<ILogicalExpression>(isFilterableExpr));
- ILogicalExpression isNotFilterableExpr = new ScalarFunctionCallExpression(
+ ScalarFunctionCallExpression isNotFilterableExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), isNotFilterableArgs);
+ isNotFilterableExpr.setSourceLocation(sourceLoc);
SelectOperator isNotFilterableSelectOp =
new SelectOperator(new MutableObject<ILogicalExpression>(isNotFilterableExpr), false, null);
+ isNotFilterableSelectOp.setSourceLocation(sourceLoc);
isNotFilterableSelectOp.getInputs().add(new MutableObject<ILogicalOperator>(inputOp));
isNotFilterableSelectOp.setExecutionMode(ExecutionMode.LOCAL);
context.computeAndSetTypeEnvironmentForOperator(isNotFilterableSelectOp);
@@ -854,7 +875,8 @@
typeTag = ((AUnionType) type).getActualType().getTypeTag();
}
if (typeTag != ATypeTag.ARRAY && typeTag != ATypeTag.STRING && typeTag != ATypeTag.MULTISET) {
- throw CompilationException.create(ErrorCode.NO_SUPPORTED_TYPE);
+ throw new CompilationException(ErrorCode.NO_SUPPORTED_TYPE,
+ optFuncExpr.getFuncExpr().getSourceLocation());
}
}
jobGenParams.setSearchKeyType(typeTag);
@@ -1246,7 +1268,7 @@
index.getGramLength(), prePost, false);
}
default: {
- throw CompilationException.create(ErrorCode.NO_TOKENIZER_FOR_TYPE, index.getIndexType());
+ throw new CompilationException(ErrorCode.NO_TOKENIZER_FOR_TYPE, index.getIndexType());
}
}
}
@@ -1291,12 +1313,12 @@
}
}
default: {
- throw CompilationException.create(ErrorCode.INCOMPATIBLE_SEARCH_MODIFIER, searchModifierType,
+ throw new CompilationException(ErrorCode.INCOMPATIBLE_SEARCH_MODIFIER, searchModifierType,
index.getIndexType());
}
}
default:
- throw CompilationException.create(ErrorCode.UNKNOWN_SEARCH_MODIFIER, searchModifierType);
+ throw new CompilationException(ErrorCode.UNKNOWN_SEARCH_MODIFIER, searchModifierType);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
index 7c2edb9..9673da3 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
@@ -302,7 +302,8 @@
// Find the dataset corresponding to the datasource in the metadata.
ds = metadataProvider.findDataset(dataverseName, datasetName);
if (ds == null) {
- throw CompilationException.create(ErrorCode.NO_METADATA_FOR_DATASET, datasetName);
+ throw new CompilationException(ErrorCode.NO_METADATA_FOR_DATASET, root.getSourceLocation(),
+ datasetName);
}
// Get the record type for that dataset.
IAType itemType = metadataProvider.findType(ds.getItemTypeDataverseName(), ds.getItemTypeName());
@@ -426,7 +427,7 @@
break;
case NO_DATASOURCE:
default:
- throw CompilationException.create(ErrorCode.SUBTREE_HAS_NO_DATA_SOURCE);
+ throw new CompilationException(ErrorCode.SUBTREE_HAS_NO_DATA_SOURCE, root.getSourceLocation());
}
}
@@ -446,7 +447,7 @@
return new ArrayList<>();
case NO_DATASOURCE:
default:
- throw CompilationException.create(ErrorCode.SUBTREE_HAS_NO_DATA_SOURCE);
+ throw new CompilationException(ErrorCode.SUBTREE_HAS_NO_DATA_SOURCE, root.getSourceLocation());
}
}
@@ -467,7 +468,8 @@
return new ArrayList<>();
case NO_DATASOURCE:
default:
- throw CompilationException.create(ErrorCode.SUBTREE_HAS_NO_ADDTIONAL_DATA_SOURCE);
+ throw new CompilationException(ErrorCode.SUBTREE_HAS_NO_ADDTIONAL_DATA_SOURCE,
+ root.getSourceLocation());
}
} else {
return null;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/RTreeAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/RTreeAccessMethod.java
index f4316037..19558aa 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/RTreeAccessMethod.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/RTreeAccessMethod.java
@@ -254,6 +254,7 @@
// The create MBR function "extracts" one field of an MBR around the given spatial object.
AbstractFunctionCallExpression createMBR =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.CREATE_MBR));
+ createMBR.setSourceLocation(optFuncExpr.getFuncExpr().getSourceLocation());
// Spatial object is the constant from the func expr we are optimizing.
createMBR.getArguments().add(new MutableObject<>(returnedSearchKeyExpr));
// The number of dimensions
@@ -274,11 +275,13 @@
if (probeSubTree == null) {
// We are optimizing a selection query.
// Input to this assign is the EmptyTupleSource (which the dataSourceScan also must have had as input).
+ assignSearchKeys.setSourceLocation(dataSourceOp.getSourceLocation());
assignSearchKeys.getInputs().add(
new MutableObject<>(OperatorManipulationUtil.deepCopy(dataSourceOp.getInputs().get(0).getValue())));
assignSearchKeys.setExecutionMode(dataSourceOp.getExecutionMode());
} else {
// We are optimizing a join, place the assign op top of the probe subtree.
+ assignSearchKeys.setSourceLocation(probeSubTree.getRoot().getSourceLocation());
assignSearchKeys.getInputs().add(probeSubTree.getRootRef());
assignSearchKeys.setExecutionMode(dataSourceOp.getExecutionMode());
OperatorPropertiesUtil.typeOpRec(probeSubTree.getRootRef(), context);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
index 8bfa53a..a98a9f4 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineAllNtsInSubplanVisitor.java
@@ -29,6 +29,8 @@
import java.util.Map.Entry;
import java.util.Set;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.constants.AsterixConstantValue;
@@ -85,6 +87,7 @@
import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.algebricks.core.algebra.visitors.IQueryOperatorVisitor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* This visitor inlines all nested tuple source operators in the query
@@ -218,8 +221,9 @@
for (LogicalVariable keyVar : correlatedKeyVars) {
if (!groupKeyVars.contains(keyVar)) {
LogicalVariable newVar = context.newVar();
- op.getGroupByList()
- .add(new Pair<>(newVar, new MutableObject<>(new VariableReferenceExpression(keyVar))));
+ VariableReferenceExpression keyVarRef = new VariableReferenceExpression(keyVar);
+ keyVarRef.setSourceLocation(op.getSourceLocation());
+ op.getGroupByList().add(new Pair<>(newVar, new MutableObject<>(keyVarRef)));
addedGroupKeyMapping.put(keyVar, newVar);
}
}
@@ -254,7 +258,8 @@
VariableUtilities.getSubplanLocalLiveVariables(op.getInputs().get(0).getValue(), inputLiveVars);
// Creates a record construction assign operator.
- Pair<ILogicalOperator, LogicalVariable> assignOpAndRecordVar = createRecordConstructorAssignOp(inputLiveVars);
+ Pair<ILogicalOperator, LogicalVariable> assignOpAndRecordVar =
+ createRecordConstructorAssignOp(inputLiveVars, op.getSourceLocation());
ILogicalOperator assignOp = assignOpAndRecordVar.first;
LogicalVariable recordVar = assignOpAndRecordVar.second;
ILogicalOperator inputOp = op.getInputs().get(0).getValue();
@@ -267,41 +272,49 @@
gbyOp.getInputs().add(new MutableObject<>(assignOp));
// Adds an unnest operators on top of the group-by operator.
- Pair<ILogicalOperator, LogicalVariable> unnestOpAndUnnestVar = createUnnestForAggregatedList(aggVar);
+ Pair<ILogicalOperator, LogicalVariable> unnestOpAndUnnestVar =
+ createUnnestForAggregatedList(aggVar, op.getSourceLocation());
ILogicalOperator unnestOp = unnestOpAndUnnestVar.first;
LogicalVariable unnestVar = unnestOpAndUnnestVar.second;
unnestOp.getInputs().add(new MutableObject<>(gbyOp));
// Adds field accesses to recover input live variables.
- ILogicalOperator fieldAccessAssignOp = createFieldAccessAssignOperator(unnestVar, inputLiveVars);
+ ILogicalOperator fieldAccessAssignOp =
+ createFieldAccessAssignOperator(unnestVar, inputLiveVars, op.getSourceLocation());
fieldAccessAssignOp.getInputs().add(new MutableObject<>(unnestOp));
OperatorManipulationUtil.computeTypeEnvironmentBottomUp(fieldAccessAssignOp, context);
return fieldAccessAssignOp;
}
- private Pair<ILogicalOperator, LogicalVariable> createRecordConstructorAssignOp(
- Set<LogicalVariable> inputLiveVars) {
+ private Pair<ILogicalOperator, LogicalVariable> createRecordConstructorAssignOp(Set<LogicalVariable> inputLiveVars,
+ SourceLocation sourceLoc) {
// Creates a nested record.
List<Mutable<ILogicalExpression>> recordConstructorArgs = new ArrayList<>();
for (LogicalVariable inputLiveVar : inputLiveVars) {
if (!correlatedKeyVars.contains(inputLiveVar)) {
recordConstructorArgs.add(new MutableObject<>(new ConstantExpression(
new AsterixConstantValue(new AString(Integer.toString(inputLiveVar.getId()))))));
- recordConstructorArgs.add(new MutableObject<>(new VariableReferenceExpression(inputLiveVar)));
+ VariableReferenceExpression inputLiveVarRef = new VariableReferenceExpression(inputLiveVar);
+ inputLiveVarRef.setSourceLocation(sourceLoc);
+ recordConstructorArgs.add(new MutableObject<>(inputLiveVarRef));
}
}
LogicalVariable recordVar = context.newVar();
- Mutable<ILogicalExpression> recordExprRef =
- new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR), recordConstructorArgs));
+ ScalarFunctionCallExpression openRecConstr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR), recordConstructorArgs);
+ openRecConstr.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> recordExprRef = new MutableObject<ILogicalExpression>(openRecConstr);
AssignOperator assignOp = new AssignOperator(recordVar, recordExprRef);
+ assignOp.setSourceLocation(sourceLoc);
return new Pair<>(assignOp, recordVar);
}
private Pair<ILogicalOperator, LogicalVariable> wrapLimitInGroupBy(ILogicalOperator op, LogicalVariable recordVar,
Set<LogicalVariable> inputLiveVars) throws AlgebricksException {
+ SourceLocation sourceLoc = op.getSourceLocation();
GroupByOperator gbyOp = new GroupByOperator();
+ gbyOp.setSourceLocation(sourceLoc);
List<Pair<LogicalVariable, LogicalVariable>> keyVarNewVarPairs = new ArrayList<>();
for (LogicalVariable keyVar : correlatedKeyVars) {
// This limits the visitor can only be applied to a nested logical
@@ -309,8 +322,9 @@
// where the keyVarsToEnforce forms a candidate key which can
// uniquely identify a tuple out of the nested-tuple-source.
LogicalVariable newVar = context.newVar();
- gbyOp.getGroupByList()
- .add(new Pair<>(newVar, new MutableObject<>(new VariableReferenceExpression(keyVar))));
+ VariableReferenceExpression keyVarRef = new VariableReferenceExpression(keyVar);
+ keyVarRef.setSourceLocation(sourceLoc);
+ gbyOp.getGroupByList().add(new Pair<>(newVar, new MutableObject<>(keyVarRef)));
keyVarNewVarPairs.add(new Pair<>(keyVar, newVar));
}
@@ -322,11 +336,15 @@
List<Mutable<ILogicalExpression>> aggArgList = new ArrayList<>();
aggVarList.add(aggVar);
// Creates an aggregation function expression.
- aggArgList.add(new MutableObject<>(new VariableReferenceExpression(recordVar)));
- ILogicalExpression aggExpr = new AggregateFunctionCallExpression(
+ VariableReferenceExpression recordVarRef = new VariableReferenceExpression(recordVar);
+ recordVarRef.setSourceLocation(sourceLoc);
+ aggArgList.add(new MutableObject<>(recordVarRef));
+ AggregateFunctionCallExpression aggExpr = new AggregateFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.LISTIFY), false, aggArgList);
+ aggExpr.setSourceLocation(sourceLoc);
aggExprList.add(new MutableObject<>(aggExpr));
AggregateOperator aggOp = new AggregateOperator(aggVarList, aggExprList);
+ aggOp.setSourceLocation(sourceLoc);
// Adds the original limit operator as the input operator to the added
// aggregate operator.
@@ -335,6 +353,7 @@
ILogicalOperator currentOp = op;
if (!orderingExprs.isEmpty()) {
OrderOperator orderOp = new OrderOperator(cloneOrderingExpression(orderingExprs));
+ orderOp.setSourceLocation(sourceLoc);
op.getInputs().add(new MutableObject<>(orderOp));
currentOp = orderOp;
}
@@ -342,6 +361,7 @@
// Adds a nested tuple source operator as the input operator to the
// limit operator.
NestedTupleSourceOperator nts = new NestedTupleSourceOperator(new MutableObject<>(gbyOp));
+ nts.setSourceLocation(sourceLoc);
currentOp.getInputs().add(new MutableObject<>(nts));
// Sets the root of the added nested plan to the aggregate operator.
@@ -358,20 +378,25 @@
return new Pair<>(gbyOp, aggVar);
}
- private Pair<ILogicalOperator, LogicalVariable> createUnnestForAggregatedList(LogicalVariable aggVar) {
+ private Pair<ILogicalOperator, LogicalVariable> createUnnestForAggregatedList(LogicalVariable aggVar,
+ SourceLocation sourceLoc) {
LogicalVariable unnestVar = context.newVar();
// Creates an unnest function expression.
- Mutable<ILogicalExpression> unnestArg = new MutableObject<>(new VariableReferenceExpression(aggVar));
+ VariableReferenceExpression aggVarRef = new VariableReferenceExpression(aggVar);
+ aggVarRef.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> unnestArg = new MutableObject<>(aggVarRef);
List<Mutable<ILogicalExpression>> unnestArgList = new ArrayList<>();
unnestArgList.add(unnestArg);
- Mutable<ILogicalExpression> unnestExpr = new MutableObject<>(new UnnestingFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), unnestArgList));
- ILogicalOperator unnestOp = new UnnestOperator(unnestVar, unnestExpr);
+ UnnestingFunctionCallExpression unnestExpr = new UnnestingFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), unnestArgList);
+ unnestExpr.setSourceLocation(sourceLoc);
+ UnnestOperator unnestOp = new UnnestOperator(unnestVar, new MutableObject<>(unnestExpr));
+ unnestOp.setSourceLocation(sourceLoc);
return new Pair<>(unnestOp, unnestVar);
}
private ILogicalOperator createFieldAccessAssignOperator(LogicalVariable recordVar,
- Set<LogicalVariable> inputLiveVars) {
+ Set<LogicalVariable> inputLiveVars, SourceLocation sourceLoc) {
List<LogicalVariable> fieldAccessVars = new ArrayList<>();
List<Mutable<ILogicalExpression>> fieldAccessExprs = new ArrayList<>();
// Adds field access by name.
@@ -382,16 +407,22 @@
fieldAccessVars.add(newVar);
// fieldAcess expr
List<Mutable<ILogicalExpression>> argRefs = new ArrayList<>();
- argRefs.add(new MutableObject<>(new VariableReferenceExpression(recordVar)));
+ VariableReferenceExpression recordVarRef = new VariableReferenceExpression(recordVar);
+ recordVarRef.setSourceLocation(sourceLoc);
+ argRefs.add(new MutableObject<>(recordVarRef));
argRefs.add(new MutableObject<>(new ConstantExpression(
new AsterixConstantValue(new AString(Integer.toString(inputLiveVar.getId()))))));
- fieldAccessExprs.add(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME), argRefs)));
+ ScalarFunctionCallExpression faExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME), argRefs);
+ faExpr.setSourceLocation(sourceLoc);
+ fieldAccessExprs.add(new MutableObject<>(faExpr));
// Updates variable mapping for ancestor operators.
updateInputToOutputVarMapping(inputLiveVar, newVar, false);
}
}
- return new AssignOperator(fieldAccessVars, fieldAccessExprs);
+ AssignOperator assignOp = new AssignOperator(fieldAccessVars, fieldAccessExprs);
+ assignOp.setSourceLocation(sourceLoc);
+ return assignOp;
}
@Override
@@ -445,13 +476,15 @@
List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprList = new ArrayList<>();
// Adds keyVars to the prefix of sorting columns.
for (LogicalVariable keyVar : correlatedKeyVars) {
- orderExprList.add(
- new Pair<>(OrderOperator.ASC_ORDER, new MutableObject<>(new VariableReferenceExpression(keyVar))));
+ VariableReferenceExpression keyVarRef = new VariableReferenceExpression(keyVar);
+ keyVarRef.setSourceLocation(op.getSourceLocation());
+ orderExprList.add(new Pair<>(OrderOperator.ASC_ORDER, new MutableObject<>(keyVarRef)));
}
orderExprList.addAll(op.getOrderExpressions());
// Creates an order operator with the new expression list.
OrderOperator orderOp = new OrderOperator(orderExprList);
+ orderOp.setSourceLocation(op.getSourceLocation());
orderOp.getInputs().addAll(op.getInputs());
context.computeAndSetTypeEnvironmentForOperator(orderOp);
return orderOp;
@@ -542,7 +575,8 @@
for (int i = 0; i < op.getNumInput(); i++) {
List<LogicalVariable> inputVars = op.getInputVariables(i);
if (inputVars.size() != outputVars.size()) {
- throw new AlgebricksException("The cardinality of input and output are not equal for Intersection");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, op.getSourceLocation(),
+ "The cardinality of input and output are not equal for Intersection");
}
for (int j = 0; j < inputVars.size(); j++) {
updateInputToOutputVarMapping(inputVars.get(j), outputVars.get(j), false);
@@ -576,7 +610,7 @@
@Override
public ILogicalOperator visitLeftOuterUnnestMapOperator(LeftOuterUnnestMapOperator op, Void arg)
throws AlgebricksException {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, op.getSourceLocation(),
"The subquery de-correlation rule should always be applied before index-access-method related rules.");
}
@@ -626,7 +660,9 @@
if (correlatedKeyVars.isEmpty()) {
return op;
}
+ SourceLocation sourceLoc = op.getSourceLocation();
GroupByOperator gbyOp = new GroupByOperator();
+ gbyOp.setSourceLocation(sourceLoc);
// Creates a copy of correlatedKeyVars, to fix the ConcurrentModificationException in ASTERIXDB-1581.
List<LogicalVariable> copyOfCorrelatedKeyVars = new ArrayList<>(correlatedKeyVars);
for (LogicalVariable keyVar : copyOfCorrelatedKeyVars) {
@@ -635,8 +671,9 @@
// where the keyVarsToEnforce forms a candidate key which can
// uniquely identify a tuple out of the nested-tuple-source.
LogicalVariable newVar = context.newVar();
- gbyOp.getGroupByList()
- .add(new Pair<>(newVar, new MutableObject<>(new VariableReferenceExpression(keyVar))));
+ VariableReferenceExpression keyVarRef = new VariableReferenceExpression(keyVar);
+ keyVarRef.setSourceLocation(sourceLoc);
+ gbyOp.getGroupByList().add(new Pair<>(newVar, new MutableObject<>(keyVarRef)));
updateInputToOutputVarMapping(keyVar, newVar, false);
}
@@ -644,6 +681,7 @@
gbyOp.getInputs().add(new MutableObject<>(inputOp));
NestedTupleSourceOperator nts = new NestedTupleSourceOperator(new MutableObject<>(gbyOp));
+ nts.setSourceLocation(sourceLoc);
op.getInputs().clear();
op.getInputs().add(new MutableObject<>(nts));
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java
index 4a28344..610fea2 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineLeftNtsInSubplanJoinFlatteningVisitor.java
@@ -192,6 +192,7 @@
// After rewriting, the original inner join should become an left outer join.
if (rewritten) {
returnOp = new LeftOuterJoinOperator(op.getCondition());
+ returnOp.setSourceLocation(op.getSourceLocation());
returnOp.getInputs().addAll(op.getInputs());
injectNullCheckVars(returnOp);
}
@@ -231,13 +232,16 @@
List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprList = new ArrayList<>();
// Adds keyVars to the prefix of sorting columns.
for (LogicalVariable liveVar : liveVarsFromSubplanInput) {
+ VariableReferenceExpression liveVarRef = new VariableReferenceExpression(liveVar);
+ liveVarRef.setSourceLocation(op.getSourceLocation());
orderExprList.add(new Pair<IOrder, Mutable<ILogicalExpression>>(OrderOperator.ASC_ORDER,
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(liveVar))));
+ new MutableObject<ILogicalExpression>(liveVarRef)));
}
orderExprList.addAll(op.getOrderExpressions());
// Creates an order operator with the new expression list.
OrderOperator orderOp = new OrderOperator(orderExprList);
+ orderOp.setSourceLocation(op.getSourceLocation());
orderOp.getInputs().addAll(op.getInputs());
context.computeAndSetTypeEnvironmentForOperator(orderOp);
return orderOp;
@@ -399,8 +403,9 @@
*/
private void injectNullCheckVars(AbstractBinaryJoinOperator joinOp) {
LogicalVariable assignVar = context.newVar();
- ILogicalOperator assignOp =
+ AssignOperator assignOp =
new AssignOperator(assignVar, new MutableObject<ILogicalExpression>(ConstantExpression.TRUE));
+ assignOp.setSourceLocation(joinOp.getSourceLocation());
assignOp.getInputs().add(joinOp.getInputs().get(1));
joinOp.getInputs().set(1, new MutableObject<ILogicalOperator>(assignOp));
nullCheckVars.add(assignVar);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java
index 3edccec..62f89f1 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/subplan/InlineSubplanInputForNestedTupleSourceRule.java
@@ -56,6 +56,7 @@
import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/*
This rule is to remove SubplanOperators containing DataScan, InnerJoin, LeftOuterJoin.
@@ -356,6 +357,7 @@
LogicalOperatorTag.INNERJOIN, LogicalOperatorTag.LEFTOUTERJOIN))) {
return new Pair<>(false, new LinkedHashMap<>());
}
+ SourceLocation sourceLoc = subplanOp.getSourceLocation();
Mutable<ILogicalOperator> inputOpRef = subplanOp.getInputs().get(0);
ILogicalOperator inputOpBackup = inputOpRef.getValue();
// Creates parameters for the left outer join operator.
@@ -382,7 +384,8 @@
// Creates a variable to indicate whether a left input tuple is killed in the plan rooted at rightInputOp.
LogicalVariable assignVar = context.newVar();
- ILogicalOperator assignOp = new AssignOperator(assignVar, new MutableObject<>(ConstantExpression.TRUE));
+ AssignOperator assignOp = new AssignOperator(assignVar, new MutableObject<>(ConstantExpression.TRUE));
+ assignOp.setSourceLocation(rightInputOp.getSourceLocation());
assignOp.getInputs().add(rightInputOpRef);
context.computeAndSetTypeEnvironmentForOperator(assignOp);
rightInputOpRef = new MutableObject<>(assignOp);
@@ -391,20 +394,31 @@
List<Mutable<ILogicalExpression>> joinPredicates = new ArrayList<>();
for (LogicalVariable liveVar : primaryKeyVars) {
List<Mutable<ILogicalExpression>> arguments = new ArrayList<>();
- arguments.add(new MutableObject<>(new VariableReferenceExpression(liveVar)));
+ VariableReferenceExpression liveVarRef = new VariableReferenceExpression(liveVar);
+ liveVarRef.setSourceLocation(sourceLoc);
+ arguments.add(new MutableObject<>(liveVarRef));
LogicalVariable rightVar = varMap.get(liveVar);
- arguments.add(new MutableObject<>(new VariableReferenceExpression(rightVar)));
- ILogicalExpression expr = new ScalarFunctionCallExpression(
+ VariableReferenceExpression rightVarRef = new VariableReferenceExpression(rightVar);
+ rightVarRef.setSourceLocation(sourceLoc);
+ arguments.add(new MutableObject<>(rightVarRef));
+ ScalarFunctionCallExpression expr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.EQ), arguments);
+ expr.setSourceLocation(sourceLoc);
joinPredicates.add(new MutableObject<>(expr));
}
- ILogicalExpression joinExpr = joinPredicates.size() > 1
- ? new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.AND),
- joinPredicates)
- : joinPredicates.size() > 0 ? joinPredicates.get(0).getValue() : ConstantExpression.TRUE;
+ ILogicalExpression joinExpr;
+ if (joinPredicates.size() > 1) {
+ ScalarFunctionCallExpression andExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.AND), joinPredicates);
+ andExpr.setSourceLocation(sourceLoc);
+ joinExpr = andExpr;
+ } else {
+ joinExpr = joinPredicates.size() > 0 ? joinPredicates.get(0).getValue() : ConstantExpression.TRUE;
+ }
LeftOuterJoinOperator leftOuterJoinOp =
new LeftOuterJoinOperator(new MutableObject<>(joinExpr), inputOpRef, rightInputOpRef);
+ leftOuterJoinOp.setSourceLocation(sourceLoc);
OperatorManipulationUtil.computeTypeEnvironmentBottomUp(rightInputOp, context);
context.computeAndSetTypeEnvironmentForOperator(leftOuterJoinOp);
@@ -413,11 +427,14 @@
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByDecorList = new ArrayList<>();
List<ILogicalPlan> nestedPlans = new ArrayList<>();
GroupByOperator groupbyOp = new GroupByOperator(groupByList, groupByDecorList, nestedPlans);
+ groupbyOp.setSourceLocation(sourceLoc);
LinkedHashMap<LogicalVariable, LogicalVariable> replacedVarMap = new LinkedHashMap<>();
for (LogicalVariable liveVar : primaryKeyVars) {
LogicalVariable newVar = context.newVar();
- groupByList.add(new Pair<>(newVar, new MutableObject<>(new VariableReferenceExpression(liveVar))));
+ VariableReferenceExpression liveVarRef = new VariableReferenceExpression(liveVar);
+ liveVarRef.setSourceLocation(inputOpBackup.getSourceLocation());
+ groupByList.add(new Pair<>(newVar, new MutableObject<>(liveVarRef)));
// Adds variables for replacements in ancestors.
replacedVarMap.put(liveVar, newVar);
}
@@ -425,7 +442,9 @@
if (primaryKeyVars.contains(liveVar)) {
continue;
}
- groupByDecorList.add(new Pair<>(null, new MutableObject<>(new VariableReferenceExpression(liveVar))));
+ VariableReferenceExpression liveVarRef = new VariableReferenceExpression(liveVar);
+ liveVarRef.setSourceLocation(sourceLoc);
+ groupByDecorList.add(new Pair<>(null, new MutableObject<>(liveVarRef)));
}
// Sets up the nested plan for the groupby operator.
@@ -436,23 +455,33 @@
List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprs = varMapAndOrderExprs.second;
if (!orderExprs.isEmpty()) {
OrderOperator orderOp = new OrderOperator(orderExprs);
+ orderOp.setSourceLocation(sourceLoc);
currentOpRef = new MutableObject<>(orderOp);
lowestAggregateRefInSubplan.getValue().getInputs().add(currentOpRef);
}
// Adds a select operator into the nested plan for group-by to remove tuples with NULL on {@code assignVar},
// i.e., subplan input tuples that are filtered out within a subplan.
- Mutable<ILogicalExpression> filterVarExpr = new MutableObject<>(new VariableReferenceExpression(assignVar));
+ VariableReferenceExpression assignVarRef = new VariableReferenceExpression(assignVar);
+ assignVarRef.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> filterVarExpr = new MutableObject<>(assignVarRef);
List<Mutable<ILogicalExpression>> args = new ArrayList<>();
args.add(filterVarExpr);
List<Mutable<ILogicalExpression>> argsForNotFunction = new ArrayList<>();
- argsForNotFunction.add(new MutableObject<>(
- new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.IS_MISSING), args)));
- SelectOperator selectOp = new SelectOperator(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), argsForNotFunction)), false, null);
+ ScalarFunctionCallExpression isMissingExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.IS_MISSING), args);
+ isMissingExpr.setSourceLocation(sourceLoc);
+ argsForNotFunction.add(new MutableObject<>(isMissingExpr));
+ ScalarFunctionCallExpression notExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), argsForNotFunction);
+ notExpr.setSourceLocation(sourceLoc);
+ SelectOperator selectOp = new SelectOperator(new MutableObject<>(notExpr), false, null);
+ selectOp.setSourceLocation(sourceLoc);
currentOpRef.getValue().getInputs().add(new MutableObject<>(selectOp));
- selectOp.getInputs().add(new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(groupbyOp))));
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(groupbyOp));
+ ntsOp.setSourceLocation(sourceLoc);
+ selectOp.getInputs().add(new MutableObject<>(ntsOp));
List<Mutable<ILogicalOperator>> nestedRoots = new ArrayList<>();
nestedRoots.add(aggOpRef);
nestedPlans.add(new ALogicalPlanImpl(nestedRoots));
@@ -476,6 +505,7 @@
private Pair<Boolean, LinkedHashMap<LogicalVariable, LogicalVariable>> applySpecialFlattening(
Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
SubplanOperator subplanOp = (SubplanOperator) opRef.getValue();
+ SourceLocation sourceLoc = subplanOp.getSourceLocation();
Mutable<ILogicalOperator> inputOpRef = subplanOp.getInputs().get(0);
LinkedHashMap<LogicalVariable, LogicalVariable> replacedVarMap = new LinkedHashMap<>();
@@ -508,10 +538,13 @@
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByList = new ArrayList<>();
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByDecorList = new ArrayList<>();
GroupByOperator groupbyOp = new GroupByOperator(groupByList, groupByDecorList, subplanOp.getNestedPlans());
+ groupbyOp.setSourceLocation(sourceLoc);
for (LogicalVariable coverVar : primaryKeyVars) {
LogicalVariable newVar = context.newVar();
- groupByList.add(new Pair<>(newVar, new MutableObject<>(new VariableReferenceExpression(coverVar))));
+ VariableReferenceExpression coverVarRef = new VariableReferenceExpression(coverVar);
+ coverVarRef.setSourceLocation(sourceLoc);
+ groupByList.add(new Pair<>(newVar, new MutableObject<>(coverVarRef)));
// Adds variables for replacements in ancestors.
replacedVarMap.put(coverVar, newVar);
}
@@ -519,7 +552,9 @@
if (primaryKeyVars.contains(liveVar)) {
continue;
}
- groupByDecorList.add(new Pair<>(null, new MutableObject<>(new VariableReferenceExpression(liveVar))));
+ VariableReferenceExpression liveVarRef = new VariableReferenceExpression(liveVar);
+ liveVarRef.setSourceLocation(sourceLoc);
+ groupByDecorList.add(new Pair<>(null, new MutableObject<>(liveVarRef)));
}
groupbyOp.getInputs().add(new MutableObject<>(topJoinRef.getValue()));
@@ -528,28 +563,42 @@
// i.e., subplan input tuples that are filtered out within a subplan.
List<Mutable<ILogicalExpression>> nullCheckExprRefs = new ArrayList<>();
for (LogicalVariable notNullVar : notNullVars) {
- Mutable<ILogicalExpression> filterVarExpr =
- new MutableObject<>(new VariableReferenceExpression(notNullVar));
+ VariableReferenceExpression notNullVarRef = new VariableReferenceExpression(notNullVar);
+ notNullVarRef.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> filterVarExpr = new MutableObject<>(notNullVarRef);
List<Mutable<ILogicalExpression>> args = new ArrayList<>();
args.add(filterVarExpr);
List<Mutable<ILogicalExpression>> argsForNotFunction = new ArrayList<>();
- argsForNotFunction.add(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.IS_MISSING), args)));
- nullCheckExprRefs.add(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), argsForNotFunction)));
+ ScalarFunctionCallExpression isMissingExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.IS_MISSING), args);
+ isMissingExpr.setSourceLocation(sourceLoc);
+ argsForNotFunction.add(new MutableObject<>(isMissingExpr));
+ ScalarFunctionCallExpression notExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), argsForNotFunction);
+ notExpr.setSourceLocation(sourceLoc);
+ nullCheckExprRefs.add(new MutableObject<>(notExpr));
}
- Mutable<ILogicalExpression> selectExprRef = nullCheckExprRefs.size() > 1
- ? new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), nullCheckExprRefs))
- : nullCheckExprRefs.get(0);
+ Mutable<ILogicalExpression> selectExprRef;
+ if (nullCheckExprRefs.size() > 1) {
+ ScalarFunctionCallExpression andExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), nullCheckExprRefs);
+ andExpr.setSourceLocation(sourceLoc);
+ selectExprRef = new MutableObject<>(andExpr);
+ } else {
+ selectExprRef = nullCheckExprRefs.get(0);
+ }
SelectOperator selectOp = new SelectOperator(selectExprRef, false, null);
+ selectOp.setSourceLocation(sourceLoc);
topJoinRef.setValue(selectOp);
- selectOp.getInputs()
- .add(new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(groupbyOp))));
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(groupbyOp));
+ ntsOp.setSourceLocation(sourceLoc);
+ selectOp.getInputs().add(new MutableObject<>(ntsOp));
} else {
// The original join operator in the Subplan is a left-outer join.
// Therefore, no null-check variable is injected and no SelectOperator needs to be added.
- topJoinRef.setValue(new NestedTupleSourceOperator(new MutableObject<>(groupbyOp)));
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(groupbyOp));
+ ntsOp.setSourceLocation(sourceLoc);
+ topJoinRef.setValue(ntsOp);
}
opRef.setValue(groupbyOp);
OperatorManipulationUtil.computeTypeEnvironmentBottomUp(groupbyOp, context);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/temporal/TranslateIntervalExpressionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/temporal/TranslateIntervalExpressionRule.java
index 0d53a19..5b85cb6 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/temporal/TranslateIntervalExpressionRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/temporal/TranslateIntervalExpressionRule.java
@@ -212,7 +212,10 @@
private ILogicalExpression getScalarExpr(FunctionIdentifier func, ILogicalExpression interval) {
List<Mutable<ILogicalExpression>> intervalArg = new ArrayList<>();
intervalArg.add(new MutableObject<ILogicalExpression>(interval));
- return new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(func), intervalArg);
+ ScalarFunctionCallExpression fnExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(func), intervalArg);
+ fnExpr.setSourceLocation(interval.getSourceLocation());
+ return fnExpr;
}
private ILogicalExpression getScalarExpr(FunctionIdentifier func, ILogicalExpression interval1,
@@ -220,7 +223,10 @@
List<Mutable<ILogicalExpression>> intervalArg = new ArrayList<>();
intervalArg.add(new MutableObject<ILogicalExpression>(interval1));
intervalArg.add(new MutableObject<ILogicalExpression>(interval2));
- return new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(func), intervalArg);
+ ScalarFunctionCallExpression fnExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(func), intervalArg);
+ fnExpr.setSourceLocation(interval1.getSourceLocation());
+ return fnExpr;
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
index efea208..4b2ff76 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
@@ -25,6 +25,8 @@
import java.util.List;
import java.util.Set;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.om.base.ANull;
import org.apache.asterix.om.base.AString;
@@ -165,7 +167,7 @@
}
}
if (!compatible(reqType, inputType)) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, funcExpr.getSourceLocation(),
"type mismatch, required: " + reqType.toString() + " actual: " + inputType.toString());
}
return changed;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java
index 82d963d..1593cf1 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/util/EquivalenceClassUtils.java
@@ -116,11 +116,13 @@
fieldIndexInRecord = metaFieldNameToIndexMap.get(pkFieldName);
}
LogicalVariable var = indexSearchVars.get(pkIndex);
- ILogicalExpression expr = new ScalarFunctionCallExpression(
+ VariableReferenceExpression referredRecordVarRef = new VariableReferenceExpression(referredRecordVar);
+ referredRecordVarRef.setSourceLocation(operator.getSourceLocation());
+ ScalarFunctionCallExpression expr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX),
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(referredRecordVar)),
- new MutableObject<ILogicalExpression>(
+ new MutableObject<ILogicalExpression>(referredRecordVarRef), new MutableObject<ILogicalExpression>(
new ConstantExpression(new AsterixConstantValue(new AInt32(fieldIndexInRecord)))));
+ expr.setSourceLocation(operator.getSourceLocation());
EquivalenceClass equivClass =
new EquivalenceClass(Collections.singletonList(var), var, Collections.singletonList(expr));
Map<LogicalVariable, EquivalenceClass> equivalenceMap = context.getEquivalenceClassMap(operator);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
index 81c5f4c..e777c4e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
@@ -170,7 +170,7 @@
throws CompilationException {
List<ILangExpression> inputExprs = new ArrayList<>();
inputExprs.addAll(unionExpr.getExprs());
- Pair<ILogicalOperator, LogicalVariable> result = translateUnionAllFromInputExprs(inputExprs, tupSource);
+ Pair<ILogicalOperator, LogicalVariable> result = translateUnionAllFromInputExprs(inputExprs, tupSource, null);
return aggListifyForSubquery(result.second, new MutableObject<>(result.first), false);
}
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 3a4682e..5950329 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
@@ -28,6 +28,7 @@
import org.apache.asterix.metadata.entities.Dataset;
import org.apache.asterix.metadata.entities.Index;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* An AQL statement instance is translated into an instance of type CompileX
@@ -36,11 +37,24 @@
public class CompiledStatements {
public interface ICompiledStatement {
-
Statement.Kind getKind();
+
+ SourceLocation getSourceLocation();
}
- public static class CompiledDatasetDropStatement implements ICompiledStatement {
+ public static abstract class AbstractCompiledStatement implements ICompiledStatement {
+ private SourceLocation sourceLoc;
+
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
+
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+ }
+
+ public static class CompiledDatasetDropStatement extends AbstractCompiledStatement {
private final String dataverseName;
private final String datasetName;
@@ -64,7 +78,7 @@
}
// added by yasser
- public static class CompiledCreateDataverseStatement implements ICompiledStatement {
+ public static class CompiledCreateDataverseStatement extends AbstractCompiledStatement {
private final String dataverseName;
private final String format;
@@ -87,7 +101,7 @@
}
}
- public static class CompiledNodeGroupDropStatement implements ICompiledStatement {
+ public static class CompiledNodeGroupDropStatement extends AbstractCompiledStatement {
private final String nodeGroupName;
public CompiledNodeGroupDropStatement(String nodeGroupName) {
@@ -104,7 +118,7 @@
}
}
- public static class CompiledIndexDropStatement implements ICompiledStatement {
+ public static class CompiledIndexDropStatement extends AbstractCompiledStatement {
private final String dataverseName;
private final String datasetName;
private final String indexName;
@@ -133,7 +147,7 @@
}
}
- public static class CompiledDataverseDropStatement implements ICompiledStatement {
+ public static class CompiledDataverseDropStatement extends AbstractCompiledStatement {
private final String dataverseName;
private final boolean ifExists;
@@ -156,7 +170,7 @@
}
}
- public static class CompiledTypeDropStatement implements ICompiledStatement {
+ public static class CompiledTypeDropStatement extends AbstractCompiledStatement {
private final String typeName;
public CompiledTypeDropStatement(String nodeGroupName) {
@@ -173,14 +187,15 @@
}
}
- public static interface ICompiledDmlStatement extends ICompiledStatement {
+ public interface ICompiledDmlStatement extends ICompiledStatement {
- public String getDataverseName();
+ String getDataverseName();
- public String getDatasetName();
+ String getDatasetName();
}
- public static class CompiledCreateIndexStatement implements ICompiledDmlStatement {
+ public static class CompiledCreateIndexStatement extends AbstractCompiledStatement
+ implements ICompiledDmlStatement {
private final Dataset dataset;
private final Index index;
@@ -213,7 +228,8 @@
}
}
- public static class CompiledLoadFromFileStatement implements ICompiledDmlStatement {
+ public static class CompiledLoadFromFileStatement extends AbstractCompiledStatement
+ implements ICompiledDmlStatement {
private final String dataverseName;
private final String datasetName;
private final boolean alreadySorted;
@@ -257,7 +273,7 @@
}
}
- public static class CompiledInsertStatement implements ICompiledDmlStatement {
+ public static class CompiledInsertStatement extends AbstractCompiledStatement implements ICompiledDmlStatement {
private final String dataverseName;
private final String datasetName;
private final Query query;
@@ -320,7 +336,8 @@
}
}
- public static class CompiledSubscribeFeedStatement implements ICompiledDmlStatement {
+ public static class CompiledSubscribeFeedStatement extends AbstractCompiledStatement
+ implements ICompiledDmlStatement {
private FeedConnectionRequest request;
private final int varCounter;
@@ -354,7 +371,7 @@
}
}
- public static class CompiledDeleteStatement implements ICompiledDmlStatement {
+ public static class CompiledDeleteStatement extends AbstractCompiledStatement implements ICompiledDmlStatement {
private final String dataverseName;
private final String datasetName;
private final Expression condition;
@@ -399,7 +416,7 @@
}
- public static class CompiledCompactStatement implements ICompiledStatement {
+ public static class CompiledCompactStatement extends AbstractCompiledStatement {
private final String dataverseName;
private final String datasetName;
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 9a6870d..bc2c919 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
@@ -35,7 +35,7 @@
import org.apache.asterix.common.config.MetadataProperties;
import org.apache.asterix.common.dataflow.ICcApplicationContext;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.common.exceptions.MetadataException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionConstants;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.aql.util.RangeMapBuilder;
@@ -99,7 +99,6 @@
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.common.utils.Triple;
import org.apache.hyracks.algebricks.core.algebra.base.Counter;
@@ -150,6 +149,7 @@
import org.apache.hyracks.algebricks.core.algebra.properties.LocalOrderProperty;
import org.apache.hyracks.algebricks.core.algebra.properties.OrderColumn;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.io.FileSplit;
import org.apache.hyracks.api.io.ManagedFileSplit;
@@ -191,20 +191,21 @@
@Override
public ILogicalPlan translateLoad(ICompiledDmlStatement stmt) throws AlgebricksException {
CompiledLoadFromFileStatement clffs = (CompiledLoadFromFileStatement) stmt;
+ SourceLocation sourceLoc = stmt.getSourceLocation();
Dataset dataset = metadataProvider.findDataset(clffs.getDataverseName(), clffs.getDatasetName());
if (dataset == null) {
// This would never happen since we check for this in AqlTranslator
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Unable to load dataset " + clffs.getDatasetName() + " since it does not exist");
}
IAType itemType = metadataProvider.findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName());
IAType metaItemType =
metadataProvider.findType(dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName());
DatasetDataSource targetDatasource =
- validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName());
+ validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName(), sourceLoc);
List<List<String>> partitionKeys = targetDatasource.getDataset().getPrimaryKeys();
if (dataset.hasMetaPart()) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
dataset.getDatasetName() + ": load dataset is not supported on Datasets with Meta records");
}
@@ -212,7 +213,7 @@
try {
lds = new LoadableDataSource(dataset, itemType, metaItemType, clffs.getAdapter(), clffs.getProperties());
} catch (IOException e) {
- throw new AlgebricksException(e);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, e.toString(), e);
}
// etsOp is a dummy input operator used to keep the compiler happy. it
@@ -228,7 +229,11 @@
// Create a scan operator and make the empty tuple source its input
DataSourceScanOperator dssOp = new DataSourceScanOperator(payloadVars, lds);
dssOp.getInputs().add(new MutableObject<>(etsOp));
- ILogicalExpression payloadExpr = new VariableReferenceExpression(payloadVars.get(0));
+ dssOp.setSourceLocation(sourceLoc);
+
+ VariableReferenceExpression payloadExpr = new VariableReferenceExpression(payloadVars.get(0));
+ payloadExpr.setSourceLocation(sourceLoc);
+
Mutable<ILogicalExpression> payloadRef = new MutableObject<>(payloadExpr);
// Creating the assign to extract the PK out of the record
@@ -238,11 +243,12 @@
LogicalVariable payloadVar = payloadVars.get(0);
for (List<String> keyFieldName : partitionKeys) {
PlanTranslationUtil.prepareVarAndExpression(keyFieldName, payloadVar, pkVars, pkExprs, varRefsForLoading,
- context);
+ context, sourceLoc);
}
AssignOperator assign = new AssignOperator(pkVars, pkExprs);
assign.getInputs().add(new MutableObject<>(dssOp));
+ assign.setSourceLocation(sourceLoc);
// If the input is pre-sorted, we set the ordering property explicitly in the
// assign
@@ -264,14 +270,16 @@
additionalFilteringAssignExpressions = new ArrayList<>();
additionalFilteringExpressions = new ArrayList<>();
PlanTranslationUtil.prepareVarAndExpression(additionalFilteringField, payloadVar, additionalFilteringVars,
- additionalFilteringAssignExpressions, additionalFilteringExpressions, context);
+ additionalFilteringAssignExpressions, additionalFilteringExpressions, context, sourceLoc);
additionalFilteringAssign =
new AssignOperator(additionalFilteringVars, additionalFilteringAssignExpressions);
+ additionalFilteringAssign.setSourceLocation(sourceLoc);
}
InsertDeleteUpsertOperator insertOp = new InsertDeleteUpsertOperator(targetDatasource, payloadRef,
varRefsForLoading, InsertDeleteUpsertOperator.Kind.INSERT, true);
insertOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
+ insertOp.setSourceLocation(sourceLoc);
if (additionalFilteringAssign != null) {
additionalFilteringAssign.getInputs().add(new MutableObject<>(assign));
@@ -280,8 +288,9 @@
insertOp.getInputs().add(new MutableObject<>(assign));
}
- ILogicalOperator leafOperator = new SinkOperator();
+ SinkOperator leafOperator = new SinkOperator();
leafOperator.getInputs().add(new MutableObject<>(insertOp));
+ leafOperator.setSourceLocation(sourceLoc);
return new ALogicalPlanImpl(new MutableObject<>(leafOperator));
}
@@ -297,6 +306,7 @@
if (baseOp != null) {
base = new MutableObject<>(baseOp);
}
+ SourceLocation sourceLoc = expr.getSourceLocation();
Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, base);
ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<>();
ILogicalOperator topOp = p.first;
@@ -313,10 +323,13 @@
metadataProvider.setOutputFile(outputFileSplit);
List<Mutable<ILogicalExpression>> writeExprList = new ArrayList<>(1);
- writeExprList.add(new MutableObject<>(new VariableReferenceExpression(resVar)));
+ VariableReferenceExpression resVarRef = new VariableReferenceExpression(resVar);
+ resVarRef.setSourceLocation(sourceLoc);
+ writeExprList.add(new MutableObject<>(resVarRef));
ResultSetSinkId rssId = new ResultSetSinkId(metadataProvider.getResultSetId());
ResultSetDataSink sink = new ResultSetDataSink(rssId, null);
DistributeResultOperator newTop = new DistributeResultOperator(writeExprList, sink);
+ newTop.setSourceLocation(sourceLoc);
newTop.getInputs().add(new MutableObject<>(topOp));
topOp = newTop;
@@ -336,17 +349,23 @@
* This assign adds a marker function collection-to-sequence: if the input is a
* singleton collection, unnest it; otherwise do nothing.
*/
- AssignOperator assignCollectionToSequence = new AssignOperator(seqVar,
- new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.COLLECTION_TO_SEQUENCE),
- new MutableObject<>(new VariableReferenceExpression(resVar)))));
+ VariableReferenceExpression resVarRef = new VariableReferenceExpression(resVar);
+ resVarRef.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression collectionToSequenceExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.COLLECTION_TO_SEQUENCE),
+ new MutableObject<>(resVarRef));
+ collectionToSequenceExpr.setSourceLocation(sourceLoc);
+ AssignOperator assignCollectionToSequence =
+ new AssignOperator(seqVar, new MutableObject<>(collectionToSequenceExpr));
+ assignCollectionToSequence.setSourceLocation(sourceLoc);
+
assignCollectionToSequence.getInputs().add(new MutableObject<>(topOp.getInputs().get(0).getValue()));
topOp.getInputs().get(0).setValue(assignCollectionToSequence);
ProjectOperator projectOperator = (ProjectOperator) topOp;
projectOperator.getVariables().set(0, seqVar);
resVar = seqVar;
DatasetDataSource targetDatasource =
- validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName());
+ validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName(), sourceLoc);
List<Integer> keySourceIndicator =
((InternalDatasetDetails) targetDatasource.getDataset().getDatasetDetails())
.getKeySourceIndicator();
@@ -359,15 +378,16 @@
if (keySourceIndicator == null || keySourceIndicator.get(i).intValue() == 0) {
// record part
PlanTranslationUtil.prepareVarAndExpression(partitionKeys.get(i), resVar, vars, exprs,
- varRefsForLoading, context);
+ varRefsForLoading, context, sourceLoc);
} else {
// meta part
PlanTranslationUtil.prepareMetaKeyAccessExpression(partitionKeys.get(i), unnestVar, exprs, vars,
- varRefsForLoading, context);
+ varRefsForLoading, context, sourceLoc);
}
}
AssignOperator assign = new AssignOperator(vars, exprs);
+ assign.setSourceLocation(sourceLoc);
List<String> additionalFilteringField = DatasetUtil.getFilterField(targetDatasource.getDataset());
List<LogicalVariable> additionalFilteringVars;
List<Mutable<ILogicalExpression>> additionalFilteringAssignExpressions;
@@ -379,17 +399,20 @@
additionalFilteringExpressions = new ArrayList<>();
PlanTranslationUtil.prepareVarAndExpression(additionalFilteringField, resVar, additionalFilteringVars,
- additionalFilteringAssignExpressions, additionalFilteringExpressions, context);
+ additionalFilteringAssignExpressions, additionalFilteringExpressions, context, sourceLoc);
additionalFilteringAssign =
new AssignOperator(additionalFilteringVars, additionalFilteringAssignExpressions);
additionalFilteringAssign.getInputs().add(new MutableObject<>(topOp));
+ additionalFilteringAssign.setSourceLocation(sourceLoc);
assign.getInputs().add(new MutableObject<>(additionalFilteringAssign));
} else {
assign.getInputs().add(new MutableObject<>(topOp));
}
- Mutable<ILogicalExpression> varRef = new MutableObject<>(new VariableReferenceExpression(resVar));
+ VariableReferenceExpression resVarRef2 = new VariableReferenceExpression(resVar);
+ resVarRef2.setSourceLocation(sourceLoc);
+ Mutable<ILogicalExpression> varRef = new MutableObject<>(resVarRef2);
ILogicalOperator leafOperator;
switch (stmt.getKind()) {
case INSERT:
@@ -403,10 +426,11 @@
break;
case DELETE:
leafOperator = translateDelete(targetDatasource, varRef, varRefsForLoading,
- additionalFilteringExpressions, assign);
+ additionalFilteringExpressions, assign, stmt);
break;
default:
- throw new AlgebricksException("Unsupported statement kind " + stmt.getKind());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unsupported statement kind " + stmt.getKind());
}
topOp = leafOperator;
}
@@ -418,18 +442,22 @@
private ILogicalOperator translateDelete(DatasetDataSource targetDatasource, Mutable<ILogicalExpression> varRef,
List<Mutable<ILogicalExpression>> varRefsForLoading,
- List<Mutable<ILogicalExpression>> additionalFilteringExpressions, ILogicalOperator assign)
- throws AlgebricksException {
+ List<Mutable<ILogicalExpression>> additionalFilteringExpressions, ILogicalOperator assign,
+ ICompiledDmlStatement stmt) throws AlgebricksException {
+ SourceLocation sourceLoc = stmt.getSourceLocation();
if (targetDatasource.getDataset().hasMetaPart()) {
- throw new AlgebricksException(targetDatasource.getDataset().getDatasetName()
- + ": delete from dataset is not supported on Datasets with Meta records");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ targetDatasource.getDataset().getDatasetName()
+ + ": delete from dataset is not supported on Datasets with Meta records");
}
InsertDeleteUpsertOperator deleteOp = new InsertDeleteUpsertOperator(targetDatasource, varRef,
varRefsForLoading, InsertDeleteUpsertOperator.Kind.DELETE, false);
deleteOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
deleteOp.getInputs().add(new MutableObject<>(assign));
- ILogicalOperator leafOperator = new DelegateOperator(new CommitOperator(true));
+ deleteOp.setSourceLocation(sourceLoc);
+ DelegateOperator leafOperator = new DelegateOperator(new CommitOperator(true));
leafOperator.getInputs().add(new MutableObject<>(deleteOp));
+ leafOperator.setSourceLocation(sourceLoc);
return leafOperator;
}
@@ -439,9 +467,11 @@
List<String> additionalFilteringField, LogicalVariable unnestVar, ILogicalOperator topOp,
List<Mutable<ILogicalExpression>> exprs, LogicalVariable resVar, AssignOperator additionalFilteringAssign,
ICompiledDmlStatement stmt) throws AlgebricksException {
+ SourceLocation sourceLoc = stmt.getSourceLocation();
if (!targetDatasource.getDataset().allow(topOp, DatasetUtil.OP_UPSERT)) {
- throw new AlgebricksException(targetDatasource.getDataset().getDatasetName()
- + ": upsert into dataset is not supported on Datasets with Meta records");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ targetDatasource.getDataset().getDatasetName()
+ + ": upsert into dataset is not supported on Datasets with Meta records");
}
ProjectOperator project = (ProjectOperator) topOp;
CompiledUpsertStatement compiledUpsert = (CompiledUpsertStatement) stmt;
@@ -450,7 +480,8 @@
ILogicalOperator rootOperator;
if (targetDatasource.getDataset().hasMetaPart()) {
if (returnExpression != null) {
- throw new AlgebricksException("Returning not allowed on datasets with Meta records");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Returning not allowed on datasets with Meta records");
}
AssignOperator metaAndKeysAssign;
List<LogicalVariable> metaAndKeysVars;
@@ -460,12 +491,17 @@
metaAndKeysExprs = new ArrayList<>();
// add the meta function
IFunctionInfo finfoMeta = FunctionUtil.getFunctionInfo(BuiltinFunctions.META);
- ScalarFunctionCallExpression metaFunction = new ScalarFunctionCallExpression(finfoMeta,
- new MutableObject<>(new VariableReferenceExpression(unnestVar)));
+ VariableReferenceExpression unnestVarRef = new VariableReferenceExpression(unnestVar);
+ unnestVarRef.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression metaFunction =
+ new ScalarFunctionCallExpression(finfoMeta, new MutableObject<>(unnestVarRef));
+ metaFunction.setSourceLocation(sourceLoc);
// create assign for the meta part
LogicalVariable metaVar = context.newVar();
metaExpSingletonList = new ArrayList<>(1);
- metaExpSingletonList.add(new MutableObject<>(new VariableReferenceExpression(metaVar)));
+ VariableReferenceExpression metaVarRef = new VariableReferenceExpression(metaVar);
+ metaVarRef.setSourceLocation(sourceLoc);
+ metaExpSingletonList.add(new MutableObject<>(metaVarRef));
metaAndKeysVars.add(metaVar);
metaAndKeysExprs.add(new MutableObject<>(metaFunction));
project.getVariables().add(metaVar);
@@ -487,6 +523,7 @@
// Create and add a new variable used for representing the original record
upsertOp.setPrevRecordVar(context.newVar());
upsertOp.setPrevRecordType(targetDatasource.getItemType());
+ upsertOp.setSourceLocation(sourceLoc);
if (targetDatasource.getDataset().hasMetaPart()) {
List<LogicalVariable> metaVars = new ArrayList<>();
metaVars.add(context.newVar());
@@ -508,6 +545,7 @@
}
metaAndKeysAssign = new AssignOperator(metaAndKeysVars, metaAndKeysExprs);
metaAndKeysAssign.getInputs().add(topOp.getInputs().get(0));
+ metaAndKeysAssign.setSourceLocation(sourceLoc);
topOp.getInputs().set(0, new MutableObject<>(metaAndKeysAssign));
upsertOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
} else {
@@ -515,6 +553,7 @@
InsertDeleteUpsertOperator.Kind.UPSERT, false);
upsertOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
upsertOp.getInputs().add(new MutableObject<>(assign));
+ upsertOp.setSourceLocation(sourceLoc);
// Create and add a new variable used for representing the original record
ARecordType recordType = (ARecordType) targetDatasource.getItemType();
upsertOp.setPrevRecordVar(context.newVar());
@@ -524,34 +563,38 @@
upsertOp.setPrevFilterType(recordType.getFieldType(additionalFilteringField.get(0)));
}
}
- rootOperator = new DelegateOperator(new CommitOperator(returnExpression == null));
- rootOperator.getInputs().add(new MutableObject<>(upsertOp));
+ DelegateOperator delegateOperator = new DelegateOperator(new CommitOperator(returnExpression == null));
+ delegateOperator.getInputs().add(new MutableObject<>(upsertOp));
+ delegateOperator.setSourceLocation(sourceLoc);
+ rootOperator = delegateOperator;
// Compiles the return expression.
return processReturningExpression(rootOperator, upsertOp, compiledUpsert);
-
}
private ILogicalOperator translateInsert(DatasetDataSource targetDatasource, Mutable<ILogicalExpression> varRef,
List<Mutable<ILogicalExpression>> varRefsForLoading,
List<Mutable<ILogicalExpression>> additionalFilteringExpressions, ILogicalOperator assign,
ICompiledDmlStatement stmt) throws AlgebricksException {
+ SourceLocation sourceLoc = stmt.getSourceLocation();
if (targetDatasource.getDataset().hasMetaPart()) {
- throw new AlgebricksException(targetDatasource.getDataset().getDatasetName()
- + ": insert into dataset is not supported on Datasets with Meta records");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ targetDatasource.getDataset().getDatasetName()
+ + ": insert into dataset is not supported on Datasets with Meta records");
}
// Adds the insert operator.
InsertDeleteUpsertOperator insertOp = new InsertDeleteUpsertOperator(targetDatasource, varRef,
varRefsForLoading, InsertDeleteUpsertOperator.Kind.INSERT, false);
insertOp.setAdditionalFilteringExpressions(additionalFilteringExpressions);
insertOp.getInputs().add(new MutableObject<>(assign));
+ insertOp.setSourceLocation(sourceLoc);
// Adds the commit operator.
CompiledInsertStatement compiledInsert = (CompiledInsertStatement) stmt;
Expression returnExpression = compiledInsert.getReturnExpression();
- ILogicalOperator rootOperator =
- new DelegateOperator(new CommitOperator(returnExpression == null ? true : false));
+ DelegateOperator rootOperator = new DelegateOperator(new CommitOperator(returnExpression == null));
rootOperator.getInputs().add(new MutableObject<>(insertOp));
+ rootOperator.setSourceLocation(sourceLoc);
// Compiles the return expression.
return processReturningExpression(rootOperator, insertOp, compiledInsert);
@@ -565,38 +608,43 @@
if (returnExpression == null) {
return inputOperator;
}
- ILogicalOperator rootOperator = inputOperator;
+ SourceLocation sourceLoc = compiledInsert.getSourceLocation();
// Makes the id of the insert var point to the record variable.
context.newVarFromExpression(compiledInsert.getVar());
context.setVar(compiledInsert.getVar(),
((VariableReferenceExpression) insertOp.getPayloadExpression().getValue()).getVariableReference());
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p =
- langExprToAlgExpression(returnExpression, new MutableObject<>(rootOperator));
+ langExprToAlgExpression(returnExpression, new MutableObject<>(inputOperator));
// Adds an assign operator for the returning expression.
LogicalVariable resultVar = context.newVar();
AssignOperator assignOperator = new AssignOperator(resultVar, new MutableObject<>(p.first));
assignOperator.getInputs().add(p.second);
+ assignOperator.setSourceLocation(sourceLoc);
// Adds a distribute result operator.
List<Mutable<ILogicalExpression>> expressions = new ArrayList<>();
expressions.add(new MutableObject<>(new VariableReferenceExpression(resultVar)));
ResultSetSinkId rssId = new ResultSetSinkId(metadataProvider.getResultSetId());
ResultSetDataSink sink = new ResultSetDataSink(rssId, null);
- rootOperator = new DistributeResultOperator(expressions, sink);
- rootOperator.getInputs().add(new MutableObject<>(assignOperator));
- return rootOperator;
+ DistributeResultOperator distResultOperator = new DistributeResultOperator(expressions, sink);
+ distResultOperator.getInputs().add(new MutableObject<>(assignOperator));
+
+ distResultOperator.setSourceLocation(sourceLoc);
+ return distResultOperator;
}
private DatasetDataSource validateDatasetInfo(MetadataProvider metadataProvider, String dataverseName,
- String datasetName) throws AlgebricksException {
+ String datasetName, SourceLocation sourceLoc) throws AlgebricksException {
Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
if (dataset == null) {
- throw new AlgebricksException("Cannot find dataset " + datasetName + " in dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Cannot find dataset " + datasetName + " in dataverse " + dataverseName);
}
if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
- throw new AlgebricksException("Cannot write output to an external dataset.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Cannot write output to an external dataset.");
}
DataSourceId sourceId = new DataSourceId(dataverseName, datasetName);
IAType itemType = metadataProvider.findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName());
@@ -619,56 +667,69 @@
public Pair<ILogicalOperator, LogicalVariable> visit(LetClause lc, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
LogicalVariable v;
- ILogicalOperator returnedOp;
- if (lc.getBindingExpr().getKind() == Kind.VARIABLE_EXPRESSION) {
+ AssignOperator returnedOp;
+ Expression bindingExpr = lc.getBindingExpr();
+ SourceLocation sourceLoc = bindingExpr.getSourceLocation();
+ if (bindingExpr.getKind() == Kind.VARIABLE_EXPRESSION) {
v = context.newVarFromExpression(lc.getVarExpr());
- LogicalVariable prev = context.getVar(((VariableExpr) lc.getBindingExpr()).getVar().getId());
- returnedOp = new AssignOperator(v, new MutableObject<>(new VariableReferenceExpression(prev)));
+ LogicalVariable prevVar = context.getVar(((VariableExpr) bindingExpr).getVar().getId());
+ VariableReferenceExpression prevVarRef = new VariableReferenceExpression(prevVar);
+ prevVarRef.setSourceLocation(sourceLoc);
+ returnedOp = new AssignOperator(v, new MutableObject<>(prevVarRef));
returnedOp.getInputs().add(tupSource);
+ returnedOp.setSourceLocation(sourceLoc);
} else {
v = context.newVarFromExpression(lc.getVarExpr());
- Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo =
- langExprToAlgExpression(lc.getBindingExpr(), tupSource);
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(bindingExpr, tupSource);
returnedOp = new AssignOperator(v, new MutableObject<>(eo.first));
returnedOp.getInputs().add(eo.second);
+ returnedOp.setSourceLocation(sourceLoc);
}
+
return new Pair<>(returnedOp, v);
}
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(FieldAccessor fa, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = fa.getSourceLocation();
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(fa.getExpr(), tupSource);
LogicalVariable v = context.newVarFromExpression(fa);
AbstractFunctionCallExpression fldAccess =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME));
+ fldAccess.setSourceLocation(sourceLoc);
fldAccess.getArguments().add(new MutableObject<>(p.first));
ILogicalExpression faExpr =
new ConstantExpression(new AsterixConstantValue(new AString(fa.getIdent().getValue())));
fldAccess.getArguments().add(new MutableObject<>(faExpr));
AssignOperator a = new AssignOperator(v, new MutableObject<>(fldAccess));
a.getInputs().add(p.second);
+ a.setSourceLocation(sourceLoc);
return new Pair<>(a, v);
}
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(IndexAccessor ia, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = ia.getSourceLocation();
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(ia.getExpr(), tupSource);
LogicalVariable v = context.newVar();
AbstractFunctionCallExpression f;
if (ia.isAny()) {
f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.ANY_COLLECTION_MEMBER));
f.getArguments().add(new MutableObject<>(p.first));
+ f.setSourceLocation(sourceLoc);
} else {
Pair<ILogicalExpression, Mutable<ILogicalOperator>> indexPair =
langExprToAlgExpression(ia.getIndexExpr(), tupSource);
f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_ITEM));
f.getArguments().add(new MutableObject<>(p.first));
f.getArguments().add(new MutableObject<>(indexPair.first));
+ f.setSourceLocation(sourceLoc);
}
AssignOperator a = new AssignOperator(v, new MutableObject<>(f));
a.getInputs().add(p.second);
+ a.setSourceLocation(sourceLoc);
return new Pair<>(a, v);
}
@@ -683,8 +744,11 @@
for (Expression expr : fcall.getExprList()) {
switch (expr.getKind()) {
case VARIABLE_EXPRESSION:
- LogicalVariable var = context.getVar(((VariableExpr) expr).getVar().getId());
- args.add(new MutableObject<>(new VariableReferenceExpression(var)));
+ VariableExpr varExpr = (VariableExpr) expr;
+ LogicalVariable var = context.getVar(varExpr.getVar().getId());
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(varExpr.getSourceLocation());
+ args.add(new MutableObject<>(varRef));
break;
case LITERAL_EXPRESSION:
LiteralExpr val = (LiteralExpr) expr;
@@ -702,17 +766,15 @@
}
}
+ SourceLocation sourceLoc = fcall.getSourceLocation();
AbstractFunctionCallExpression f;
- try {
- if ((f = lookupUserDefinedFunction(signature, args)) == null) {
- f = lookupBuiltinFunction(signature.getName(), signature.getArity(), args);
- }
- } catch (AlgebricksException e) {
- throw new CompilationException(e);
+ if ((f = lookupUserDefinedFunction(signature, args, sourceLoc)) == null) {
+ f = lookupBuiltinFunction(signature.getName(), signature.getArity(), args, sourceLoc);
}
if (f == null) {
- throw new CompilationException(" Unknown function " + signature.getName() + "@" + signature.getArity());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown function " + signature.getName() + "@" + signature.getArity());
}
// Put hints into function call expr.
@@ -726,37 +788,45 @@
if (topOp != null) {
op.getInputs().add(topOp);
}
+ op.setSourceLocation(sourceLoc);
return new Pair<>(op, v);
}
private AbstractFunctionCallExpression lookupUserDefinedFunction(FunctionSignature signature,
- List<Mutable<ILogicalExpression>> args) throws AlgebricksException {
- if (signature.getNamespace() == null) {
- return null;
+ List<Mutable<ILogicalExpression>> args, SourceLocation sourceLoc) throws CompilationException {
+ try {
+ if (signature.getNamespace() == null) {
+ return null;
+ }
+ Function function =
+ MetadataManager.INSTANCE.getFunction(metadataProvider.getMetadataTxnContext(), signature);
+ if (function == null) {
+ return null;
+ }
+ AbstractFunctionCallExpression f;
+ if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_JAVA)) {
+ IFunctionInfo finfo = ExternalFunctionCompilerUtil
+ .getExternalFunctionInfo(metadataProvider.getMetadataTxnContext(), function);
+ f = new ScalarFunctionCallExpression(finfo, args);
+ f.setSourceLocation(sourceLoc);
+ } else if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_AQL)
+ || function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_SQLPP)) {
+ IFunctionInfo finfo = FunctionUtil.getFunctionInfo(signature);
+ f = new ScalarFunctionCallExpression(finfo, args);
+ f.setSourceLocation(sourceLoc);
+ } else {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ " User defined functions written in " + function.getLanguage() + " are not supported");
+ }
+ return f;
+ } catch (AlgebricksException e) {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, e.getMessage(), e);
}
- Function function = MetadataManager.INSTANCE.getFunction(metadataProvider.getMetadataTxnContext(), signature);
- if (function == null) {
- return null;
- }
- AbstractFunctionCallExpression f;
- if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_JAVA)) {
- IFunctionInfo finfo = ExternalFunctionCompilerUtil
- .getExternalFunctionInfo(metadataProvider.getMetadataTxnContext(), function);
- f = new ScalarFunctionCallExpression(finfo, args);
- } else if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_AQL)
- || function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_SQLPP)) {
- IFunctionInfo finfo = FunctionUtil.getFunctionInfo(signature);
- f = new ScalarFunctionCallExpression(finfo, args);
- } else {
- throw new MetadataException(
- " User defined functions written in " + function.getLanguage() + " are not supported");
- }
- return f;
}
private AbstractFunctionCallExpression lookupBuiltinFunction(String functionName, int arity,
- List<Mutable<ILogicalExpression>> args) {
+ List<Mutable<ILogicalExpression>> args, SourceLocation sourceLoc) {
AbstractFunctionCallExpression f;
FunctionIdentifier fi = new FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionName, arity);
FunctionInfo afi = BuiltinFunctions.lookupFunction(fi);
@@ -781,6 +851,7 @@
} else {
f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
}
+ f.setSourceLocation(sourceLoc);
return f;
}
@@ -792,8 +863,8 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(GroupbyClause gc, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = gc.getSourceLocation();
Mutable<ILogicalOperator> topOp = tupSource;
-
LogicalVariable groupRecordVar = null;
if (gc.hasGroupVar()) {
List<Pair<Expression, Identifier>> groupFieldList = gc.getGroupFieldList();
@@ -806,13 +877,16 @@
ILogicalExpression groupFieldExpr = langExprToAlgExpression(groupField.first, topOp).first;
groupRecordConstructorArgList.add(new MutableObject<>(groupFieldExpr));
}
- MutableObject<ILogicalExpression> groupRecordConstr = new MutableObject<>(new ScalarFunctionCallExpression(
+ ScalarFunctionCallExpression groupRecordConstr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR),
- groupRecordConstructorArgList));
+ groupRecordConstructorArgList);
+ groupRecordConstr.setSourceLocation(sourceLoc);
groupRecordVar = context.newVar();
- AssignOperator groupRecordVarAssignOp = new AssignOperator(groupRecordVar, groupRecordConstr);
+ AssignOperator groupRecordVarAssignOp =
+ new AssignOperator(groupRecordVar, new MutableObject<>(groupRecordConstr));
groupRecordVarAssignOp.getInputs().add(topOp);
+ groupRecordVarAssignOp.setSourceLocation(sourceLoc);
topOp = new MutableObject<>(groupRecordVarAssignOp);
}
@@ -837,9 +911,12 @@
if (gc.hasGroupVar()) {
VariableExpr groupVar = gc.getGroupVar();
LogicalVariable groupLogicalVar = context.newVar();
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(gOp));
+ ntsOp.setSourceLocation(sourceLoc);
+ VariableReferenceExpression groupRecordVarRef = new VariableReferenceExpression(groupRecordVar);
+ groupRecordVarRef.setSourceLocation(sourceLoc);
ILogicalPlan nestedPlan = createNestedPlanWithAggregate(groupLogicalVar, BuiltinFunctions.LISTIFY,
- new VariableReferenceExpression(groupRecordVar),
- new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(gOp))));
+ groupRecordVarRef, new MutableObject<>(ntsOp));
gOp.getNestedPlans().add(nestedPlan);
context.setVar(groupVar, groupLogicalVar);
}
@@ -848,8 +925,10 @@
for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
VariableExpr withVar = entry.getValue();
Expression withExpr = entry.getKey();
- Pair<ILogicalExpression, Mutable<ILogicalOperator>> listifyInput = langExprToAlgExpression(withExpr,
- new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(gOp))));
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(gOp));
+ ntsOp.setSourceLocation(sourceLoc);
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>> listifyInput =
+ langExprToAlgExpression(withExpr, new MutableObject<>(ntsOp));
LogicalVariable withLogicalVar = context.newVar();
ILogicalPlan nestedPlan = createNestedPlanWithAggregate(withLogicalVar, BuiltinFunctions.LISTIFY,
listifyInput.first, listifyInput.second);
@@ -860,16 +939,20 @@
gOp.setGroupAll(gc.isGroupAll());
gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
+ gOp.setSourceLocation(sourceLoc);
return new Pair<>(gOp, null);
}
private ILogicalPlan createNestedPlanWithAggregate(LogicalVariable aggOutputVar, FunctionIdentifier aggFunc,
ILogicalExpression aggFnInput, Mutable<ILogicalOperator> aggOpInput) {
+ SourceLocation sourceLoc = aggFnInput.getSourceLocation();
AggregateFunctionCallExpression aggFnCall = BuiltinFunctions.makeAggregateFunctionExpression(aggFunc,
mkSingletonArrayList(new MutableObject<>(aggFnInput)));
+ aggFnCall.setSourceLocation(sourceLoc);
AggregateOperator aggOp = new AggregateOperator(mkSingletonArrayList(aggOutputVar),
mkSingletonArrayList(new MutableObject<>(aggFnCall)));
aggOp.getInputs().add(aggOpInput);
+ aggOp.setSourceLocation(sourceLoc);
return new ALogicalPlanImpl(new MutableObject<>(aggOp));
}
@@ -885,45 +968,70 @@
// Similarly, we create one subplan for the "else" branch, in which the
// selection is not(varCond).
// Finally, we select the desired result.
- Pair<ILogicalOperator, LogicalVariable> pCond = ifexpr.getCondExpr().accept(this, tupSource);
+ Expression condExpr = ifexpr.getCondExpr();
+ Expression thenExpr = ifexpr.getThenExpr();
+ Expression elseExpr = ifexpr.getElseExpr();
+
+ Pair<ILogicalOperator, LogicalVariable> pCond = condExpr.accept(this, tupSource);
LogicalVariable varCond = pCond.second;
// Creates a subplan for the "then" branch.
- Pair<ILogicalOperator, LogicalVariable> opAndVarForThen = constructSubplanOperatorForBranch(pCond.first,
- new MutableObject<>(new VariableReferenceExpression(varCond)), ifexpr.getThenExpr());
+ VariableReferenceExpression varCondRef1 = new VariableReferenceExpression(varCond);
+ varCondRef1.setSourceLocation(condExpr.getSourceLocation());
+
+ Pair<ILogicalOperator, LogicalVariable> opAndVarForThen =
+ constructSubplanOperatorForBranch(pCond.first, new MutableObject<>(varCondRef1), thenExpr);
// Creates a subplan for the "else" branch.
- AbstractFunctionCallExpression notVarCond = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.NOT),
- Collections.singletonList(generateAndNotIsUnknownWrap(new VariableReferenceExpression(varCond))));
- Pair<ILogicalOperator, LogicalVariable> opAndVarForElse = constructSubplanOperatorForBranch(
- opAndVarForThen.first, new MutableObject<>(notVarCond), ifexpr.getElseExpr());
+ VariableReferenceExpression varCondRef2 = new VariableReferenceExpression(varCond);
+ varCondRef2.setSourceLocation(condExpr.getSourceLocation());
+ AbstractFunctionCallExpression notVarCond =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.NOT),
+ Collections.singletonList(generateAndNotIsUnknownWrap(varCondRef2)));
+ notVarCond.setSourceLocation(condExpr.getSourceLocation());
+
+ Pair<ILogicalOperator, LogicalVariable> opAndVarForElse =
+ constructSubplanOperatorForBranch(opAndVarForThen.first, new MutableObject<>(notVarCond), elseExpr);
// Uses switch-case function to select the results of two branches.
LogicalVariable selectVar = context.newVar();
List<Mutable<ILogicalExpression>> arguments = new ArrayList<>();
- arguments.add(new MutableObject<>(new VariableReferenceExpression(varCond)));
+ VariableReferenceExpression varCondRef3 = new VariableReferenceExpression(varCond);
+ varCondRef3.setSourceLocation(condExpr.getSourceLocation());
+ VariableReferenceExpression varThenRef = new VariableReferenceExpression(opAndVarForThen.second);
+ varThenRef.setSourceLocation(thenExpr.getSourceLocation());
+ VariableReferenceExpression varElseRef = new VariableReferenceExpression(opAndVarForElse.second);
+ varElseRef.setSourceLocation(elseExpr.getSourceLocation());
+ arguments.add(new MutableObject<>(varCondRef3));
arguments.add(new MutableObject<>(ConstantExpression.TRUE));
- arguments.add(new MutableObject<>(new VariableReferenceExpression(opAndVarForThen.second)));
- arguments.add(new MutableObject<>(new VariableReferenceExpression(opAndVarForElse.second)));
+ arguments.add(new MutableObject<>(varThenRef));
+ arguments.add(new MutableObject<>(varElseRef));
AbstractFunctionCallExpression swithCaseExpr =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SWITCH_CASE), arguments);
+ swithCaseExpr.setSourceLocation(ifexpr.getSourceLocation());
AssignOperator assignOp = new AssignOperator(selectVar, new MutableObject<>(swithCaseExpr));
assignOp.getInputs().add(new MutableObject<>(opAndVarForElse.first));
+ assignOp.setSourceLocation(ifexpr.getSourceLocation());
// Unnests the selected ("if" or "else") result.
LogicalVariable unnestVar = context.newVar();
- UnnestOperator unnestOp = new UnnestOperator(unnestVar,
- new MutableObject<>(new UnnestingFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), Collections
- .singletonList(new MutableObject<>(new VariableReferenceExpression(selectVar))))));
+ VariableReferenceExpression selectVarRef = new VariableReferenceExpression(selectVar);
+ selectVarRef.setSourceLocation(ifexpr.getSourceLocation());
+ UnnestingFunctionCallExpression scanCollExpr =
+ new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
+ Collections.singletonList(new MutableObject<>(selectVarRef)));
+ scanCollExpr.setSourceLocation(ifexpr.getSourceLocation());
+ UnnestOperator unnestOp = new UnnestOperator(unnestVar, new MutableObject<>(scanCollExpr));
unnestOp.getInputs().add(new MutableObject<>(assignOp));
+ unnestOp.setSourceLocation(ifexpr.getSourceLocation());
// Produces the final result.
LogicalVariable resultVar = context.newVar();
- AssignOperator finalAssignOp =
- new AssignOperator(resultVar, new MutableObject<>(new VariableReferenceExpression(unnestVar)));
+ VariableReferenceExpression unnestVarRef = new VariableReferenceExpression(unnestVar);
+ unnestVarRef.setSourceLocation(ifexpr.getSourceLocation());
+ AssignOperator finalAssignOp = new AssignOperator(resultVar, new MutableObject<>(unnestVarRef));
finalAssignOp.getInputs().add(new MutableObject<>(unnestOp));
+ finalAssignOp.setSourceLocation(ifexpr.getSourceLocation());
return new Pair<>(finalAssignOp, resultVar);
}
@@ -932,6 +1040,7 @@
LogicalVariable var = context.newVar();
AssignOperator a = new AssignOperator(var, new MutableObject<>(
new ConstantExpression(new AsterixConstantValue(ConstantHelper.objectFromLiteral(l.getValue())))));
+ a.setSourceLocation(l.getSourceLocation());
if (tupSource != null) {
a.getInputs().add(tupSource);
}
@@ -952,16 +1061,16 @@
Mutable<ILogicalOperator> topOp = tupSource;
- ILogicalExpression currExpr = null;
+ SourceLocation sourceLoc = op.getSourceLocation();
+ AbstractFunctionCallExpression currExpr = null;
for (int i = 0; i <= nOps; i++) {
-
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(exprs.get(i), topOp);
topOp = p.second;
ILogicalExpression e = p.first;
// now look at the operator
if (i < nOps) {
if (OperatorExpr.opIsComparison(ops.get(i))) {
- AbstractFunctionCallExpression c = createComparisonExpression(ops.get(i));
+ AbstractFunctionCallExpression c = createComparisonExpression(ops.get(i), sourceLoc);
// chain the operators
if (i == 0) {
@@ -973,7 +1082,7 @@
c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
}
} else {
- ((AbstractFunctionCallExpression) currExpr).getArguments().add(new MutableObject<>(e));
+ currExpr.getArguments().add(new MutableObject<>(e));
c.getArguments().add(new MutableObject<>(currExpr));
currExpr = c;
if (i == 1 && op.isBroadcastOperand(i)) {
@@ -983,47 +1092,47 @@
}
}
} else {
- AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(ops.get(i));
+ AbstractFunctionCallExpression f =
+ createFunctionCallExpressionForBuiltinOperator(ops.get(i), sourceLoc);
if (i == 0) {
f.getArguments().add(new MutableObject<>(e));
currExpr = f;
} else {
- ((AbstractFunctionCallExpression) currExpr).getArguments().add(new MutableObject<>(e));
+ currExpr.getArguments().add(new MutableObject<>(e));
f.getArguments().add(new MutableObject<>(currExpr));
currExpr = f;
}
}
} else { // don't forget the last expression...
- ((AbstractFunctionCallExpression) currExpr).getArguments().add(new MutableObject<>(e));
+ currExpr.getArguments().add(new MutableObject<>(e));
if (i == 1 && op.isBroadcastOperand(i)) {
BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
bcast.setObject(BroadcastSide.RIGHT);
- ((AbstractFunctionCallExpression) currExpr).getAnnotations()
- .put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+ currExpr.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
}
}
}
// Add hints as annotations.
- if (op.hasHints() && (currExpr instanceof AbstractFunctionCallExpression)) {
- AbstractFunctionCallExpression currFuncExpr = (AbstractFunctionCallExpression) currExpr;
+ if (op.hasHints()) {
for (IExpressionAnnotation hint : op.getHints()) {
- currFuncExpr.getAnnotations().put(hint, hint);
+ currExpr.getAnnotations().put(hint, hint);
}
}
LogicalVariable assignedVar = context.newVar();
AssignOperator a = new AssignOperator(assignedVar, new MutableObject<>(currExpr));
-
a.getInputs().add(topOp);
-
+ a.setSourceLocation(sourceLoc);
return new Pair<>(a, assignedVar);
}
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(OrderbyClause oc, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = oc.getSourceLocation();
OrderOperator ord = new OrderOperator();
+ ord.setSourceLocation(sourceLoc);
Iterator<OrderModifier> modifIter = oc.getModifierList().iterator();
Mutable<ILogicalOperator> topOp = tupSource;
for (Expression e : oc.getOrderbyList()) {
@@ -1052,16 +1161,19 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(QuantifiedExpression qe, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = qe.getSourceLocation();
Mutable<ILogicalOperator> topOp = tupSource;
ILogicalOperator firstOp = null;
Mutable<ILogicalOperator> lastOp = null;
for (QuantifiedPair qt : qe.getQuantifiedList()) {
- Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = langExprToAlgExpression(qt.getExpr(), topOp);
+ Expression expr = qt.getExpr();
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = langExprToAlgExpression(expr, topOp);
topOp = eo1.second;
LogicalVariable uVar = context.newVarFromExpression(qt.getVarExpr());
- ILogicalOperator u = new UnnestOperator(uVar, new MutableObject<>(makeUnnestExpression(eo1.first)));
+ UnnestOperator u = new UnnestOperator(uVar, new MutableObject<>(makeUnnestExpression(eo1.first)));
+ u.setSourceLocation(expr.getSourceLocation());
if (firstOp == null) {
firstOp = u;
@@ -1084,8 +1196,10 @@
if (qe.getQuantifier() == Quantifier.SOME) {
s = new SelectOperator(new MutableObject<>(eo2.first), false, null);
s.getInputs().add(eo2.second);
+ s.setSourceLocation(sourceLoc);
fAgg = BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.NON_EMPTY_STREAM,
new ArrayList<>());
+ fAgg.setSourceLocation(sourceLoc);
} else { // EVERY
// look for input items that do not satisfy the condition, if none found then return true
// when inverting the condition account for NULL/MISSING by replacing them with FALSE
@@ -1097,18 +1211,25 @@
.add(new MutableObject<>(new ConstantExpression(new AsterixConstantValue(ABoolean.FALSE))));
List<Mutable<ILogicalExpression>> notArgs = new ArrayList<>(1);
- notArgs.add(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.IF_MISSING_OR_NULL), ifMissingOrNullArgs)));
+ ScalarFunctionCallExpression ifMissinOrNullExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.IF_MISSING_OR_NULL), ifMissingOrNullArgs);
+ ifMissinOrNullExpr.setSourceLocation(sourceLoc);
+ notArgs.add(new MutableObject<>(ifMissinOrNullExpr));
- s = new SelectOperator(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), notArgs)), false, null);
+ ScalarFunctionCallExpression notExpr = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), notArgs);
+ notExpr.setSourceLocation(sourceLoc);
+ s = new SelectOperator(new MutableObject<>(notExpr), false, null);
s.getInputs().add(eo2.second);
+ s.setSourceLocation(sourceLoc);
fAgg = BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.EMPTY_STREAM, new ArrayList<>());
+ fAgg.setSourceLocation(sourceLoc);
}
LogicalVariable qeVar = context.newVar();
- AggregateOperator a = new AggregateOperator(mkSingletonArrayList(qeVar),
- (List) mkSingletonArrayList(new MutableObject<>(fAgg)));
+ AggregateOperator a =
+ new AggregateOperator(mkSingletonArrayList(qeVar), mkSingletonArrayList(new MutableObject<>(fAgg)));
a.getInputs().add(new MutableObject<>(s));
+ a.setSourceLocation(sourceLoc);
return new Pair<>(a, qeVar);
}
@@ -1123,8 +1244,10 @@
throws CompilationException {
AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.OPEN_RECORD_CONSTRUCTOR));
+ f.setSourceLocation(rc.getSourceLocation());
LogicalVariable v1 = context.newVar();
AssignOperator a = new AssignOperator(v1, new MutableObject<>(f));
+ a.setSourceLocation(rc.getSourceLocation());
Mutable<ILogicalOperator> topOp = tupSource;
for (FieldBinding fb : rc.getFbList()) {
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = langExprToAlgExpression(fb.getLeftExpr(), topOp);
@@ -1141,11 +1264,14 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(ListConstructor lc, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = lc.getSourceLocation();
FunctionIdentifier fid = (lc.getType() == ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR)
? BuiltinFunctions.ORDERED_LIST_CONSTRUCTOR : BuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR;
AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fid));
+ f.setSourceLocation(sourceLoc);
LogicalVariable v1 = context.newVar();
AssignOperator a = new AssignOperator(v1, new MutableObject<>(f));
+ a.setSourceLocation(sourceLoc);
Mutable<ILogicalOperator> topOp = tupSource;
for (Expression expr : lc.getExprList()) {
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(expr, topOp);
@@ -1159,6 +1285,7 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(UnaryExpr u, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = u.getSourceLocation();
Expression expr = u.getExpr();
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(expr, tupSource);
LogicalVariable v1 = context.newVar();
@@ -1166,21 +1293,25 @@
switch (u.getExprType()) {
case POSITIVE:
a = new AssignOperator(v1, new MutableObject<>(eo.first));
+ a.setSourceLocation(sourceLoc);
break;
case NEGATIVE:
AbstractFunctionCallExpression m = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.NUMERIC_UNARY_MINUS));
+ m.setSourceLocation(sourceLoc);
m.getArguments().add(new MutableObject<>(eo.first));
a = new AssignOperator(v1, new MutableObject<>(m));
+ a.setSourceLocation(sourceLoc);
break;
case EXISTS:
- a = processExists(eo.first, v1, false);
+ a = processExists(eo.first, v1, false, sourceLoc);
break;
case NOT_EXISTS:
- a = processExists(eo.first, v1, true);
+ a = processExists(eo.first, v1, true, sourceLoc);
break;
default:
- throw new CompilationException("Unsupported operator: " + u);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unsupported operator: " + u.getExprType());
}
a.getInputs().add(eo.second);
return new Pair<>(a, v1);
@@ -1188,11 +1319,15 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(VariableExpr v, Mutable<ILogicalOperator> tupSource) {
+ SourceLocation sourceLoc = v.getSourceLocation();
// Should we ever get to this method?
LogicalVariable var = context.newVar();
LogicalVariable oldV = context.getVar(v.getVar().getId());
- AssignOperator a = new AssignOperator(var, new MutableObject<>(new VariableReferenceExpression(oldV)));
+ VariableReferenceExpression oldVRef = new VariableReferenceExpression(oldV);
+ oldVRef.setSourceLocation(sourceLoc);
+ AssignOperator a = new AssignOperator(var, new MutableObject<>(oldVRef));
a.getInputs().add(tupSource);
+ a.setSourceLocation(sourceLoc);
return new Pair<>(a, var);
}
@@ -1202,12 +1337,14 @@
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(w.getWhereExpr(), tupSource);
SelectOperator s = new SelectOperator(new MutableObject<>(p.first), false, null);
s.getInputs().add(p.second);
+ s.setSourceLocation(w.getSourceLocation());
return new Pair<>(s, null);
}
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(LimitClause lc, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = lc.getSourceLocation();
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = langExprToAlgExpression(lc.getLimitExpr(), tupSource);
LimitOperator opLim;
Expression offset = lc.getOffset();
@@ -1215,17 +1352,21 @@
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p2 = langExprToAlgExpression(offset, p1.second);
opLim = new LimitOperator(p1.first, p2.first);
opLim.getInputs().add(p2.second);
+ opLim.setSourceLocation(sourceLoc);
} else {
opLim = new LimitOperator(p1.first);
opLim.getInputs().add(p1.second);
+ opLim.setSourceLocation(sourceLoc);
}
return new Pair<>(opLim, null);
}
- protected AbstractFunctionCallExpression createComparisonExpression(OperatorType t) {
+ protected AbstractFunctionCallExpression createComparisonExpression(OperatorType t, SourceLocation sourceLoc) {
FunctionIdentifier fi = operatorTypeToFunctionIdentifier(t);
IFunctionInfo finfo = FunctionUtil.getFunctionInfo(fi);
- return new ScalarFunctionCallExpression(finfo);
+ ScalarFunctionCallExpression callExpr = new ScalarFunctionCallExpression(finfo);
+ callExpr.setSourceLocation(sourceLoc);
+ return callExpr;
}
private static FunctionIdentifier operatorTypeToFunctionIdentifier(OperatorType t) {
@@ -1247,8 +1388,8 @@
}
}
- protected AbstractFunctionCallExpression createFunctionCallExpressionForBuiltinOperator(OperatorType t)
- throws CompilationException {
+ protected AbstractFunctionCallExpression createFunctionCallExpressionForBuiltinOperator(OperatorType t,
+ SourceLocation sourceLoc) throws CompilationException {
FunctionIdentifier fid;
switch (t) {
case PLUS:
@@ -1282,9 +1423,12 @@
fid = BuiltinFunctions.FUZZY_EQ;
break;
default:
- throw new NotImplementedException("Operator " + t + " is not yet implemented");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Operator " + t + " is not yet implemented");
}
- return new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fid));
+ ScalarFunctionCallExpression callExpr = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(fid));
+ callExpr.setSourceLocation(sourceLoc);
+ return callExpr;
}
private static boolean hasOnlyChild(ILogicalOperator parent, Mutable<ILogicalOperator> childCandidate) {
@@ -1297,6 +1441,7 @@
protected Pair<ILogicalExpression, Mutable<ILogicalOperator>> langExprToAlgExpression(Expression expr,
Mutable<ILogicalOperator> topOpRef) throws CompilationException {
+ SourceLocation sourceLoc = expr.getSourceLocation();
switch (expr.getKind()) {
case VARIABLE_EXPRESSION:
LogicalVariable var = context.getVar(((VariableExpr) expr).getVar().getId());
@@ -1304,6 +1449,7 @@
throw new IllegalStateException(String.valueOf(expr));
}
VariableReferenceExpression ve = new VariableReferenceExpression(var);
+ ve.setSourceLocation(sourceLoc);
return new Pair<>(ve, topOpRef);
case LITERAL_EXPRESSION:
LiteralExpr val = (LiteralExpr) expr;
@@ -1325,14 +1471,21 @@
rebindBottomOpRef(p.first, srcRef, topOpRef);
}
Mutable<ILogicalOperator> top2 = new MutableObject<>(p.first);
- return new Pair<>(new VariableReferenceExpression(p.second), top2);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(p.second);
+ varRef.setSourceLocation(sourceLoc);
+ return new Pair<>(varRef, top2);
} else {
SubplanOperator s = new SubplanOperator();
s.getInputs().add(topOpRef);
- srcRef.setValue(new NestedTupleSourceOperator(new MutableObject<>(s)));
+ s.setSourceLocation(sourceLoc);
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(s));
+ ntsOp.setSourceLocation(sourceLoc);
+ srcRef.setValue(ntsOp);
Mutable<ILogicalOperator> planRoot = new MutableObject<>(p.first);
s.setRootOp(planRoot);
- return new Pair<>(new VariableReferenceExpression(p.second), new MutableObject<>(s));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(p.second);
+ varRef.setSourceLocation(sourceLoc);
+ return new Pair<>(varRef, new MutableObject<>(s));
}
}
}
@@ -1340,18 +1493,22 @@
protected Pair<ILogicalOperator, LogicalVariable> aggListifyForSubquery(LogicalVariable var,
Mutable<ILogicalOperator> opRef, boolean bProject) {
+ SourceLocation sourceLoc = opRef.getValue().getSourceLocation();
AggregateFunctionCallExpression funAgg =
BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, new ArrayList<>());
funAgg.getArguments().add(new MutableObject<>(new VariableReferenceExpression(var)));
+ funAgg.setSourceLocation(sourceLoc);
LogicalVariable varListified = context.newSubplanOutputVar();
AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(varListified),
mkSingletonArrayList(new MutableObject<>(funAgg)));
agg.getInputs().add(opRef);
+ agg.setSourceLocation(sourceLoc);
ILogicalOperator res;
if (bProject) {
ProjectOperator pr = new ProjectOperator(varListified);
pr.getInputs().add(new MutableObject<>(agg));
+ pr.setSourceLocation(sourceLoc);
res = pr;
} else {
res = agg;
@@ -1361,6 +1518,7 @@
protected Pair<ILogicalOperator, LogicalVariable> visitAndOrOperator(OperatorExpr op,
Mutable<ILogicalOperator> tupSource) throws CompilationException {
+ SourceLocation sourceLoc = op.getSourceLocation();
List<OperatorType> ops = op.getOpList();
int nOps = ops.size();
@@ -1369,15 +1527,15 @@
Mutable<ILogicalOperator> topOp = tupSource;
OperatorType opLogical = ops.get(0);
- AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(opLogical);
+ AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(opLogical, sourceLoc);
for (int i = 0; i <= nOps; i++) {
Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(exprs.get(i), topOp);
topOp = p.second;
// now look at the operator
if (i < nOps && ops.get(i) != opLogical) {
- throw new TranslationException(
- "Unexpected operator " + ops.get(i) + " in an OperatorExpr starting with " + opLogical);
+ throw new CompilationException(ErrorCode.COMPILATION_UNEXPECTED_OPERATOR, sourceLoc, ops.get(i),
+ opLogical);
}
f.getArguments().add(new MutableObject<>(p.first));
}
@@ -1385,6 +1543,7 @@
LogicalVariable assignedVar = context.newVar();
AssignOperator a = new AssignOperator(assignedVar, new MutableObject<>(f));
a.getInputs().add(topOp);
+ a.setSourceLocation(sourceLoc);
return new Pair<>(a, assignedVar);
@@ -1409,18 +1568,26 @@
}
protected ILogicalExpression makeUnnestExpression(ILogicalExpression expr) {
+ SourceLocation sourceLoc = expr.getSourceLocation();
List<Mutable<ILogicalExpression>> argRefs = new ArrayList<>();
argRefs.add(new MutableObject<>(expr));
switch (expr.getExpressionTag()) {
case CONSTANT:
case VARIABLE:
- return new UnnestingFunctionCallExpression(
+ UnnestingFunctionCallExpression scanCollExpr1 = new UnnestingFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), argRefs);
+ scanCollExpr1.setSourceLocation(sourceLoc);
+ return scanCollExpr1;
case FUNCTION_CALL:
AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
- return (fce.getKind() == FunctionKind.UNNEST) ? expr
- : new UnnestingFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), argRefs);
+ if (fce.getKind() == FunctionKind.UNNEST) {
+ return expr;
+ } else {
+ UnnestingFunctionCallExpression scanCollExpr2 = new UnnestingFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), argRefs);
+ scanCollExpr2.setSourceLocation(sourceLoc);
+ return scanCollExpr2;
+ }
default:
return expr;
}
@@ -1563,22 +1730,31 @@
protected Pair<ILogicalOperator, LogicalVariable> constructSubplanOperatorForBranch(ILogicalOperator inputOp,
Mutable<ILogicalExpression> selectExpr, Expression branchExpression) throws CompilationException {
context.enterSubplan();
+ SourceLocation sourceLoc = inputOp.getSourceLocation();
SubplanOperator subplanOp = new SubplanOperator();
subplanOp.getInputs().add(new MutableObject<>(inputOp));
- Mutable<ILogicalOperator> nestedSource =
- new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(subplanOp)));
+ subplanOp.setSourceLocation(sourceLoc);
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(subplanOp));
+ ntsOp.setSourceLocation(sourceLoc);
SelectOperator select = new SelectOperator(selectExpr, false, null);
// The select operator cannot be moved up and down, otherwise it will cause
// typing issues (ASTERIXDB-1203).
OperatorPropertiesUtil.markMovable(select, false);
- select.getInputs().add(nestedSource);
+ select.getInputs().add(new MutableObject<>(ntsOp));
+ select.setSourceLocation(selectExpr.getValue().getSourceLocation());
+
Pair<ILogicalOperator, LogicalVariable> pBranch = branchExpression.accept(this, new MutableObject<>(select));
LogicalVariable branchVar = context.newVar();
+ VariableReferenceExpression pBranchVarRef = new VariableReferenceExpression(pBranch.second);
+ pBranchVarRef.setSourceLocation(branchExpression.getSourceLocation());
+ AggregateFunctionCallExpression listifyExpr =
+ new AggregateFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.LISTIFY), false,
+ Collections.singletonList(new MutableObject<>(pBranchVarRef)));
+ listifyExpr.setSourceLocation(branchExpression.getSourceLocation());
AggregateOperator aggOp = new AggregateOperator(Collections.singletonList(branchVar),
- Collections.singletonList(new MutableObject<>(new AggregateFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.LISTIFY), false, Collections.singletonList(
- new MutableObject<>(new VariableReferenceExpression(pBranch.second)))))));
+ Collections.singletonList(new MutableObject<>(listifyExpr)));
aggOp.getInputs().add(new MutableObject<>(pBranch.first));
+ aggOp.setSourceLocation(branchExpression.getSourceLocation());
ILogicalPlan planForBranch = new ALogicalPlanImpl(new MutableObject<>(aggOp));
subplanOp.getNestedPlans().add(planForBranch);
context.exitSubplan();
@@ -1586,22 +1762,27 @@
}
// Processes EXISTS and NOT EXISTS.
- private AssignOperator processExists(ILogicalExpression inputExpr, LogicalVariable v1, boolean not) {
+ private AssignOperator processExists(ILogicalExpression inputExpr, LogicalVariable v1, boolean not,
+ SourceLocation sourceLoc) {
AbstractFunctionCallExpression count =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCALAR_COUNT));
count.getArguments().add(new MutableObject<>(inputExpr));
+ count.setSourceLocation(sourceLoc);
AbstractFunctionCallExpression comparison = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(not ? BuiltinFunctions.EQ : BuiltinFunctions.NEQ));
comparison.getArguments().add(new MutableObject<>(count));
comparison.getArguments()
.add(new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt64(0L)))));
- return new AssignOperator(v1, new MutableObject<>(comparison));
+ comparison.setSourceLocation(sourceLoc);
+ AssignOperator a = new AssignOperator(v1, new MutableObject<>(comparison));
+ a.setSourceLocation(sourceLoc);
+ return a;
}
// Generates the filter condition for whether a conditional branch should be
// executed.
protected Mutable<ILogicalExpression> generateNoMatchedPrecedingWhenBranchesFilter(
- List<ILogicalExpression> inputBooleanExprs) {
+ List<ILogicalExpression> inputBooleanExprs, SourceLocation sourceLoc) {
List<Mutable<ILogicalExpression>> arguments = new ArrayList<>();
for (ILogicalExpression inputBooleanExpr : inputBooleanExprs) {
// A NULL/MISSING valued WHEN expression does not lead to the corresponding THEN
@@ -1609,44 +1790,60 @@
// Therefore, we should check a previous WHEN boolean condition is not unknown.
arguments.add(generateAndNotIsUnknownWrap(inputBooleanExpr));
}
- Mutable<ILogicalExpression> hasBeenExecutedExprRef = new MutableObject<>(
- new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.OR), arguments));
- return new MutableObject<>(new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT),
- new ArrayList<>(Collections.singletonList(hasBeenExecutedExprRef))));
+ ScalarFunctionCallExpression hasBeenExecutedExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.OR), arguments);
+ hasBeenExecutedExpr.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression notExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT),
+ new ArrayList<>(Collections.singletonList(new MutableObject<>(hasBeenExecutedExpr))));
+ notExpr.setSourceLocation(sourceLoc);
+ return new MutableObject<>(notExpr);
}
// For an input expression `expr`, return `expr AND expr IS NOT UNKOWN`.
protected Mutable<ILogicalExpression> generateAndNotIsUnknownWrap(ILogicalExpression logicalExpr) {
+ SourceLocation sourceLoc = logicalExpr.getSourceLocation();
List<Mutable<ILogicalExpression>> arguments = new ArrayList<>();
arguments.add(new MutableObject<>(logicalExpr));
- Mutable<ILogicalExpression> expr = new MutableObject<>(
+ ScalarFunctionCallExpression isUnknownExpr =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.IS_UNKNOWN),
- new ArrayList<>(Collections.singletonList(new MutableObject<>(logicalExpr)))));
- arguments.add(new MutableObject<>(new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), new ArrayList<>(Collections.singletonList(expr)))));
- return new MutableObject<>(
- new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), arguments));
+ new ArrayList<>(Collections.singletonList(new MutableObject<>(logicalExpr))));
+ isUnknownExpr.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression notExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT),
+ new ArrayList<>(Collections.singletonList(new MutableObject<>(isUnknownExpr))));
+ notExpr.setSourceLocation(sourceLoc);
+ arguments.add(new MutableObject<>(notExpr));
+ ScalarFunctionCallExpression andExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), arguments);
+ andExpr.setSourceLocation(sourceLoc);
+ return new MutableObject<>(andExpr);
}
// Generates the plan for "UNION ALL" or union expression from its input
// expressions.
protected Pair<ILogicalOperator, LogicalVariable> translateUnionAllFromInputExprs(List<ILangExpression> inputExprs,
- Mutable<ILogicalOperator> tupSource) throws CompilationException {
+ Mutable<ILogicalOperator> tupSource, SourceLocation sourceLoc) throws CompilationException {
List<Mutable<ILogicalOperator>> inputOpRefsToUnion = new ArrayList<>();
List<LogicalVariable> vars = new ArrayList<>();
for (ILangExpression expr : inputExprs) {
+ SourceLocation exprSourceLoc = expr.getSourceLocation();
// Visits the expression of one branch.
Pair<ILogicalOperator, LogicalVariable> opAndVar = expr.accept(this, tupSource);
// Creates an unnest operator.
LogicalVariable unnestVar = context.newVar();
List<Mutable<ILogicalExpression>> args = new ArrayList<>();
- args.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(opAndVar.second)));
- UnnestOperator unnestOp = new UnnestOperator(unnestVar,
- new MutableObject<ILogicalExpression>(new UnnestingFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), args)));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(opAndVar.second);
+ varRef.setSourceLocation(exprSourceLoc);
+ args.add(new MutableObject<>(varRef));
+ UnnestingFunctionCallExpression scanCollExpr = new UnnestingFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), args);
+ scanCollExpr.setSourceLocation(exprSourceLoc);
+ UnnestOperator unnestOp = new UnnestOperator(unnestVar, new MutableObject<>(scanCollExpr));
unnestOp.getInputs().add(new MutableObject<>(opAndVar.first));
- inputOpRefsToUnion.add(new MutableObject<ILogicalOperator>(unnestOp));
+ unnestOp.setSourceLocation(exprSourceLoc);
+ inputOpRefsToUnion.add(new MutableObject<>(unnestOp));
vars.add(unnestVar);
}
@@ -1670,6 +1867,7 @@
topUnionAllOp = new UnionAllOperator(varTriples);
topUnionAllOp.getInputs().add(leftInputBranch);
topUnionAllOp.getInputs().add(inputOpRefIterator.next());
+ topUnionAllOp.setSourceLocation(sourceLoc);
// Re-assigns leftInputBranch and leftInputVar.
leftInputBranch = new MutableObject<>(topUnionAllOp);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 9e36ba9..5c7b165 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -26,6 +26,7 @@
import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslator;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.Clause.ClauseType;
import org.apache.asterix.lang.common.base.Expression;
@@ -70,7 +71,6 @@
import org.apache.asterix.om.constants.AsterixConstantValue;
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.types.BuiltinType;
-import org.apache.commons.lang3.NotImplementedException;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -87,6 +87,7 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestNonMapOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
@@ -98,6 +99,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Each visit returns a pair of an operator and a variable. The variable
@@ -121,6 +123,7 @@
public Pair<ILogicalOperator, LogicalVariable> visit(Query q, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
Expression queryBody = q.getBody();
+ SourceLocation sourceLoc = queryBody.getSourceLocation();
if (queryBody.getKind() == Kind.SELECT_EXPRESSION) {
SelectExpression selectExpr = (SelectExpression) queryBody;
if (q.isTopLevel()) {
@@ -132,8 +135,10 @@
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(queryBody, tupSource);
AssignOperator assignOp = new AssignOperator(var, new MutableObject<>(eo.first));
assignOp.getInputs().add(eo.second);
+ assignOp.setSourceLocation(sourceLoc);
ProjectOperator projectOp = new ProjectOperator(var);
projectOp.getInputs().add(new MutableObject<>(assignOp));
+ projectOp.setSourceLocation(sourceLoc);
return new Pair<>(projectOp, var);
}
}
@@ -175,21 +180,32 @@
return leftInput.accept(this, tupSource);
}
List<ILangExpression> inputExprs = new ArrayList<>();
- inputExprs.add(leftInput.selectBlock()
- ? new SelectExpression(null, new SelectSetOperation(leftInput, null), null, null, true)
- : leftInput.getSubquery());
+ SelectExpression leftInputExpr;
+ if (leftInput.selectBlock()) {
+ leftInputExpr = new SelectExpression(null, new SelectSetOperation(leftInput, null), null, null, true);
+ leftInputExpr.setSourceLocation(leftInput.getSelectBlock().getSourceLocation());
+ } else {
+ leftInputExpr = leftInput.getSubquery();
+ }
+ inputExprs.add(leftInputExpr);
for (SetOperationRight setOperationRight : selectSetOperation.getRightInputs()) {
SetOpType setOpType = setOperationRight.getSetOpType();
if (setOpType != SetOpType.UNION || setOperationRight.isSetSemantics()) {
- throw new CompilationException("Operation " + setOpType
- + (setOperationRight.isSetSemantics() ? " with set semantics" : "ALL") + " is not supported.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, selectSetOperation.getSourceLocation(),
+ "Operation " + setOpType + (setOperationRight.isSetSemantics() ? " with set semantics" : "ALL")
+ + " is not supported.");
}
SetOperationInput rightInput = setOperationRight.getSetOperationRightInput();
- inputExprs.add(rightInput.selectBlock()
- ? new SelectExpression(null, new SelectSetOperation(rightInput, null), null, null, true)
- : rightInput.getSubquery());
+ SelectExpression rightInputExpr;
+ if (rightInput.selectBlock()) {
+ rightInputExpr = new SelectExpression(null, new SelectSetOperation(rightInput, null), null, null, true);
+ rightInputExpr.setSourceLocation(rightInput.getSelectBlock().getSourceLocation());
+ } else {
+ rightInputExpr = rightInput.getSubquery();
+ }
+ inputExprs.add(rightInputExpr);
}
- return translateUnionAllFromInputExprs(inputExprs, tupSource);
+ return translateUnionAllFromInputExprs(inputExprs, tupSource, selectSetOperation.getSourceLocation());
}
@Override
@@ -236,10 +252,11 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(FromTerm fromTerm, Mutable<ILogicalOperator> tupSource)
throws CompilationException {
+ SourceLocation sourceLoc = fromTerm.getSourceLocation();
LogicalVariable fromVar = context.newVarFromExpression(fromTerm.getLeftVariable());
Expression fromExpr = fromTerm.getLeftExpression();
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(fromExpr, tupSource);
- ILogicalOperator unnestOp;
+ UnnestOperator unnestOp;
if (fromTerm.hasPositionalVariable()) {
LogicalVariable pVar = context.newVarFromExpression(fromTerm.getPositionalVariable());
// We set the positional variable type as BIGINT type.
@@ -249,6 +266,7 @@
unnestOp = new UnnestOperator(fromVar, new MutableObject<>(makeUnnestExpression(eo.first)));
}
unnestOp.getInputs().add(eo.second);
+ unnestOp.setSourceLocation(sourceLoc);
// Processes joins, unnests, and nests.
Mutable<ILogicalOperator> topOpRef = new MutableObject<>(unnestOp);
@@ -270,6 +288,7 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(JoinClause joinClause, Mutable<ILogicalOperator> inputRef)
throws CompilationException {
+ SourceLocation sourceLoc = joinClause.getSourceLocation();
Mutable<ILogicalOperator> leftInputRef = uncorrelatedLeftBranchStack.pop();
if (joinClause.getJoinType() == JoinType.INNER) {
Pair<ILogicalOperator, LogicalVariable> rightBranch =
@@ -277,6 +296,7 @@
// A join operator with condition TRUE.
AbstractBinaryJoinOperator joinOperator = new InnerJoinOperator(
new MutableObject<>(ConstantExpression.TRUE), leftInputRef, new MutableObject<>(rightBranch.first));
+ joinOperator.setSourceLocation(sourceLoc);
Mutable<ILogicalOperator> joinOpRef = new MutableObject<>(joinOperator);
// Add an additional filter operator.
@@ -284,13 +304,16 @@
langExprToAlgExpression(joinClause.getConditionExpression(), joinOpRef);
SelectOperator filter = new SelectOperator(new MutableObject<>(conditionExprOpPair.first), false, null);
filter.getInputs().add(conditionExprOpPair.second);
+ filter.setSourceLocation(conditionExprOpPair.first.getSourceLocation());
return new Pair<>(filter, rightBranch.second);
} else {
// Creates a subplan operator.
SubplanOperator subplanOp = new SubplanOperator();
- Mutable<ILogicalOperator> ntsRef =
- new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(subplanOp)));
subplanOp.getInputs().add(leftInputRef);
+ subplanOp.setSourceLocation(sourceLoc);
+ NestedTupleSourceOperator ntsOp = new NestedTupleSourceOperator(new MutableObject<>(subplanOp));
+ ntsOp.setSourceLocation(sourceLoc);
+ Mutable<ILogicalOperator> ntsRef = new MutableObject<>(ntsOp);
// Enters the translation for a subplan.
context.enterSubplan();
@@ -305,27 +328,36 @@
langExprToAlgExpression(joinClause.getConditionExpression(), new MutableObject<>(rightUnnestOp));
SelectOperator filter = new SelectOperator(new MutableObject<>(conditionExprOpPair.first), false, null);
filter.getInputs().add(conditionExprOpPair.second);
+ filter.setSourceLocation(conditionExprOpPair.first.getSourceLocation());
ILogicalOperator currentTopOp = filter;
LogicalVariable varToListify;
boolean hasRightPosVar = rightUnnestOp.getPositionalVariable() != null;
if (hasRightPosVar) {
// Creates record to get correlation between the two aggregate variables.
+ VariableReferenceExpression rightUnnestVarRef =
+ new VariableReferenceExpression(rightUnnestOp.getVariable());
+ rightUnnestVarRef.setSourceLocation(joinClause.getRightVariable().getSourceLocation());
+ VariableReferenceExpression rightUnnestPosVarRef =
+ new VariableReferenceExpression(rightUnnestOp.getPositionalVariable());
+ rightUnnestPosVarRef.setSourceLocation(joinClause.getPositionalVariable().getSourceLocation());
ScalarFunctionCallExpression recordCreationFunc = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.CLOSED_RECORD_CONSTRUCTOR),
// Field name for the listified right unnest var.
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AString("unnestvar")))),
// The listified right unnest var
- new MutableObject<>(new VariableReferenceExpression(rightUnnestOp.getVariable())),
+ new MutableObject<>(rightUnnestVarRef),
// Field name for the listified right unnest positional var.
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AString("posvar")))),
// The listified right unnest positional var.
- new MutableObject<>(new VariableReferenceExpression(rightUnnestOp.getPositionalVariable())));
+ new MutableObject<>(rightUnnestPosVarRef));
+ recordCreationFunc.setSourceLocation(joinClause.getRightVariable().getSourceLocation());
// Assigns the record constructor function to a record variable.
LogicalVariable recordVar = context.newVar();
AssignOperator assignOp = new AssignOperator(recordVar, new MutableObject<>(recordCreationFunc));
assignOp.getInputs().add(new MutableObject<>(currentTopOp));
+ assignOp.setSourceLocation(joinClause.getRightVariable().getSourceLocation());
// Sets currentTopOp and varToListify for later usages.
currentTopOp = assignOp;
@@ -335,14 +367,17 @@
}
// Adds an aggregate operator to listfy unnest variables.
- AggregateFunctionCallExpression fListify =
- BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY,
- mkSingletonArrayList(new MutableObject<>(new VariableReferenceExpression(varToListify))));
+ VariableReferenceExpression varToListifyRef = new VariableReferenceExpression(varToListify);
+ varToListifyRef.setSourceLocation(currentTopOp.getSourceLocation());
+ AggregateFunctionCallExpression fListify = BuiltinFunctions.makeAggregateFunctionExpression(
+ BuiltinFunctions.LISTIFY, mkSingletonArrayList(new MutableObject<>(varToListifyRef)));
+ fListify.setSourceLocation(currentTopOp.getSourceLocation());
LogicalVariable aggVar = context.newSubplanOutputVar();
AggregateOperator aggOp = new AggregateOperator(mkSingletonArrayList(aggVar),
mkSingletonArrayList(new MutableObject<>(fListify)));
aggOp.getInputs().add(new MutableObject<>(currentTopOp));
+ aggOp.setSourceLocation(fListify.getSourceLocation());
// Exits the translation of a subplan.
context.exitSubplan();
@@ -353,20 +388,30 @@
// Outer unnest the aggregated var from the subplan.
LogicalVariable outerUnnestVar = context.newVar();
+ VariableReferenceExpression aggVarRefExpr = new VariableReferenceExpression(aggVar);
+ aggVarRefExpr.setSourceLocation(aggOp.getSourceLocation());
LeftOuterUnnestOperator outerUnnestOp = new LeftOuterUnnestOperator(outerUnnestVar,
- new MutableObject<>(makeUnnestExpression(new VariableReferenceExpression(aggVar))));
+ new MutableObject<>(makeUnnestExpression(aggVarRefExpr)));
outerUnnestOp.getInputs().add(new MutableObject<>(subplanOp));
+ outerUnnestOp.setSourceLocation(aggOp.getSourceLocation());
currentTopOp = outerUnnestOp;
if (hasRightPosVar) {
+ VariableReferenceExpression outerUnnestVarRef1 = new VariableReferenceExpression(outerUnnestVar);
+ outerUnnestVarRef1.setSourceLocation(joinClause.getRightVariable().getSourceLocation());
ScalarFunctionCallExpression fieldAccessForRightUnnestVar = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX),
- new MutableObject<>(new VariableReferenceExpression(outerUnnestVar)),
+ new MutableObject<>(outerUnnestVarRef1),
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(0)))));
+ fieldAccessForRightUnnestVar.setSourceLocation(joinClause.getRightVariable().getSourceLocation());
+
+ VariableReferenceExpression outerUnnestVarRef2 = new VariableReferenceExpression(outerUnnestVar);
+ outerUnnestVarRef2.setSourceLocation(joinClause.getPositionalVariable().getSourceLocation());
ScalarFunctionCallExpression fieldAccessForRightPosVar = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_INDEX),
- new MutableObject<>(new VariableReferenceExpression(outerUnnestVar)),
+ new MutableObject<>(outerUnnestVarRef2),
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(1)))));
+ fieldAccessForRightPosVar.setSourceLocation(joinClause.getPositionalVariable().getSourceLocation());
// Creates variables for assign.
LogicalVariable rightUnnestVar = context.newVar();
@@ -389,6 +434,7 @@
// Creates the assign operator.
AssignOperator assignOp = new AssignOperator(assignVars, assignExprs);
assignOp.getInputs().add(new MutableObject<>(currentTopOp));
+ assignOp.setSourceLocation(joinClause.getRightVariable().getSourceLocation());
currentTopOp = assignOp;
} else {
context.setVar(joinClause.getRightVariable(), outerUnnestVar);
@@ -400,7 +446,8 @@
@Override
public Pair<ILogicalOperator, LogicalVariable> visit(NestClause nestClause, Mutable<ILogicalOperator> arg)
throws CompilationException {
- throw new NotImplementedException("Nest clause has not been implemented");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, nestClause.getSourceLocation(),
+ "Nest clause has not been implemented");
}
@Override
@@ -426,7 +473,7 @@
LogicalVariable rightVar = context.newVarFromExpression(binaryCorrelate.getRightVariable());
Expression rightExpr = binaryCorrelate.getRightExpression();
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(rightExpr, inputOpRef);
- ILogicalOperator unnestOp;
+ AbstractUnnestOperator unnestOp;
if (binaryCorrelate.hasPositionalVariable()) {
LogicalVariable pVar = context.newVarFromExpression(binaryCorrelate.getPositionalVariable());
// We set the positional variable type as BIGINT type.
@@ -440,6 +487,7 @@
: new LeftOuterUnnestOperator(rightVar, new MutableObject<>(makeUnnestExpression(eo.first)));
}
unnestOp.getInputs().add(eo.second);
+ unnestOp.setSourceLocation(binaryCorrelate.getRightVariable().getSourceLocation());
return new Pair<>(unnestOp, rightVar);
}
@@ -478,12 +526,14 @@
List<ILogicalExpression> branchCondVarReferences = new ArrayList<>();
List<ILogicalExpression> allVarReferences = new ArrayList<>();
for (int index = 0; index < whenExprList.size(); ++index) {
- Pair<ILogicalOperator, LogicalVariable> whenExprResult = whenExprList.get(index).accept(this, currentOpRef);
+ Expression whenExpr = whenExprList.get(index);
+ Pair<ILogicalOperator, LogicalVariable> whenExprResult = whenExpr.accept(this, currentOpRef);
currentOperator = whenExprResult.first;
// Variable whenConditionVar is corresponds to the current "WHEN" condition.
LogicalVariable whenConditionVar = whenExprResult.second;
- Mutable<ILogicalExpression> branchEntraceConditionExprRef =
- new MutableObject<>(new VariableReferenceExpression(whenConditionVar));
+ VariableReferenceExpression whenConditionVarRef1 = new VariableReferenceExpression(whenConditionVar);
+ whenConditionVarRef1.setSourceLocation(whenExpr.getSourceLocation());
+ Mutable<ILogicalExpression> branchEntraceConditionExprRef = new MutableObject<>(whenConditionVarRef1);
// Constructs an expression that filters data based on preceding "WHEN" conditions
// and the current "WHEN" condition. Note that only one "THEN" expression can be run
@@ -492,31 +542,45 @@
// The additional filter generated here makes sure the the tuple has not
// entered other matched "WHEN...THEN" case.
List<Mutable<ILogicalExpression>> andArgs = new ArrayList<>();
- andArgs.add(generateNoMatchedPrecedingWhenBranchesFilter(branchCondVarReferences));
+ andArgs.add(generateNoMatchedPrecedingWhenBranchesFilter(branchCondVarReferences,
+ caseExpression.getSourceLocation()));
andArgs.add(branchEntraceConditionExprRef);
// A "THEN" branch can be entered only when the tuple has not enter any other preceding
// branches and the current "WHEN" condition is TRUE.
- branchEntraceConditionExprRef = new MutableObject<>(
- new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), andArgs));
+ ScalarFunctionCallExpression andExpr =
+ new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.AND), andArgs);
+ andExpr.setSourceLocation(whenExpr.getSourceLocation());
+ branchEntraceConditionExprRef = new MutableObject<>(andExpr);
}
// Translates the corresponding "THEN" expression.
- Pair<ILogicalOperator, LogicalVariable> opAndVarForThen = constructSubplanOperatorForBranch(currentOperator,
- branchEntraceConditionExprRef, thenExprList.get(index));
+ Expression thenExpr = thenExprList.get(index);
+ Pair<ILogicalOperator, LogicalVariable> opAndVarForThen =
+ constructSubplanOperatorForBranch(currentOperator, branchEntraceConditionExprRef, thenExpr);
- branchCondVarReferences.add(new VariableReferenceExpression(whenConditionVar));
- allVarReferences.add(new VariableReferenceExpression(whenConditionVar));
- allVarReferences.add(new VariableReferenceExpression(opAndVarForThen.second));
+ VariableReferenceExpression whenConditionVarRef2 = new VariableReferenceExpression(whenConditionVar);
+ whenConditionVarRef2.setSourceLocation(whenExpr.getSourceLocation());
+ branchCondVarReferences.add(whenConditionVarRef2);
+
+ VariableReferenceExpression whenConditionVarRef3 = new VariableReferenceExpression(whenConditionVar);
+ whenConditionVarRef3.setSourceLocation(whenExpr.getSourceLocation());
+ allVarReferences.add(whenConditionVarRef3);
+
+ VariableReferenceExpression thenVarRef = new VariableReferenceExpression(opAndVarForThen.second);
+ thenVarRef.setSourceLocation(thenExpr.getSourceLocation());
+ allVarReferences.add(thenVarRef);
+
currentOperator = opAndVarForThen.first;
currentOpRef = new MutableObject<>(currentOperator);
}
// Creates a subplan for the "ELSE" branch.
- Mutable<ILogicalExpression> elseCondExprRef =
- generateNoMatchedPrecedingWhenBranchesFilter(branchCondVarReferences);
+ Mutable<ILogicalExpression> elseCondExprRef = generateNoMatchedPrecedingWhenBranchesFilter(
+ branchCondVarReferences, caseExpression.getSourceLocation());
+ Expression elseExpr = caseExpression.getElseExpr();
Pair<ILogicalOperator, LogicalVariable> opAndVarForElse =
- constructSubplanOperatorForBranch(currentOperator, elseCondExprRef, caseExpression.getElseExpr());
+ constructSubplanOperatorForBranch(currentOperator, elseCondExprRef, elseExpr);
// Uses switch-case function to select the results of two branches.
LogicalVariable selectVar = context.newVar();
@@ -525,25 +589,35 @@
for (ILogicalExpression argVar : allVarReferences) {
arguments.add(new MutableObject<>(argVar));
}
- arguments.add(new MutableObject<>(new VariableReferenceExpression(opAndVarForElse.second)));
+ VariableReferenceExpression varForElseRef = new VariableReferenceExpression(opAndVarForElse.second);
+ varForElseRef.setSourceLocation(elseExpr.getSourceLocation());
+ arguments.add(new MutableObject<>(varForElseRef));
AbstractFunctionCallExpression swithCaseExpr =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SWITCH_CASE), arguments);
+ swithCaseExpr.setSourceLocation(caseExpression.getSourceLocation());
AssignOperator assignOp = new AssignOperator(selectVar, new MutableObject<>(swithCaseExpr));
assignOp.getInputs().add(new MutableObject<>(opAndVarForElse.first));
+ assignOp.setSourceLocation(caseExpression.getSourceLocation());
// Unnests the selected (a "THEN" or "ELSE" branch) result.
LogicalVariable unnestVar = context.newVar();
- UnnestOperator unnestOp = new UnnestOperator(unnestVar,
- new MutableObject<>(new UnnestingFunctionCallExpression(
- FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), Collections
- .singletonList(new MutableObject<>(new VariableReferenceExpression(selectVar))))));
+ VariableReferenceExpression selectVarRef = new VariableReferenceExpression(selectVar);
+ selectVarRef.setSourceLocation(caseExpression.getSourceLocation());
+ UnnestingFunctionCallExpression scanCollectionExpr =
+ new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
+ Collections.singletonList(new MutableObject<>(selectVarRef)));
+ scanCollectionExpr.setSourceLocation(caseExpression.getSourceLocation());
+ UnnestOperator unnestOp = new UnnestOperator(unnestVar, new MutableObject<>(scanCollectionExpr));
unnestOp.getInputs().add(new MutableObject<>(assignOp));
+ unnestOp.setSourceLocation(caseExpression.getSourceLocation());
// Produces the final assign operator.
LogicalVariable resultVar = context.newVar();
- AssignOperator finalAssignOp =
- new AssignOperator(resultVar, new MutableObject<>(new VariableReferenceExpression(unnestVar)));
+ VariableReferenceExpression unnestVarRef = new VariableReferenceExpression(unnestVar);
+ unnestVarRef.setSourceLocation(caseExpression.getSourceLocation());
+ AssignOperator finalAssignOp = new AssignOperator(resultVar, new MutableObject<>(unnestVarRef));
finalAssignOp.getInputs().add(new MutableObject<>(unnestOp));
+ finalAssignOp.setSourceLocation(caseExpression.getSourceLocation());
return new Pair<>(finalAssignOp, resultVar);
}
@@ -554,6 +628,7 @@
} else {
ProjectOperator pr = new ProjectOperator(resVar);
pr.getInputs().add(returnOpRef);
+ pr.setSourceLocation(returnOpRef.getValue().getSourceLocation());
return new Pair<>(pr, resVar);
}
}
@@ -567,19 +642,25 @@
Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(returnExpr, tupSrc);
LogicalVariable returnVar;
ILogicalOperator returnOperator;
+ SourceLocation sourceLoc = returnExpr.getSourceLocation();
if (returnExpr.getKind() == Kind.VARIABLE_EXPRESSION) {
VariableExpr varExpr = (VariableExpr) returnExpr;
returnOperator = eo.second.getValue();
returnVar = context.getVar(varExpr.getVar().getId());
} else {
returnVar = context.newVar();
- returnOperator = new AssignOperator(returnVar, new MutableObject<>(eo.first));
- returnOperator.getInputs().add(eo.second);
+ AssignOperator assignOp = new AssignOperator(returnVar, new MutableObject<>(eo.first));
+ assignOp.getInputs().add(eo.second);
+ assignOp.setSourceLocation(sourceLoc);
+ returnOperator = assignOp;
}
if (selectClause.distinct()) {
- DistinctOperator distinctOperator = new DistinctOperator(
- mkSingletonArrayList(new MutableObject<>(new VariableReferenceExpression(returnVar))));
+ VariableReferenceExpression returnVarRef = new VariableReferenceExpression(returnVar);
+ returnVarRef.setSourceLocation(sourceLoc);
+ DistinctOperator distinctOperator =
+ new DistinctOperator(mkSingletonArrayList(new MutableObject<>(returnVarRef)));
distinctOperator.getInputs().add(new MutableObject<>(returnOperator));
+ distinctOperator.setSourceLocation(returnOperator.getSourceLocation());
return new Pair<>(distinctOperator, returnVar);
} else {
return new Pair<>(returnOperator, returnVar);
@@ -593,7 +674,9 @@
for (Projection projection : selectRegular.getProjections()) {
if (projection.varStar()) {
if (!fieldBindings.isEmpty()) {
- recordExprs.add(new RecordConstructor(new ArrayList<>(fieldBindings)));
+ RecordConstructor recordConstr = new RecordConstructor(new ArrayList<>(fieldBindings));
+ recordConstr.setSourceLocation(projection.getSourceLocation());
+ recordExprs.add(recordConstr);
fieldBindings.clear();
}
recordExprs.add(projection.getExpression());
@@ -617,11 +700,19 @@
}
}
if (!fieldBindings.isEmpty()) {
- recordExprs.add(new RecordConstructor(fieldBindings));
+ RecordConstructor recordConstr = new RecordConstructor(fieldBindings);
+ recordConstr.setSourceLocation(selectRegular.getSourceLocation());
+ recordExprs.add(recordConstr);
}
- return recordExprs.size() == 1 ? recordExprs.get(0)
- : new CallExpr(new FunctionSignature(BuiltinFunctions.RECORD_CONCAT_STRICT), recordExprs);
+ if (recordExprs.size() == 1) {
+ return recordExprs.get(0);
+ } else {
+ CallExpr recordConcatExpr =
+ new CallExpr(new FunctionSignature(BuiltinFunctions.RECORD_CONCAT_STRICT), recordExprs);
+ recordConcatExpr.setSourceLocation(selectRegular.getSourceLocation());
+ return recordConcatExpr;
+ }
}
// Generates all field bindings according to the from clause.
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/PlanTranslationUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/PlanTranslationUtil.java
index 919bdf2..d2466bf 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/PlanTranslationUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/PlanTranslationUtil.java
@@ -36,43 +36,52 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class PlanTranslationUtil {
private static final LogicalVariable DUMMY_VAR = new LogicalVariable(-1);
public static void prepareMetaKeyAccessExpression(List<String> field, LogicalVariable resVar,
List<Mutable<ILogicalExpression>> assignExpressions, List<LogicalVariable> vars,
- List<Mutable<ILogicalExpression>> varRefs, IVariableContext context) {
+ List<Mutable<ILogicalExpression>> varRefs, IVariableContext context, SourceLocation sourceLoc) {
IAObject value = (field.size() > 1) ? new AOrderedList(field) : new AString(field.get(0));
ScalarFunctionCallExpression metaKeyFunction =
new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.META_KEY));
- metaKeyFunction.getArguments()
- .add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(resVar)));
+ metaKeyFunction.setSourceLocation(sourceLoc);
+ VariableReferenceExpression resVarRef = new VariableReferenceExpression(resVar);
+ resVarRef.setSourceLocation(sourceLoc);
+ metaKeyFunction.getArguments().add(new MutableObject<ILogicalExpression>(resVarRef));
metaKeyFunction.getArguments()
.add(new MutableObject<>(new ConstantExpression(new AsterixConstantValue(value))));
assignExpressions.add(new MutableObject<ILogicalExpression>(metaKeyFunction));
LogicalVariable v = context.newVar();
vars.add(v);
if (varRefs != null) {
- varRefs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
+ VariableReferenceExpression vRef = new VariableReferenceExpression(v);
+ vRef.setSourceLocation(sourceLoc);
+ varRefs.add(new MutableObject<ILogicalExpression>(vRef));
}
}
public static void prepareVarAndExpression(List<String> field, LogicalVariable resVar, List<LogicalVariable> vars,
List<Mutable<ILogicalExpression>> assignExpressions, List<Mutable<ILogicalExpression>> varRefs,
- IVariableContext context) {
- ScalarFunctionCallExpression f = createFieldAccessExpression(new VariableReferenceExpression(DUMMY_VAR), field);
+ IVariableContext context, SourceLocation sourceLoc) {
+ VariableReferenceExpression dummyVarRef = new VariableReferenceExpression(DUMMY_VAR);
+ dummyVarRef.setSourceLocation(sourceLoc);
+ ScalarFunctionCallExpression f = createFieldAccessExpression(dummyVarRef, field, sourceLoc);
f.substituteVar(DUMMY_VAR, resVar);
assignExpressions.add(new MutableObject<ILogicalExpression>(f));
LogicalVariable v = context.newVar();
vars.add(v);
if (varRefs != null) {
- varRefs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
+ VariableReferenceExpression vRef = new VariableReferenceExpression(v);
+ vRef.setSourceLocation(sourceLoc);
+ varRefs.add(new MutableObject<ILogicalExpression>(vRef));
}
}
private static ScalarFunctionCallExpression createFieldAccessExpression(ILogicalExpression target,
- List<String> field) {
+ List<String> field, SourceLocation sourceLoc) {
FunctionIdentifier functionIdentifier;
IAObject value;
if (field.size() > 1) {
@@ -83,7 +92,9 @@
value = new AString(field.get(0));
}
IFunctionInfo finfoAccess = FunctionUtil.getFunctionInfo(functionIdentifier);
- return new ScalarFunctionCallExpression(finfoAccess, new MutableObject<>(target),
+ ScalarFunctionCallExpression faExpr = new ScalarFunctionCallExpression(finfoAccess, new MutableObject<>(target),
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(value))));
+ faExpr.setSourceLocation(sourceLoc);
+ return faExpr;
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
index d5ebc6e..ffb1dd5 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
@@ -32,6 +32,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.asterix.om.utils.RecordUtil;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* A util that can verify if a filter field, a list of partitioning expressions,
@@ -50,16 +51,17 @@
* the record type
* @param filterField
* the full name of the field
+ * @param sourceLoc
* @throws AlgebricksException
* if field is not found in record.
* if field type can't be a filter type.
* if field type is nullable.
*/
- public static void validateFilterField(ARecordType recordType, List<String> filterField)
+ public static void validateFilterField(ARecordType recordType, List<String> filterField, SourceLocation sourceLoc)
throws AlgebricksException {
IAType fieldType = recordType.getSubFieldType(filterField);
if (fieldType == null) {
- throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND,
+ throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc,
RecordUtil.toFullyQualifiedName(filterField));
}
switch (fieldType.getTypeTag()) {
@@ -100,6 +102,7 @@
* the key sources (record vs. meta)
* @param autogenerated
* true if auto generated, false otherwise
+ * @param sourceLoc
* @return a list of partitioning expressions types
* @throws AlgebricksException
* if composite key is autogenerated.
@@ -109,24 +112,25 @@
* if the field type can't be a primary key.
*/
public static List<IAType> validatePartitioningExpressions(ARecordType recType, ARecordType metaRecType,
- List<List<String>> partitioningExprs, List<Integer> keySourceIndicators, boolean autogenerated)
- throws AlgebricksException {
+ List<List<String>> partitioningExprs, List<Integer> keySourceIndicators, boolean autogenerated,
+ SourceLocation sourceLoc) throws AlgebricksException {
List<IAType> partitioningExprTypes = new ArrayList<>(partitioningExprs.size());
if (autogenerated) {
if (partitioningExprs.size() > 1) {
- throw new CompilationException(ErrorCode.COMPILATION_CANNOT_AUTOGENERATE_COMPOSITE_PRIMARY_KEY);
+ throw new CompilationException(ErrorCode.COMPILATION_CANNOT_AUTOGENERATE_COMPOSITE_PRIMARY_KEY,
+ sourceLoc);
}
List<String> fieldName = partitioningExprs.get(0);
IAType fieldType = recType.getSubFieldType(fieldName);
if (fieldType == null) {
String unTypeField = fieldName.get(0) == null ? "" : fieldName.get(0);
- throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, unTypeField);
+ throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc, unTypeField);
}
partitioningExprTypes.add(fieldType);
ATypeTag pkTypeTag = fieldType.getTypeTag();
if (pkTypeTag != ATypeTag.UUID) {
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_AUTOGENERATED_TYPE, pkTypeTag.name(),
- ATypeTag.UUID.name());
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_AUTOGENERATED_TYPE, sourceLoc,
+ pkTypeTag.name(), ATypeTag.UUID.name());
}
} else {
partitioningExprTypes =
@@ -135,14 +139,14 @@
List<String> partitioningExpr = partitioningExprs.get(i);
IAType fieldType = partitioningExprTypes.get(i);
if (fieldType == null) {
- throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND,
+ throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, sourceLoc,
RecordUtil.toFullyQualifiedName(partitioningExpr));
}
boolean nullable = KeyFieldTypeUtil.chooseSource(keySourceIndicators, i, recType, metaRecType)
.isSubFieldNullable(partitioningExpr);
if (nullable) {
// key field is nullable
- throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE,
+ throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE, sourceLoc,
RecordUtil.toFullyQualifiedName(partitioningExpr));
}
switch (fieldType.getTypeTag()) {
@@ -162,10 +166,10 @@
case DAYTIMEDURATION:
break;
case UNION:
- throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE,
+ throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE, sourceLoc,
RecordUtil.toFullyQualifiedName(partitioningExpr));
default:
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE,
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE, sourceLoc,
fieldType.getTypeTag());
}
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index 537625d..a1d3f57 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -102,6 +102,7 @@
import org.apache.hyracks.api.client.NodeControllerInfo;
import org.apache.hyracks.api.config.IOptionType;
import org.apache.hyracks.api.exceptions.HyracksException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.job.JobId;
import org.apache.hyracks.api.job.JobSpecification;
import org.apache.hyracks.api.job.resource.IClusterCapacity;
@@ -190,6 +191,8 @@
// establish facts
final boolean isQuery = query != null;
final boolean isLoad = statement != null && statement.getKind() == Statement.Kind.LOAD;
+ final SourceLocation sourceLoc =
+ query != null ? query.getSourceLocation() : statement != null ? statement.getSourceLocation() : null;
SessionConfig conf = output.config();
if (isQuery && !conf.is(SessionConfig.FORMAT_ONLY_PHYSICAL_OPS)
@@ -209,9 +212,9 @@
generateLogicalPlan(plan, output.config().getPlanFormat());
}
CompilerProperties compilerProperties = metadataProvider.getApplicationContext().getCompilerProperties();
- Map<String, String> querySpecificConfig = validateConfig(metadataProvider.getConfig());
+ Map<String, String> querySpecificConfig = validateConfig(metadataProvider.getConfig(), sourceLoc);
final PhysicalOptimizationConfig physOptConf =
- getPhysicalOptimizationConfig(compilerProperties, querySpecificConfig);
+ getPhysicalOptimizationConfig(compilerProperties, querySpecificConfig, sourceLoc);
HeuristicCompilerFactoryBuilder builder =
new HeuristicCompilerFactoryBuilder(OptimizationContextFactory.INSTANCE);
@@ -300,20 +303,20 @@
}
protected PhysicalOptimizationConfig getPhysicalOptimizationConfig(CompilerProperties compilerProperties,
- Map<String, String> querySpecificConfig) throws AlgebricksException {
+ Map<String, String> querySpecificConfig, SourceLocation sourceLoc) throws AlgebricksException {
int frameSize = compilerProperties.getFrameSize();
int sortFrameLimit = getFrameLimit(CompilerProperties.COMPILER_SORTMEMORY_KEY,
querySpecificConfig.get(CompilerProperties.COMPILER_SORTMEMORY_KEY),
- compilerProperties.getSortMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_SORT);
+ compilerProperties.getSortMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_SORT, sourceLoc);
int groupFrameLimit = getFrameLimit(CompilerProperties.COMPILER_GROUPMEMORY_KEY,
querySpecificConfig.get(CompilerProperties.COMPILER_GROUPMEMORY_KEY),
- compilerProperties.getGroupMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_GROUP_BY);
+ compilerProperties.getGroupMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_GROUP_BY, sourceLoc);
int joinFrameLimit = getFrameLimit(CompilerProperties.COMPILER_JOINMEMORY_KEY,
querySpecificConfig.get(CompilerProperties.COMPILER_JOINMEMORY_KEY),
- compilerProperties.getJoinMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_JOIN);
+ compilerProperties.getJoinMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_JOIN, sourceLoc);
int textSearchFrameLimit = getFrameLimit(CompilerProperties.COMPILER_TEXTSEARCHMEMORY_KEY,
querySpecificConfig.get(CompilerProperties.COMPILER_TEXTSEARCHMEMORY_KEY),
- compilerProperties.getTextSearchMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_TEXTSEARCH);
+ compilerProperties.getTextSearchMemorySize(), frameSize, MIN_FRAME_LIMIT_FOR_TEXTSEARCH, sourceLoc);
final PhysicalOptimizationConfig physOptConf = OptimizationConfUtil.getPhysicalOptimizationConfig();
physOptConf.setFrameSize(frameSize);
physOptConf.setMaxFramesExternalSort(sortFrameLimit);
@@ -450,12 +453,17 @@
// Gets the frame limit.
private static int getFrameLimit(String parameterName, String parameter, long memBudgetInConfiguration,
- int frameSize, int minFrameLimit) throws AlgebricksException {
+ int frameSize, int minFrameLimit, SourceLocation sourceLoc) throws AlgebricksException {
IOptionType<Long> longBytePropertyInterpreter = OptionTypes.LONG_BYTE_UNIT;
- long memBudget = parameter == null ? memBudgetInConfiguration : longBytePropertyInterpreter.parse(parameter);
+ long memBudget;
+ try {
+ memBudget = parameter == null ? memBudgetInConfiguration : longBytePropertyInterpreter.parse(parameter);
+ } catch (IllegalArgumentException e) {
+ throw AsterixException.create(ErrorCode.COMPILATION_ERROR, sourceLoc, e.getMessage());
+ }
int frameLimit = (int) (memBudget / frameSize);
if (frameLimit < minFrameLimit) {
- throw AsterixException.create(ErrorCode.COMPILATION_BAD_QUERY_PARAMETER_VALUE, parameterName,
+ throw AsterixException.create(ErrorCode.COMPILATION_BAD_QUERY_PARAMETER_VALUE, sourceLoc, parameterName,
frameSize * minFrameLimit);
}
// Sets the frame limit to the minimum frame limit if the caculated frame limit is too small.
@@ -469,10 +477,12 @@
}
// Validates if the query contains unsupported query parameters.
- private static Map<String, String> validateConfig(Map<String, String> config) throws AlgebricksException {
+ private static Map<String, String> validateConfig(Map<String, String> config, SourceLocation sourceLoc)
+ throws AlgebricksException {
for (String parameterName : config.keySet()) {
if (!CONFIGURABLE_PARAMETER_NAMES.contains(parameterName)) {
- throw AsterixException.create(ErrorCode.COMPILATION_UNSUPPORTED_QUERY_PARAMETER, parameterName);
+ throw AsterixException.create(ErrorCode.COMPILATION_UNSUPPORTED_QUERY_PARAMETER, sourceLoc,
+ parameterName);
}
}
return config;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetResourcesRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetResourcesRewriter.java
index a575ba4..77e0310 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetResourcesRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetResourcesRewriter.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.app.function;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionConstants;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.metadata.entities.Dataset;
@@ -45,7 +47,8 @@
MetadataProvider metadataProvider = (MetadataProvider) context.getMetadataProvider();
Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
if (dataset == null) {
- throw new AlgebricksException("Could not find dataset " + datasetName + " in dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, f.getSourceLocation(),
+ "Could not find dataset " + datasetName + " in dataverse " + dataverseName);
}
return new DatasetResourcesDatasource(context.getComputationNodeDomain(), dataset.getDatasetId());
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
index c857ce0..9b4b7c4 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/DatasetRewriter.java
@@ -22,6 +22,8 @@
import java.util.List;
import org.apache.asterix.common.config.DatasetConfig.DatasetType;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.metadata.declared.DataSource;
import org.apache.asterix.metadata.declared.DataSourceId;
import org.apache.asterix.metadata.declared.MetadataProvider;
@@ -68,7 +70,8 @@
UnnestOperator unnest = (UnnestOperator) opRef.getValue();
if (unnest.getPositionalVariable() != null) {
// TODO remove this after enabling the support of positional variables in data scan
- throw new AlgebricksException("No positional variables are allowed over datasets.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, unnest.getSourceLocation(),
+ "No positional variables are allowed over datasets.");
}
ILogicalExpression expr = f.getArguments().get(0).getValue();
if (expr.getExpressionTag() != LogicalExpressionTag.CONSTANT) {
@@ -90,7 +93,8 @@
String datasetName = datasetReference.second;
Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
if (dataset == null) {
- throw new AlgebricksException("Could not find dataset " + datasetName + " in dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, unnest.getSourceLocation(),
+ "Could not find dataset " + datasetName + " in dataverse " + dataverseName);
}
DataSourceId asid = new DataSourceId(dataverseName, datasetName);
List<LogicalVariable> variables = new ArrayList<>();
@@ -107,6 +111,7 @@
variables.add(context.newVar());
}
DataSourceScanOperator scan = new DataSourceScanOperator(variables, dataSource);
+ scan.setSourceLocation(unnest.getSourceLocation());
List<Mutable<ILogicalOperator>> scanInpList = scan.getInputs();
scanInpList.addAll(unnest.getInputs());
opRef.setValue(scan);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java
index 51aca5d..e9087c2 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FeedRewriter.java
@@ -21,6 +21,8 @@
import java.util.ArrayList;
import java.util.List;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.external.feed.watch.FeedActivityDetails;
import org.apache.asterix.external.util.ExternalDataUtils;
import org.apache.asterix.external.util.FeedUtils;
@@ -70,7 +72,8 @@
AbstractFunctionCallExpression f = UnnestToDataScanRule.getFunctionCall(opRef);
UnnestOperator unnest = (UnnestOperator) opRef.getValue();
if (unnest.getPositionalVariable() != null) {
- throw new AlgebricksException("No positional variables are allowed over feeds.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, unnest.getSourceLocation(),
+ "No positional variables are allowed over feeds.");
}
String dataverse = ConstantExpressionUtil.getStringArgument(f, 0);
String sourceFeedName = ConstantExpressionUtil.getStringArgument(f, 1);
@@ -85,7 +88,8 @@
if (policy == null) {
policy = BuiltinFeedPolicies.getFeedPolicy(policyName);
if (policy == null) {
- throw new AlgebricksException("Unknown feed policy:" + policyName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, unnest.getSourceLocation(),
+ "Unknown feed policy:" + policyName);
}
}
ArrayList<LogicalVariable> feedDataScanOutputVariables = new ArrayList<>();
@@ -104,6 +108,7 @@
feedDataScanOutputVariables.addAll(pkVars);
}
DataSourceScanOperator scan = new DataSourceScanOperator(feedDataScanOutputVariables, ds);
+ scan.setSourceLocation(unnest.getSourceLocation());
List<Mutable<ILogicalOperator>> scanInpList = scan.getInputs();
scanInpList.addAll(unnest.getInputs());
opRef.setValue(scan);
@@ -152,10 +157,10 @@
List<String> key = partitioningKeys.get(i);
if (keySourceIndicator == null || keySourceIndicator.get(i).intValue() == 0) {
PlanTranslationUtil.prepareVarAndExpression(key, recordVar, pkVars, keyAccessExpression, null,
- context);
+ context, null);
} else {
PlanTranslationUtil.prepareMetaKeyAccessExpression(key, recordVar, keyAccessExpression, pkVars,
- null, context);
+ null, context, null);
}
}
keyAccessExpression.forEach(
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FunctionRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FunctionRewriter.java
index 2ff9282..2bc5ab6 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FunctionRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/FunctionRewriter.java
@@ -21,6 +21,8 @@
import java.util.ArrayList;
import java.util.List;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.metadata.declared.FunctionDataSource;
import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.constants.AsterixConstantValue;
@@ -55,24 +57,29 @@
AbstractFunctionCallExpression f = UnnestToDataScanRule.getFunctionCall(opRef);
List<Mutable<ILogicalExpression>> args = f.getArguments();
if (args.size() != functionId.getArity()) {
- throw new AlgebricksException("Function " + functionId.getNamespace() + "." + functionId.getName()
- + " expects " + functionId.getArity() + " arguments");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, f.getSourceLocation(),
+ "Function " + functionId.getNamespace() + "." + functionId.getName() + " expects "
+ + functionId.getArity() + " arguments");
}
for (int i = 0; i < args.size(); i++) {
- if (args.get(i).getValue().getExpressionTag() != LogicalExpressionTag.CONSTANT) {
- throw new AlgebricksException("Function " + functionId.getNamespace() + "." + functionId.getName()
- + " expects constant arguments while arg[" + i + "] is of type "
- + args.get(i).getValue().getExpressionTag());
+ ILogicalExpression argExpr = args.get(i).getValue();
+ if (argExpr.getExpressionTag() != LogicalExpressionTag.CONSTANT) {
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, argExpr.getSourceLocation(),
+ "Function " + functionId.getNamespace() + "." + functionId.getName()
+ + " expects constant arguments while arg[" + i + "] is of type "
+ + argExpr.getExpressionTag());
}
}
UnnestOperator unnest = (UnnestOperator) opRef.getValue();
if (unnest.getPositionalVariable() != null) {
- throw new AlgebricksException("No positional variables are allowed over datasource functions");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, unnest.getSourceLocation(),
+ "No positional variables are allowed over datasource functions");
}
FunctionDataSource datasource = toDatasource(context, f);
List<LogicalVariable> variables = new ArrayList<>();
variables.add(unnest.getVariable());
DataSourceScanOperator scan = new DataSourceScanOperator(variables, datasource);
+ scan.setSourceLocation(unnest.getSourceLocation());
List<Mutable<ILogicalOperator>> scanInpList = scan.getInputs();
scanInpList.addAll(unnest.getInputs());
opRef.setValue(scan);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsRewriter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsRewriter.java
index 89bd115..d1796cf 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsRewriter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/function/StorageComponentsRewriter.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.app.function;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionConstants;
import org.apache.asterix.metadata.declared.MetadataProvider;
import org.apache.asterix.metadata.entities.Dataset;
@@ -45,7 +47,8 @@
MetadataProvider metadataProvider = (MetadataProvider) context.getMetadataProvider();
Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
if (dataset == null) {
- throw new AlgebricksException("Could not find dataset " + datasetName + " in dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, f.getSourceLocation(),
+ "Could not find dataset " + datasetName + " in dataverse " + dataverseName);
}
return new StorageComponentsDatasource(context.getComputationNodeDomain(), dataset.getDatasetId());
}
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 524c684..5cbb85a 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
@@ -187,6 +187,7 @@
import org.apache.hyracks.api.dataset.IHyracksDataset;
import org.apache.hyracks.api.dataset.ResultSetId;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.io.FileSplit;
import org.apache.hyracks.api.io.UnmanagedFileSplit;
import org.apache.hyracks.api.job.JobFlag;
@@ -402,7 +403,7 @@
resultSetIdCounter);
break;
default:
- throw new CompilationException("Unknown function");
+ throw new IllegalStateException(String.valueOf(stmt.getKind()));
}
}
} finally {
@@ -432,6 +433,7 @@
protected Dataverse handleUseDataverseStatement(MetadataProvider metadataProvider, Statement stmt)
throws Exception {
DataverseDecl dvd = (DataverseDecl) stmt;
+ SourceLocation sourceLoc = dvd.getSourceLocation();
String dvName = dvd.getDataverseName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
metadataProvider.setMetadataTxnContext(mdTxnCtx);
@@ -439,13 +441,13 @@
try {
Dataverse dv = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), dvName);
if (dv == null) {
- throw new MetadataException("Unknown dataverse " + dvName);
+ throw new MetadataException(ErrorCode.NO_DATAVERSE_WITH_NAME, sourceLoc, dvName);
}
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return dv;
} catch (Exception e) {
abort(e, e, mdTxnCtx);
- throw new MetadataException(e);
+ throw new MetadataException(ErrorCode.METADATA_ERROR, e, sourceLoc, e.toString());
} finally {
metadataProvider.getLocks().unlock();
}
@@ -466,7 +468,7 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("A dataverse with this name " + dvName + " already exists.");
+ throw new AsterixException(ErrorCode.DATAVERSE_EXISTS, stmt.getSourceLocation(), dvName);
}
}
MetadataManager.INSTANCE.addDataverse(metadataProvider.getMetadataTxnContext(),
@@ -482,31 +484,36 @@
protected static void validateCompactionPolicy(String compactionPolicy,
Map<String, String> compactionPolicyProperties, MetadataTransactionContext mdTxnCtx,
- boolean isExternalDataset) throws CompilationException, Exception {
+ boolean isExternalDataset, SourceLocation sourceLoc) throws CompilationException, Exception {
CompactionPolicy compactionPolicyEntity = MetadataManager.INSTANCE.getCompactionPolicy(mdTxnCtx,
MetadataConstants.METADATA_DATAVERSE_NAME, compactionPolicy);
if (compactionPolicyEntity == null) {
- throw new CompilationException("Unknown compaction policy: " + compactionPolicy);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown compaction policy: " + compactionPolicy);
}
String compactionPolicyFactoryClassName = compactionPolicyEntity.getClassName();
ILSMMergePolicyFactory mergePolicyFactory =
(ILSMMergePolicyFactory) Class.forName(compactionPolicyFactoryClassName).newInstance();
if (isExternalDataset && mergePolicyFactory.getName().compareTo("correlated-prefix") == 0) {
- throw new CompilationException("The correlated-prefix merge policy cannot be used with external dataset.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "The correlated-prefix merge policy cannot be used with external dataset.");
}
if (compactionPolicyProperties == null) {
if (mergePolicyFactory.getName().compareTo("no-merge") != 0) {
- throw new CompilationException("Compaction policy properties are missing.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Compaction policy properties are missing.");
}
} else {
for (Map.Entry<String, String> entry : compactionPolicyProperties.entrySet()) {
if (!mergePolicyFactory.getPropertiesNames().contains(entry.getKey())) {
- throw new CompilationException("Invalid compaction policy property: " + entry.getKey());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Invalid compaction policy property: " + entry.getKey());
}
}
for (String p : mergePolicyFactory.getPropertiesNames()) {
if (!compactionPolicyProperties.containsKey(p)) {
- throw new CompilationException("Missing compaction policy property: " + p);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Missing compaction policy property: " + p);
}
}
}
@@ -516,6 +523,7 @@
IHyracksClientConnection hcc, IRequestParameters requestParameters) throws CompilationException, Exception {
MutableObject<ProgressState> progress = new MutableObject<>(ProgressState.NO_PROGRESS);
DatasetDecl dd = (DatasetDecl) stmt;
+ SourceLocation sourceLoc = dd.getSourceLocation();
String dataverseName = getActiveDataverse(dd.getDataverse());
String datasetName = dd.getName().getValue();
DatasetType dsType = dd.getDatasetType();
@@ -544,28 +552,31 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("A dataset with this name " + datasetName + " already exists.");
+ throw new CompilationException(ErrorCode.DATASET_EXISTS, sourceLoc, datasetName);
}
}
Datatype dt = MetadataManager.INSTANCE.getDatatype(metadataProvider.getMetadataTxnContext(),
itemTypeDataverseName, itemTypeName);
if (dt == null) {
- throw new AlgebricksException(": type " + itemTypeName + " could not be found.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ ": type " + itemTypeName + " could not be found.");
}
String ngName = ngNameId != null ? ngNameId.getValue()
- : configureNodegroupForDataset(appCtx, dd.getHints(), dataverseName, datasetName, metadataProvider);
+ : configureNodegroupForDataset(appCtx, dd.getHints(), dataverseName, datasetName, metadataProvider,
+ sourceLoc);
if (compactionPolicy == null) {
compactionPolicy = GlobalConfig.DEFAULT_COMPACTION_POLICY_NAME;
compactionPolicyProperties = GlobalConfig.DEFAULT_COMPACTION_POLICY_PROPERTIES;
} else {
- validateCompactionPolicy(compactionPolicy, compactionPolicyProperties, mdTxnCtx, false);
+ validateCompactionPolicy(compactionPolicy, compactionPolicyProperties, mdTxnCtx, false, sourceLoc);
}
switch (dd.getDatasetType()) {
case INTERNAL:
IAType itemType = dt.getDatatype();
if (itemType.getTypeTag() != ATypeTag.OBJECT) {
- throw new AlgebricksException("Dataset type has to be a record type.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Dataset type has to be a record type.");
}
IAType metaItemType = null;
@@ -573,7 +584,8 @@
metaItemType = metadataProvider.findType(metaItemTypeDataverseName, metaItemTypeName);
}
if (metaItemType != null && metaItemType.getTypeTag() != ATypeTag.OBJECT) {
- throw new AlgebricksException("Dataset meta type has to be a record type.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Dataset meta type has to be a record type.");
}
ARecordType metaRecType = (ARecordType) metaItemType;
@@ -584,11 +596,11 @@
boolean autogenerated = ((InternalDetailsDecl) dd.getDatasetDetailsDecl()).isAutogenerated();
ARecordType aRecordType = (ARecordType) itemType;
List<IAType> partitioningTypes = ValidateUtil.validatePartitioningExpressions(aRecordType,
- metaRecType, partitioningExprs, keySourceIndicators, autogenerated);
+ metaRecType, partitioningExprs, keySourceIndicators, autogenerated, sourceLoc);
List<String> filterField = ((InternalDetailsDecl) dd.getDatasetDetailsDecl()).getFilterField();
if (filterField != null) {
- ValidateUtil.validateFilterField(aRecordType, filterField);
+ ValidateUtil.validateFilterField(aRecordType, filterField, sourceLoc);
}
if (compactionPolicy == null && filterField != null) {
// If the dataset has a filter and the user didn't specify a merge
@@ -609,7 +621,8 @@
new ExternalDatasetDetails(adapter, properties, new Date(), TransactionState.COMMIT);
break;
default:
- throw new CompilationException("Unknown datatype " + dd.getDatasetType());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown datatype " + dd.getDatasetType());
}
// #. initialize DatasetIdFactory if it is not initialized.
@@ -694,8 +707,8 @@
}
}
- protected static void validateIfResourceIsActiveInFeed(ICcApplicationContext appCtx, Dataset dataset)
- throws CompilationException {
+ protected static void validateIfResourceIsActiveInFeed(ICcApplicationContext appCtx, Dataset dataset,
+ SourceLocation sourceLoc) throws CompilationException {
StringBuilder builder = null;
ActiveNotificationHandler activeEventHandler =
(ActiveNotificationHandler) appCtx.getActiveNotificationHandler();
@@ -709,13 +722,15 @@
}
}
if (builder != null) {
- throw new CompilationException("Dataset " + dataset.getDataverseName() + "." + dataset.getDatasetName()
- + " is currently being " + "fed into by the following active entities.\n" + builder.toString());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Dataset " + dataset.getDataverseName() + "." + dataset.getDatasetName() + " is currently being "
+ + "fed into by the following active entities.\n" + builder.toString());
}
}
protected static String configureNodegroupForDataset(ICcApplicationContext appCtx, Map<String, String> hints,
- String dataverseName, String datasetName, MetadataProvider metadataProvider) throws Exception {
+ String dataverseName, String datasetName, MetadataProvider metadataProvider, SourceLocation sourceLoc)
+ throws Exception {
IClusterStateManager csm = appCtx.getClusterStateManager();
Set<String> allNodes = csm.getParticipantNodes(true);
Set<String> selectedNodes = new LinkedHashSet<>();
@@ -728,7 +743,7 @@
hints.get(DatasetNodegroupCardinalityHint.NAME));
boolean valid = validation.first;
if (!valid) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Incorrect use of hint '" + DatasetNodegroupCardinalityHint.NAME + "': " + validation.second);
} else {
nodegroupCardinality = Integer.parseInt(hints.get(DatasetNodegroupCardinalityHint.NAME));
@@ -744,6 +759,7 @@
public void handleCreateIndexStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
CreateIndexStatement stmtCreateIndex = (CreateIndexStatement) stmt;
+ SourceLocation sourceLoc = stmtCreateIndex.getSourceLocation();
String dataverseName = getActiveDataverse(stmtCreateIndex.getDataverseName());
String datasetName = stmtCreateIndex.getDatasetName().getValue();
String indexName = stmtCreateIndex.getIndexName().getValue();
@@ -758,7 +774,7 @@
try {
ds = metadataProvider.findDataset(dataverseName, datasetName);
if (ds == null) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"There is no dataset with this name " + datasetName + " in dataverse " + dataverseName);
}
@@ -769,7 +785,8 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("An index with this name " + indexName + " already exists.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "An index with this name " + indexName + " already exists.");
}
}
// can't create secondary primary index on an external dataset
@@ -816,11 +833,11 @@
fieldType = subType.getSubFieldType(fieldExpr.first.subList(i, fieldExpr.first.size()));
} else {
if (!stmtCreateIndex.isEnforced() && stmtCreateIndex.getIndexType() != IndexType.BTREE) {
- throw new AsterixException(ErrorCode.INDEX_ILLEGAL_NON_ENFORCED_TYPED,
+ throw new AsterixException(ErrorCode.INDEX_ILLEGAL_NON_ENFORCED_TYPED, sourceLoc,
stmtCreateIndex.getIndexType());
}
if (stmtCreateIndex.isEnforced() && !fieldExpr.second.isUnknownable()) {
- throw new AsterixException(ErrorCode.INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL,
+ throw new AsterixException(ErrorCode.INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL, sourceLoc,
String.valueOf(fieldExpr.first));
}
// don't allow creating an enforced index on a closed-type field, fields that
@@ -828,15 +845,16 @@
// get the field type, if it's not null, then the field is closed-type
if (stmtCreateIndex.isEnforced()
&& subType.getSubFieldType(fieldExpr.first.subList(i, fieldExpr.first.size())) != null) {
- throw new AsterixException(ErrorCode.INDEX_ILLEGAL_ENFORCED_ON_CLOSED_FIELD,
+ throw new AsterixException(ErrorCode.INDEX_ILLEGAL_ENFORCED_ON_CLOSED_FIELD, sourceLoc,
String.valueOf(fieldExpr.first));
}
if (!isOpen) {
- throw new AlgebricksException("Typed index on \"" + fieldExpr.first
- + "\" field could be created only for open datatype");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Typed index on \""
+ + fieldExpr.first + "\" field could be created only for open datatype");
}
if (stmtCreateIndex.hasMetaField()) {
- throw new AlgebricksException("Typed open index can only be created on the record part");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Typed open index can only be created on the record part");
}
Map<TypeSignature, IAType> typeMap =
TypeTranslator.computeTypes(mdTxnCtx, fieldExpr.second.getType(), indexName, dataverseName);
@@ -845,7 +863,7 @@
overridesFieldTypes = true;
}
if (fieldType == null) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Unknown type " + (fieldExpr.second == null ? fieldExpr.first : fieldExpr.second));
}
@@ -853,7 +871,7 @@
// there is a duplicate
if (!indexKeysSet
.add(new Pair<>(fieldExpr.first, stmtCreateIndex.getFieldSourceIndicators().get(keyIndex)))) {
- throw new AsterixException(ErrorCode.INDEX_ILLEGAL_REPETITIVE_FIELD,
+ throw new AsterixException(ErrorCode.INDEX_ILLEGAL_REPETITIVE_FIELD, sourceLoc,
String.valueOf(fieldExpr.first));
}
@@ -881,9 +899,10 @@
// If it is not a fixed length
if (typeTrait.getFixedLength() < 0) {
- throw new AlgebricksException("The keyword or ngram index -" + indexName
- + " cannot be created on the dataset -" + datasetName
- + " due to its variable-length primary key field - " + partitioningKey);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "The keyword or ngram index -" + indexName + " cannot be created on the dataset -"
+ + datasetName + " due to its variable-length primary key field - "
+ + partitioningKey);
}
}
@@ -892,14 +911,14 @@
Index newIndex = new Index(dataverseName, datasetName, indexName, stmtCreateIndex.getIndexType(),
indexFields, keySourceIndicators, indexFieldTypes, stmtCreateIndex.getGramLength(),
overridesFieldTypes, stmtCreateIndex.isEnforced(), false, MetadataUtil.PENDING_ADD_OP);
- doCreateIndex(hcc, metadataProvider, ds, newIndex, jobFlags);
+ doCreateIndex(hcc, metadataProvider, ds, newIndex, jobFlags, sourceLoc);
} finally {
metadataProvider.getLocks().unlock();
}
}
public static void doCreateIndex(IHyracksClientConnection hcc, MetadataProvider metadataProvider, Dataset ds,
- Index index, EnumSet<JobFlag> jobFlags) throws Exception {
+ Index index, EnumSet<JobFlag> jobFlags, SourceLocation sourceLoc) throws Exception {
ProgressState progress = ProgressState.NO_PROGRESS;
boolean bActiveTxn = true;
Index filesIndex = null;
@@ -912,18 +931,19 @@
try {
index.setPendingOp(MetadataUtil.PENDING_ADD_OP);
if (ds.getDatasetType() == DatasetType.INTERNAL) {
- validateIfResourceIsActiveInFeed(metadataProvider.getApplicationContext(), ds);
+ validateIfResourceIsActiveInFeed(metadataProvider.getApplicationContext(), ds, sourceLoc);
} else {
// External dataset
// Check if the dataset is indexible
if (!ExternalIndexingOperations.isIndexible((ExternalDatasetDetails) ds.getDatasetDetails())) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"dataset using " + ((ExternalDatasetDetails) ds.getDatasetDetails()).getAdapter()
+ " Adapter can't be indexed");
}
// Check if the name of the index is valid
if (!ExternalIndexingOperations.isValidIndexName(index.getDatasetName(), index.getIndexName())) {
- throw new AlgebricksException("external dataset index name is invalid");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "external dataset index name is invalid");
}
// Check if the files index exist
@@ -963,7 +983,7 @@
spec = ExternalIndexingOperations.buildFilesIndexCreateJobSpec(ds, externalFilesSnapshot,
metadataProvider);
if (spec == null) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Failed to create job spec for replicating Files Index For external dataset");
}
filesIndexReplicated = true;
@@ -979,20 +999,21 @@
if (existingIndex.getKeyFieldNames().equals(index.getKeyFieldNames())
&& !existingIndex.getKeyFieldTypes().equals(index.getKeyFieldTypes())
&& existingIndex.isEnforced()) {
- throw new CompilationException("Cannot create index " + index.getIndexName()
- + " , enforced index " + existingIndex.getIndexName() + " on field \""
- + StringUtils.join(index.getKeyFieldNames(), ',') + "\" is already defined with type \""
- + existingIndex.getKeyFieldTypes() + "\"");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Cannot create index "
+ + index.getIndexName() + " , enforced index " + existingIndex.getIndexName()
+ + " on field \"" + StringUtils.join(index.getKeyFieldNames(), ',')
+ + "\" is already defined with type \"" + existingIndex.getKeyFieldTypes() + "\"");
}
}
}
// #. add a new index with PendingAddOp
MetadataManager.INSTANCE.addIndex(metadataProvider.getMetadataTxnContext(), index);
// #. prepare to create the index artifact in NC.
- spec = IndexUtil.buildSecondaryIndexCreationJobSpec(ds, index, metadataProvider);
+ spec = IndexUtil.buildSecondaryIndexCreationJobSpec(ds, index, metadataProvider, sourceLoc);
if (spec == null) {
- throw new CompilationException("Failed to create job spec for creating index '" + ds.getDatasetName()
- + "." + index.getIndexName() + "'");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Failed to create job spec for creating index '" + ds.getDatasetName() + "."
+ + index.getIndexName() + "'");
}
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
@@ -1015,7 +1036,7 @@
metadataProvider.setMetadataTxnContext(mdTxnCtx);
// #. load data into the index in NC.
- spec = IndexUtil.buildSecondaryIndexLoadingJobSpec(ds, index, metadataProvider);
+ spec = IndexUtil.buildSecondaryIndexLoadingJobSpec(ds, index, metadataProvider, sourceLoc);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
@@ -1074,7 +1095,7 @@
bActiveTxn = true;
metadataProvider.setMetadataTxnContext(mdTxnCtx);
try {
- JobSpecification jobSpec = IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds);
+ JobSpecification jobSpec = IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds, sourceLoc);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
runJob(hcc, jobSpec, jobFlags);
@@ -1149,6 +1170,7 @@
protected void handleCreateTypeStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
TypeDecl stmtCreateType = (TypeDecl) stmt;
+ SourceLocation sourceLoc = stmtCreateType.getSourceLocation();
String dataverseName = getActiveDataverse(stmtCreateType.getDataverseName());
String typeName = stmtCreateType.getIdent().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -1158,16 +1180,19 @@
try {
Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverseName);
if (dv == null) {
- throw new AlgebricksException("Unknown dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown dataverse " + dataverseName);
}
Datatype dt = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, typeName);
if (dt != null) {
if (!stmtCreateType.getIfNotExists()) {
- throw new AlgebricksException("A datatype with this name " + typeName + " already exists.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "A datatype with this name " + typeName + " already exists.");
}
} else {
if (BuiltinTypeMap.getBuiltinType(typeName) != null) {
- throw new AlgebricksException("Cannot redefine builtin type " + typeName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Cannot redefine builtin type " + typeName + ".");
} else {
Map<TypeSignature, IAType> typeMap = TypeTranslator.computeTypes(mdTxnCtx,
stmtCreateType.getTypeDef(), stmtCreateType.getIdent().getValue(), dataverseName);
@@ -1188,9 +1213,10 @@
protected void handleDataverseDropStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc) throws Exception {
DataverseDropStatement stmtDelete = (DataverseDropStatement) stmt;
+ SourceLocation sourceLoc = stmtDelete.getSourceLocation();
String dataverseName = stmtDelete.getDataverseName().getValue();
if (dataverseName.equals(MetadataBuiltinEntities.DEFAULT_DATAVERSE_NAME)) {
- throw new HyracksDataException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
MetadataBuiltinEntities.DEFAULT_DATAVERSE_NAME + " dataverse can't be dropped");
}
@@ -1207,7 +1233,8 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("There is no dataverse with this name " + dataverseName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no dataverse with this name " + dataverseName + ".");
}
}
// # check whether any function in current dataverse is being used by others
@@ -1215,7 +1242,7 @@
MetadataManager.INSTANCE.getDataverseFunctions(mdTxnCtx, dataverseName);
for (Function function : functionsInDataverse) {
if (isFunctionUsed(mdTxnCtx, function.getSignature(), dataverseName)) {
- throw new MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE,
+ throw new MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE, sourceLoc,
function.getDataverseName() + "." + function.getName() + "@" + function.getArity());
}
}
@@ -1236,7 +1263,7 @@
mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
bActiveTxn = true;
metadataProvider.setMetadataTxnContext(mdTxnCtx);
- doDropFeed(hcc, metadataProvider, feedListener.getFeed());
+ doDropFeed(hcc, metadataProvider, feedListener.getFeed(), sourceLoc);
MetadataManager.INSTANCE.commitTransaction(metadataProvider.getMetadataTxnContext());
bActiveTxn = false;
}
@@ -1254,7 +1281,7 @@
List<Index> indexes =
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
for (Index index : indexes) {
- jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, dataset));
+ jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, dataset, sourceLoc));
}
} else {
// External dataset
@@ -1265,8 +1292,8 @@
jobsToExecute.add(
ExternalIndexingOperations.buildDropFilesIndexJobSpec(metadataProvider, dataset));
} else {
- jobsToExecute
- .add(IndexUtil.buildDropIndexJobSpec(indexes.get(k), metadataProvider, dataset));
+ jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(indexes.get(k), metadataProvider, dataset,
+ sourceLoc));
}
}
ExternalDatasetsRegistry.INSTANCE.removeDatasetInfo(dataset);
@@ -1353,19 +1380,21 @@
public void handleDatasetDropStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
DropDatasetStatement stmtDelete = (DropDatasetStatement) stmt;
+ SourceLocation sourceLoc = stmtDelete.getSourceLocation();
String dataverseName = getActiveDataverse(stmtDelete.getDataverseName());
String datasetName = stmtDelete.getDatasetName().getValue();
MetadataLockUtil.dropDatasetBegin(lockManager, metadataProvider.getLocks(), dataverseName,
dataverseName + "." + datasetName);
try {
- doDropDataset(dataverseName, datasetName, metadataProvider, stmtDelete.getIfExists(), hcc, true);
+ doDropDataset(dataverseName, datasetName, metadataProvider, stmtDelete.getIfExists(), hcc, true, sourceLoc);
} finally {
metadataProvider.getLocks().unlock();
}
}
public static void doDropDataset(String dataverseName, String datasetName, MetadataProvider metadataProvider,
- boolean ifExists, IHyracksClientConnection hcc, boolean dropCorrespondingNodeGroup) throws Exception {
+ boolean ifExists, IHyracksClientConnection hcc, boolean dropCorrespondingNodeGroup,
+ SourceLocation sourceLoc) throws Exception {
MutableObject<ProgressState> progress = new MutableObject<>(ProgressState.NO_PROGRESS);
MutableObject<MetadataTransactionContext> mdTxnCtx =
new MutableObject<>(MetadataManager.INSTANCE.beginTransaction());
@@ -1382,7 +1411,8 @@
throw new AsterixException(ErrorCode.NO_DATASET_WITH_NAME, dataverseName, datasetName);
}
}
- ds.drop(metadataProvider, mdTxnCtx, jobsToExecute, bActiveTxn, progress, hcc, dropCorrespondingNodeGroup);
+ ds.drop(metadataProvider, mdTxnCtx, jobsToExecute, bActiveTxn, progress, hcc, dropCorrespondingNodeGroup,
+ sourceLoc);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx.getValue());
} catch (Exception e) {
if (bActiveTxn.booleanValue()) {
@@ -1425,6 +1455,7 @@
IHyracksClientConnection hcc, IRequestParameters requestParameters) throws Exception {
IndexDropStatement stmtIndexDrop = (IndexDropStatement) stmt;
+ SourceLocation sourceLoc = stmtIndexDrop.getSourceLocation();
String datasetName = stmtIndexDrop.getDatasetName().getValue();
String dataverseName = getActiveDataverse(stmtIndexDrop.getDataverseName());
String indexName = stmtIndexDrop.getIndexName().getValue();
@@ -1440,7 +1471,7 @@
try {
Dataset ds = metadataProvider.findDataset(dataverseName, datasetName);
if (ds == null) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"There is no dataset with this name " + datasetName + " in dataverse " + dataverseName);
}
ActiveNotificationHandler activeEventHandler =
@@ -1456,7 +1487,7 @@
}
}
if (builder != null) {
- throw new CompilationException("Dataset" + datasetName
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Dataset" + datasetName
+ " is currently being fed into by the following active entities: " + builder.toString());
}
@@ -1467,12 +1498,13 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("There is no index with this name " + indexName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no index with this name " + indexName + ".");
}
}
- ensureNonPrimaryIndexDrop(index);
+ ensureNonPrimaryIndexDrop(index, sourceLoc);
// #. prepare a job to drop the index in NC.
- jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds));
+ jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds, sourceLoc));
// #. mark PendingDropOp on the existing index
MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
@@ -1507,14 +1539,16 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("There is no index with this name " + indexName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no index with this name " + indexName + ".");
}
} else if (ExternalIndexingOperations.isFileIndex(index)) {
- throw new AlgebricksException("Dropping a dataset's files index is not allowed.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Dropping a dataset's files index is not allowed.");
}
- ensureNonPrimaryIndexDrop(index);
+ ensureNonPrimaryIndexDrop(index, sourceLoc);
// #. prepare a job to drop the index in NC.
- jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds));
+ jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, ds, sourceLoc));
List<Index> datasetIndexes =
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
if (datasetIndexes.size() == 2) {
@@ -1616,8 +1650,8 @@
}
protected void handleTypeDropStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
-
TypeDropStatement stmtTypeDrop = (TypeDropStatement) stmt;
+ SourceLocation sourceLoc = stmtTypeDrop.getSourceLocation();
String dataverseName = getActiveDataverse(stmtTypeDrop.getDataverseName());
String typeName = stmtTypeDrop.getTypeName().getValue();
@@ -1629,7 +1663,8 @@
Datatype dt = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, typeName);
if (dt == null) {
if (!stmtTypeDrop.getIfExists()) {
- throw new AlgebricksException("There is no datatype with this name " + typeName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no datatype with this name " + typeName + ".");
}
} else {
MetadataManager.INSTANCE.dropDatatype(mdTxnCtx, dataverseName, typeName);
@@ -1645,6 +1680,7 @@
protected void handleNodegroupDropStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
NodeGroupDropStatement stmtDelete = (NodeGroupDropStatement) stmt;
+ SourceLocation sourceLoc = stmtDelete.getSourceLocation();
String nodegroupName = stmtDelete.getNodeGroupName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
metadataProvider.setMetadataTxnContext(mdTxnCtx);
@@ -1653,7 +1689,8 @@
NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodegroupName);
if (ng == null) {
if (!stmtDelete.getIfExists()) {
- throw new AlgebricksException("There is no nodegroup with this name " + nodegroupName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no nodegroup with this name " + nodegroupName + ".");
}
} else {
MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, nodegroupName, false);
@@ -1670,6 +1707,7 @@
protected void handleCreateFunctionStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
CreateFunctionStatement cfs = (CreateFunctionStatement) stmt;
+ SourceLocation sourceLoc = cfs.getSourceLocation();
FunctionSignature signature = cfs.getFunctionSignature();
String dataverse = getActiveDataverseName(signature.getNamespace());
signature.setNamespace(dataverse);
@@ -1681,12 +1719,14 @@
try {
Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverse);
if (dv == null) {
- throw new AlgebricksException("There is no dataverse with this name " + dataverse + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no dataverse with this name " + dataverse + ".");
}
//Check whether the function is use-able
metadataProvider.setDefaultDataverse(dv);
Query wrappedQuery = new Query(false);
+ wrappedQuery.setSourceLocation(sourceLoc);
wrappedQuery.setBody(cfs.getFunctionBodyExpression());
wrappedQuery.setTopLevel(false);
List<VarIdentifier> varIds = new ArrayList<>();
@@ -1738,6 +1778,7 @@
protected void handleFunctionDropStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
FunctionDropStatement stmtDropFunction = (FunctionDropStatement) stmt;
+ SourceLocation sourceLoc = stmtDropFunction.getSourceLocation();
FunctionSignature signature = stmtDropFunction.getFunctionSignature();
signature.setNamespace(getActiveDataverseName(signature.getNamespace()));
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -1747,9 +1788,9 @@
try {
Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
if (function == null && !stmtDropFunction.getIfExists()) {
- throw new AlgebricksException("Unknonw function " + signature);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Unknown function " + signature);
} else if (isFunctionUsed(mdTxnCtx, signature, null)) {
- throw new MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE, signature);
+ throw new MetadataException(ErrorCode.METADATA_DROP_FUCTION_IN_USE, sourceLoc, signature);
} else {
MetadataManager.INSTANCE.dropFunction(mdTxnCtx, signature);
}
@@ -1776,6 +1817,7 @@
CompiledLoadFromFileStatement cls =
new CompiledLoadFromFileStatement(dataverseName, loadStmt.getDatasetName().getValue(),
loadStmt.getAdapter(), loadStmt.getProperties(), loadStmt.dataIsAlreadySorted());
+ cls.setSourceLocation(stmt.getSourceLocation());
JobSpecification spec = apiFramework.compileQuery(hcc, metadataProvider, null, 0, null, sessionOutput, cls);
afterCompile();
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -1868,6 +1910,7 @@
CompiledDeleteStatement clfrqs = new CompiledDeleteStatement(stmtDelete.getVariableExpr(), dataverseName,
stmtDelete.getDatasetName().getValue(), stmtDelete.getCondition(), stmtDelete.getVarCounter(),
stmtDelete.getQuery());
+ clfrqs.setSourceLocation(stmt.getSourceLocation());
JobSpecification jobSpec = rewriteCompileQuery(hcc, metadataProvider, clfrqs.getQuery(), clfrqs);
afterCompile();
@@ -1905,6 +1948,7 @@
private JobSpecification rewriteCompileInsertUpsert(IClusterInfoCollector clusterInfoCollector,
MetadataProvider metadataProvider, InsertStatement insertUpsert)
throws RemoteException, AlgebricksException, ACIDException {
+ SourceLocation sourceLoc = insertUpsert.getSourceLocation();
// Insert/upsert statement rewriting (happens under the same ongoing metadata
// transaction)
@@ -1920,14 +1964,17 @@
clfrqs = new CompiledInsertStatement(dataverseName, datasetName, rewrittenInsertUpsert.getQuery(),
rewrittenInsertUpsert.getVarCounter(), rewrittenInsertUpsert.getVar(),
rewrittenInsertUpsert.getReturnExpression());
+ clfrqs.setSourceLocation(insertUpsert.getSourceLocation());
break;
case UPSERT:
clfrqs = new CompiledUpsertStatement(dataverseName, datasetName, rewrittenInsertUpsert.getQuery(),
rewrittenInsertUpsert.getVarCounter(), rewrittenInsertUpsert.getVar(),
rewrittenInsertUpsert.getReturnExpression());
+ clfrqs.setSourceLocation(insertUpsert.getSourceLocation());
break;
default:
- throw new AlgebricksException("Unsupported statement type " + rewrittenInsertUpsert.getKind());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unsupported statement type " + rewrittenInsertUpsert.getKind());
}
// Insert/upsert statement compilation (happens under the same ongoing metadata
// transaction)
@@ -1937,6 +1984,7 @@
protected void handleCreateFeedStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
CreateFeedStatement cfs = (CreateFeedStatement) stmt;
+ SourceLocation sourceLoc = cfs.getSourceLocation();
String dataverseName = getActiveDataverse(cfs.getDataverseName());
String feedName = cfs.getFeedName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -1951,7 +1999,8 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("A feed with this name " + feedName + " already exists.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "A feed with this name " + feedName + " already exists.");
}
}
feed = new Feed(dataverseName, feedName, cfs.getConfiguration());
@@ -1973,6 +2022,7 @@
FeedPolicyEntity newPolicy = null;
MetadataTransactionContext mdTxnCtx = null;
CreateFeedPolicyStatement cfps = (CreateFeedPolicyStatement) stmt;
+ SourceLocation sourceLoc = cfps.getSourceLocation();
dataverse = getActiveDataverse(null);
policy = cfps.getPolicyName();
MetadataLockUtil.createFeedPolicyBegin(lockManager, metadataProvider.getLocks(), dataverse,
@@ -1987,7 +2037,8 @@
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
} else {
- throw new AlgebricksException("A policy with this name " + policy + " already exists.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "A policy with this name " + policy + " already exists.");
}
}
boolean extendingExisting = cfps.getSourcePolicyName() != null;
@@ -1999,7 +2050,8 @@
sourceFeedPolicy = MetadataManager.INSTANCE.getFeedPolicy(metadataProvider.getMetadataTxnContext(),
MetadataConstants.METADATA_DATAVERSE_NAME, cfps.getSourcePolicyName());
if (sourceFeedPolicy == null) {
- throw new AlgebricksException("Unknown policy " + cfps.getSourcePolicyName());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown policy " + cfps.getSourcePolicyName());
}
}
Map<String, String> policyProperties = sourceFeedPolicy.getProperties();
@@ -2011,7 +2063,8 @@
InputStream stream = new FileInputStream(cfps.getSourcePolicyFile());
prop.load(stream);
} catch (Exception e) {
- throw new AlgebricksException("Unable to read policy file" + cfps.getSourcePolicyFile(), e);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unable to read policy file" + cfps.getSourcePolicyFile(), e);
}
Map<String, String> policyProperties = new HashMap<>();
prop.forEach((key, value) -> policyProperties.put((String) key, (String) value));
@@ -2030,6 +2083,7 @@
protected void handleDropFeedStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc) throws Exception {
FeedDropStatement stmtFeedDrop = (FeedDropStatement) stmt;
+ SourceLocation sourceLoc = stmtFeedDrop.getSourceLocation();
String dataverseName = getActiveDataverse(stmtFeedDrop.getDataverseName());
String feedName = stmtFeedDrop.getFeedName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -2040,12 +2094,13 @@
Feed feed = MetadataManager.INSTANCE.getFeed(mdTxnCtx, dataverseName, feedName);
if (feed == null) {
if (!stmtFeedDrop.getIfExists()) {
- throw new AlgebricksException("There is no feed with this name " + feedName + ".");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "There is no feed with this name " + feedName + ".");
}
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
}
- doDropFeed(hcc, metadataProvider, feed);
+ doDropFeed(hcc, metadataProvider, feed, sourceLoc);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
} catch (Exception e) {
abort(e, e, mdTxnCtx);
@@ -2055,8 +2110,8 @@
}
}
- protected void doDropFeed(IHyracksClientConnection hcc, MetadataProvider metadataProvider, Feed feed)
- throws Exception {
+ protected void doDropFeed(IHyracksClientConnection hcc, MetadataProvider metadataProvider, Feed feed,
+ SourceLocation sourceLoc) throws Exception {
MetadataTransactionContext mdTxnCtx = metadataProvider.getMetadataTxnContext();
EntityId feedId = feed.getFeedId();
ActiveNotificationHandler activeNotificationHandler =
@@ -2064,7 +2119,7 @@
ActiveEntityEventsListener listener =
(ActiveEntityEventsListener) activeNotificationHandler.getListener(feedId);
if (listener != null && listener.getState() != ActivityState.STOPPED) {
- throw new AlgebricksException("Feed " + feedId
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Feed " + feedId
+ " is currently active and connected to the following dataset(s) \n" + listener.toString());
} else if (listener != null) {
listener.unregister();
@@ -2082,6 +2137,7 @@
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
metadataProvider.setMetadataTxnContext(mdTxnCtx);
FeedPolicyDropStatement stmtFeedPolicyDrop = (FeedPolicyDropStatement) stmt;
+ SourceLocation sourceLoc = stmtFeedPolicyDrop.getSourceLocation();
String dataverseName = getActiveDataverse(stmtFeedPolicyDrop.getDataverseName());
String policyName = stmtFeedPolicyDrop.getPolicyName().getValue();
MetadataLockUtil.dropFeedPolicyBegin(lockManager, metadataProvider.getLocks(), dataverseName,
@@ -2090,7 +2146,8 @@
FeedPolicyEntity feedPolicy = MetadataManager.INSTANCE.getFeedPolicy(mdTxnCtx, dataverseName, policyName);
if (feedPolicy == null) {
if (!stmtFeedPolicyDrop.getIfExists()) {
- throw new AlgebricksException("Unknown policy " + policyName + " in dataverse " + dataverseName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Unknown policy " + policyName + " in dataverse " + dataverseName);
}
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
return;
@@ -2108,6 +2165,7 @@
private void handleStartFeedStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc) throws Exception {
StartFeedStatement sfs = (StartFeedStatement) stmt;
+ SourceLocation sourceLoc = sfs.getSourceLocation();
String dataverseName = getActiveDataverse(sfs.getDataverseName());
String feedName = sfs.getFeedName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -2124,7 +2182,7 @@
List<FeedConnection> feedConnections = MetadataManager.INSTANCE
.getFeedConections(metadataProvider.getMetadataTxnContext(), dataverseName, feedName);
if (feedConnections.isEmpty()) {
- throw new CompilationException(ErrorCode.FEED_START_FEED_WITHOUT_CONNECTION, feedName);
+ throw new CompilationException(ErrorCode.FEED_START_FEED_WITHOUT_CONNECTION, sourceLoc, feedName);
}
for (FeedConnection feedConnection : feedConnections) {
// what if the dataset is in a different dataverse
@@ -2161,6 +2219,7 @@
private void handleStopFeedStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
StopFeedStatement sfst = (StopFeedStatement) stmt;
+ SourceLocation sourceLoc = sfst.getSourceLocation();
String dataverseName = getActiveDataverse(sfst.getDataverseName());
String feedName = sfst.getFeedName().getValue();
EntityId entityId = new EntityId(Feed.EXTENSION_NAME, dataverseName, feedName);
@@ -2169,7 +2228,8 @@
// Obtain runtime info from ActiveListener
ActiveEntityEventsListener listener = (ActiveEntityEventsListener) activeEventHandler.getListener(entityId);
if (listener == null) {
- throw new AlgebricksException("Feed " + feedName + " is not started.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Feed " + feedName + " is not started.");
}
MetadataLockUtil.stopFeedBegin(lockManager, metadataProvider.getLocks(), entityId.getDataverse(),
entityId.getEntityName());
@@ -2183,6 +2243,7 @@
private void handleConnectFeedStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
FeedConnection fc;
ConnectFeedStatement cfs = (ConnectFeedStatement) stmt;
+ SourceLocation sourceLoc = cfs.getSourceLocation();
String dataverseName = getActiveDataverse(cfs.getDataverseName());
String feedName = cfs.getFeedName();
String datasetName = cfs.getDatasetName().getValue();
@@ -2204,21 +2265,23 @@
metadataProvider.getMetadataTxnContext());
FeedEventsListener listener = (FeedEventsListener) activeEventHandler.getListener(feed.getFeedId());
if (listener != null && listener.isActive()) {
- throw new CompilationException(ErrorCode.FEED_CHANGE_FEED_CONNECTIVITY_ON_ALIVE_FEED, feedName);
+ throw new CompilationException(ErrorCode.FEED_CHANGE_FEED_CONNECTIVITY_ON_ALIVE_FEED, sourceLoc,
+ feedName);
}
ARecordType outputType = FeedMetadataUtil.getOutputType(feed,
feed.getConfiguration().get(ExternalDataConstants.KEY_TYPE_NAME));
List<FunctionSignature> appliedFunctions = cfs.getAppliedFunctions();
for (FunctionSignature func : appliedFunctions) {
if (MetadataManager.INSTANCE.getFunction(mdTxnCtx, func) == null) {
- throw new CompilationException(ErrorCode.FEED_CONNECT_FEED_APPLIED_INVALID_FUNCTION,
+ throw new CompilationException(ErrorCode.FEED_CONNECT_FEED_APPLIED_INVALID_FUNCTION, sourceLoc,
func.getName());
}
}
fc = MetadataManager.INSTANCE.getFeedConnection(metadataProvider.getMetadataTxnContext(), dataverseName,
feedName, datasetName);
if (fc != null) {
- throw new AlgebricksException("Feed" + feedName + " is already connected dataset " + datasetName);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Feed" + feedName + " is already connected dataset " + datasetName);
}
fc = new FeedConnection(dataverseName, feedName, datasetName, appliedFunctions, policyName, whereClauseBody,
outputType.getTypeName());
@@ -2238,6 +2301,7 @@
protected void handleDisconnectFeedStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
DisconnectFeedStatement cfs = (DisconnectFeedStatement) stmt;
+ SourceLocation sourceLoc = cfs.getSourceLocation();
String dataverseName = getActiveDataverse(cfs.getDataverseName());
String datasetName = cfs.getDatasetName().getValue();
String feedName = cfs.getFeedName().getValue();
@@ -2252,7 +2316,8 @@
ActiveEntityEventsListener listener = (ActiveEntityEventsListener) activeEventHandler
.getListener(new EntityId(Feed.EXTENSION_NAME, dataverseName, feedName));
if (listener != null && listener.isActive()) {
- throw new CompilationException(ErrorCode.FEED_CHANGE_FEED_CONNECTIVITY_ON_ALIVE_FEED, feedName);
+ throw new CompilationException(ErrorCode.FEED_CHANGE_FEED_CONNECTIVITY_ON_ALIVE_FEED, sourceLoc,
+ feedName);
}
FeedMetadataUtil.validateIfDatasetExists(metadataProvider, dataverseName, cfs.getDatasetName().getValue());
FeedMetadataUtil.validateIfFeedExists(dataverseName, cfs.getFeedName().getValue(), mdTxnCtx);
@@ -2260,11 +2325,12 @@
dataverseName, feedName, datasetName);
Dataset ds = metadataProvider.findDataset(dataverseName, datasetName);
if (ds == null) {
- throw new CompilationException("Dataset " + dataverseName + "." + datasetName + " doesn't exist");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "Dataset " + dataverseName + "." + datasetName + " doesn't exist");
}
if (fc == null) {
- throw new CompilationException("Feed " + feedName + " is currently not connected to "
- + cfs.getDatasetName().getValue() + ". Invalid operation!");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "Feed " + feedName
+ + " is currently not connected to " + cfs.getDatasetName().getValue() + ". Invalid operation!");
}
MetadataManager.INSTANCE.dropFeedConnection(mdTxnCtx, dataverseName, feedName, datasetName);
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -2282,6 +2348,7 @@
protected void handleCompactStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc) throws Exception {
CompactStatement compactStatement = (CompactStatement) stmt;
+ SourceLocation sourceLoc = compactStatement.getSourceLocation();
String dataverseName = getActiveDataverse(compactStatement.getDataverseName());
String datasetName = compactStatement.getDatasetName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -2293,13 +2360,13 @@
try {
Dataset ds = metadataProvider.findDataset(dataverseName, datasetName);
if (ds == null) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"There is no dataset with this name " + datasetName + " in dataverse " + dataverseName + ".");
}
// Prepare jobs to compact the datatset and its indexes
List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
if (indexes.isEmpty()) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Cannot compact the extrenal dataset " + datasetName + " because it has no indexes");
}
Dataverse dataverse =
@@ -2309,11 +2376,12 @@
if (ds.getDatasetType() == DatasetType.INTERNAL) {
for (Index index : indexes) {
if (index.isSecondaryIndex()) {
- jobsToExecute.add(IndexUtil.buildSecondaryIndexCompactJobSpec(ds, index, metadataProvider));
+ jobsToExecute.add(
+ IndexUtil.buildSecondaryIndexCompactJobSpec(ds, index, metadataProvider, sourceLoc));
}
}
} else {
- prepareCompactJobsForExternalDataset(indexes, ds, jobsToExecute, metadataProvider);
+ prepareCompactJobsForExternalDataset(indexes, ds, jobsToExecute, metadataProvider, sourceLoc);
}
MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
bActiveTxn = false;
@@ -2334,9 +2402,11 @@
}
protected void prepareCompactJobsForExternalDataset(List<Index> indexes, Dataset ds,
- List<JobSpecification> jobsToExecute, MetadataProvider metadataProvider) throws AlgebricksException {
+ List<JobSpecification> jobsToExecute, MetadataProvider metadataProvider, SourceLocation sourceLoc)
+ throws AlgebricksException {
for (int j = 0; j < indexes.size(); j++) {
- jobsToExecute.add(IndexUtil.buildSecondaryIndexCompactJobSpec(ds, indexes.get(j), metadataProvider));
+ jobsToExecute
+ .add(IndexUtil.buildSecondaryIndexCompactJobSpec(ds, indexes.get(j), metadataProvider, sourceLoc));
}
}
@@ -2528,6 +2598,7 @@
protected void handleCreateNodeGroupStatement(MetadataProvider metadataProvider, Statement stmt) throws Exception {
NodegroupDecl stmtCreateNodegroup = (NodegroupDecl) stmt;
+ SourceLocation sourceLoc = stmtCreateNodegroup.getSourceLocation();
String ngName = stmtCreateNodegroup.getNodegroupName().getValue();
MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
@@ -2537,7 +2608,8 @@
NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, ngName);
if (ng != null) {
if (!stmtCreateNodegroup.getIfNotExists()) {
- throw new AlgebricksException("A nodegroup with this name " + ngName + " already exists.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ "A nodegroup with this name " + ngName + " already exists.");
}
} else {
List<Identifier> ncIdentifiers = stmtCreateNodegroup.getNodeControllerNames();
@@ -2559,6 +2631,7 @@
protected void handleExternalDatasetRefreshStatement(MetadataProvider metadataProvider, Statement stmt,
IHyracksClientConnection hcc) throws Exception {
RefreshExternalDatasetStatement stmtRefresh = (RefreshExternalDatasetStatement) stmt;
+ SourceLocation sourceLoc = stmtRefresh.getSourceLocation();
String dataverseName = getActiveDataverse(stmtRefresh.getDataverseName());
String datasetName = stmtRefresh.getDatasetName().getValue();
TransactionState transactionState = TransactionState.COMMIT;
@@ -2581,19 +2654,19 @@
ds = metadataProvider.findDataset(dataverseName, datasetName);
// Dataset exists ?
if (ds == null) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"There is no dataset with this name " + datasetName + " in dataverse " + dataverseName);
}
// Dataset external ?
if (ds.getDatasetType() != DatasetType.EXTERNAL) {
- throw new AlgebricksException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"dataset " + datasetName + " in dataverse " + dataverseName + " is not an external dataset");
}
// Dataset has indexes ?
indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
if (indexes.isEmpty()) {
- throw new AlgebricksException("External dataset " + datasetName + " in dataverse " + dataverseName
- + " doesn't have any index");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc, "External dataset " + datasetName
+ + " in dataverse " + dataverseName + " doesn't have any index");
}
// Record transaction time
@@ -2653,7 +2726,7 @@
for (Index index : indexes) {
if (!ExternalIndexingOperations.isFileIndex(index)) {
spec = ExternalIndexingOperations.buildIndexUpdateOp(ds, index, metadataFiles, addedFiles,
- appendedFiles, metadataProvider);
+ appendedFiles, metadataProvider, sourceLoc);
// run the files update job
runJob(hcc, spec);
}
@@ -2825,9 +2898,10 @@
rewriter.rewrite(stmt);
}
- private void ensureNonPrimaryIndexDrop(Index index) throws AlgebricksException {
+ private void ensureNonPrimaryIndexDrop(Index index, SourceLocation sourceLoc) throws AlgebricksException {
if (index.isPrimaryIndex()) {
- throw new MetadataException(ErrorCode.CANNOT_DROP_INDEX, index.getIndexName(), index.getDatasetName());
+ throw new MetadataException(ErrorCode.CANNOT_DROP_INDEX, sourceLoc, index.getIndexName(),
+ index.getDatasetName());
}
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
index 702b6b4..b74d739 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java
@@ -355,7 +355,7 @@
List<Index> indexes = metadataProvider.getDatasetIndexes(dataset.getDataverseName(), dataset.getDatasetName());
for (Index index : indexes) {
jobs.add(IndexUtil.buildDropIndexJobSpec(index, metadataProvider, dataset,
- EnumSet.of(DropOption.IF_EXISTS, DropOption.WAIT_ON_IN_USE)));
+ EnumSet.of(DropOption.IF_EXISTS, DropOption.WAIT_ON_IN_USE), null));
}
for (JobSpecification jobSpec : jobs) {
JobUtils.runJob(hcc, jobSpec, true);
@@ -371,12 +371,12 @@
}
// Creates the secondary index.
JobSpecification indexCreationJobSpec =
- IndexUtil.buildSecondaryIndexCreationJobSpec(target, index, metadataProvider);
+ IndexUtil.buildSecondaryIndexCreationJobSpec(target, index, metadataProvider, null);
JobUtils.runJob(hcc, indexCreationJobSpec, true);
// Loads the secondary index.
JobSpecification indexLoadingJobSpec =
- IndexUtil.buildSecondaryIndexLoadingJobSpec(target, index, metadataProvider);
+ IndexUtil.buildSecondaryIndexLoadingJobSpec(target, index, metadataProvider, null);
JobUtils.runJob(hcc, indexLoadingJobSpec, true);
}
}
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java
index 5be349e..c1ccda7 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/app/bootstrap/TestNodeController.java
@@ -252,7 +252,7 @@
LSMInsertDeleteOperatorNodePushable insertOp =
new LSMInsertDeleteOperatorNodePushable(ctx, ctx.getTaskAttemptId().getTaskId().getPartition(),
primaryIndexInfo.primaryIndexInsertFieldsPermutations, recordDesc, op, true,
- indexHelperFactory, modOpCallbackFactory, null);
+ indexHelperFactory, modOpCallbackFactory, null, null);
// For now, this assumes a single secondary index. recordDesc is always <pk-record-meta>
// for the index, we will have to create an assign operator that extract the sk
@@ -267,8 +267,9 @@
? indicators.get(i).intValue() == Index.RECORD_INDICATOR ? recordType : metaType
: recordType;
int pos = skNames.get(i).size() > 1 ? -1 : sourceType.getFieldIndex(skNames.get(i).get(0));
- secondaryFieldAccessEvalFactories[i] = mdProvider.getDataFormat().getFieldAccessEvaluatorFactory(
- mdProvider.getFunctionManager(), sourceType, secondaryIndex.getKeyFieldNames().get(i), pos);
+ secondaryFieldAccessEvalFactories[i] =
+ mdProvider.getDataFormat().getFieldAccessEvaluatorFactory(mdProvider.getFunctionManager(),
+ sourceType, secondaryIndex.getKeyFieldNames().get(i), pos, null);
}
// outColumns are computed inside the assign runtime
int[] outColumns = new int[skNames.size()];
@@ -300,7 +301,7 @@
LSMInsertDeleteOperatorNodePushable secondaryInsertOp =
new LSMInsertDeleteOperatorNodePushable(ctx, ctx.getTaskAttemptId().getTaskId().getPartition(),
secondaryIndexInfo.insertFieldsPermutations, secondaryIndexInfo.rDesc, op, false,
- secondaryIndexHelperFactory, secondaryModCallbackFactory, null);
+ secondaryIndexHelperFactory, secondaryModCallbackFactory, null, null);
assignOp.setOutputFrameWriter(0, secondaryInsertOp, secondaryIndexInfo.rDesc);
IPushRuntime commitOp =
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java
index a1e70dc..942b192 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java
@@ -100,7 +100,8 @@
}
@Override
- protected boolean isUnExpected(Exception e, List<String> expectedErrors, int numOfErrors, MutableInt queryCount) {
+ protected boolean isUnExpected(Exception e, List<String> expectedErrors, int numOfErrors, MutableInt queryCount,
+ boolean expectedSourceLoc) {
// Get the expected exception
for (Iterator<String> iter = expectedErrors.iterator(); iter.hasNext();) {
String expectedError = iter.next();
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
index f204340..4697a2a 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/TestExecutor.java
@@ -1569,7 +1569,8 @@
}
} catch (Exception e) {
numOfErrors++;
- boolean unexpected = isUnExpected(e, expectedErrors, numOfErrors, queryCount);
+ boolean unexpected = isUnExpected(e, expectedErrors, numOfErrors, queryCount,
+ testCaseCtx.isSourceLocationExpected(cUnit));
if (unexpected) {
LOGGER.error("testFile {} raised an unexpected exception", testFile, e);
if (failedGroup != null) {
@@ -1615,22 +1616,41 @@
throw new Exception("Test \"" + testFile + "\" FAILED!", e);
}
- protected boolean isUnExpected(Exception e, List<String> expectedErrors, int numOfErrors, MutableInt queryCount) {
+ protected boolean isUnExpected(Exception e, List<String> expectedErrors, int numOfErrors, MutableInt queryCount,
+ boolean expectedSourceLoc) {
String expectedError = null;
if (expectedErrors.size() < numOfErrors) {
return true;
} else {
// Get the expected exception
expectedError = expectedErrors.get(numOfErrors - 1);
- if (e.toString().contains(expectedError)) {
- return false;
- } else {
+ String actualError = e.toString();
+ if (!actualError.contains(expectedError)) {
LOGGER.error("Expected to find the following in error text: +++++{}+++++", expectedError);
return true;
}
+ if (expectedSourceLoc && !containsSourceLocation(actualError)) {
+ LOGGER.error("Expected to find source location \"{}, {}\" in error text: +++++{}+++++",
+ ERR_MSG_SRC_LOC_LINE_REGEX, ERR_MSG_SRC_LOC_COLUMN_REGEX, actualError);
+ return true;
+ }
+ return false;
}
}
+ private static final String ERR_MSG_SRC_LOC_LINE_REGEX = "in line \\d+";
+ private static final Pattern ERR_MSG_SRC_LOC_LINE_PATTERN =
+ Pattern.compile(ERR_MSG_SRC_LOC_LINE_REGEX, Pattern.CASE_INSENSITIVE);
+
+ private static final String ERR_MSG_SRC_LOC_COLUMN_REGEX = "at column \\d+";
+ private static final Pattern ERR_MSG_SRC_LOC_COLUMN_PATTERN =
+ Pattern.compile(ERR_MSG_SRC_LOC_COLUMN_REGEX, Pattern.CASE_INSENSITIVE);
+
+ private boolean containsSourceLocation(String errorMessage) {
+ Matcher lineMatcher = ERR_MSG_SRC_LOC_LINE_PATTERN.matcher(errorMessage);
+ return lineMatcher.find() && ERR_MSG_SRC_LOC_COLUMN_PATTERN.matcher(errorMessage).find(lineMatcher.end());
+ }
+
private static File getTestCaseQueryBeforeCrashFile(String actualPath, TestCaseContext testCaseCtx,
CompilationUnit cUnit) {
return new File(
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java
index bcf68b5..4b4595a 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/dataflow/TestDataset.java
@@ -33,6 +33,7 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
@@ -56,7 +57,7 @@
@Override
public IPushRuntimeFactory getCommitRuntimeFactory(MetadataProvider metadataProvider,
int[] primaryKeyFieldPermutation, boolean isSink) throws AlgebricksException {
- return new IPushRuntimeFactory() {
+ return new AbstractPushRuntimeFactory() {
@Override
public IPushRuntime[] createPushRuntime(IHyracksTaskContext ctx) throws HyracksDataException {
return new IPushRuntime[] { new CommitRuntime(ctx, new TxnId(ctx.getJobletContext().getJobId().getId()),
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java
index 0affaf2..726a1bf 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/ddl/SecondaryBTreeOperationsHelperTest.java
@@ -89,7 +89,7 @@
index = metadataProvider.getIndex(MetadataBuiltinEntities.DEFAULT_DATAVERSE_NAME, datasetName,
primaryIndexName);
Assert.assertNotNull(index);
- jobSpecification = IndexUtil.buildSecondaryIndexLoadingJobSpec(dataset, index, metadataProvider);
+ jobSpecification = IndexUtil.buildSecondaryIndexLoadingJobSpec(dataset, index, metadataProvider, null);
jobSpecification.getOperatorMap().values().forEach(iOperatorDescriptor -> {
Assert.assertFalse(iOperatorDescriptor instanceof AbstractSorterOperatorDescriptor);
});
@@ -99,7 +99,7 @@
index = metadataProvider.getIndex(MetadataBuiltinEntities.DEFAULT_DATAVERSE_NAME, datasetName,
secondaryIndexName);
Assert.assertNotNull(index);
- jobSpecification = IndexUtil.buildSecondaryIndexLoadingJobSpec(dataset, index, metadataProvider);
+ jobSpecification = IndexUtil.buildSecondaryIndexLoadingJobSpec(dataset, index, metadataProvider, null);
final long numOfSortOperators = jobSpecification.getOperatorMap().values().stream()
.filter(op -> op instanceof AbstractSorterOperatorDescriptor).count();
Assert.assertTrue(numOfSortOperators != 0);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
index 1ae94ec..e5a1c1a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
@@ -53,6 +53,7 @@
<compilation-unit name="async-exhausted-result">
<output-dir compare="Text">async-exhausted-result</output-dir>
<expected-error>HYR0093</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
</test-group>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml
index 507e276..cb83d4b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/objects/ObjectsQueries.xml
@@ -141,18 +141,21 @@
<compilation-unit name="closed-closed-fieldname-conflict_issue173">
<output-dir compare="Text">closed-closed-fieldname-conflict_issue173</output-dir>
<expected-error>Closed fields 0 and 1 have the same field name "name"</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="objects">
<compilation-unit name="open-closed-fieldname-conflict_issue173">
<output-dir compare="Text">open-closed-fieldname-conflict_issue173</output-dir>
<expected-error>Open field "name" has the same field name as closed field at index 0</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="objects">
<compilation-unit name="open-open-fieldname-conflict_issue173">
<output-dir compare="Text">open-open-fieldname-conflict_issue173</output-dir>
<expected-error>Open fields 0 and 1 have the same field name "name"</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
</test-group>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index f972050..c1d1db5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -21,7 +21,7 @@
<!ENTITY AsyncDeferredQueries SYSTEM "queries_sqlpp/async-deferred/AsyncDeferredQueries.xml">
<!ENTITY GeoQueries SYSTEM "queries_sqlpp/geojson/GeoJSONQueries.xml">
]>
-<test-suite xmlns="urn:xml.testframework.asterix.apache.org" ResultOffsetPath="results" QueryOffsetPath="queries_sqlpp" QueryFileExtension=".sqlpp">
+<test-suite xmlns="urn:xml.testframework.asterix.apache.org" ResultOffsetPath="results" QueryOffsetPath="queries_sqlpp" QueryFileExtension=".sqlpp" SourceLocation="true">
&AsyncDeferredQueries;
<test-group name="flwor">
<test-case FilePath="flwor">
@@ -1853,6 +1853,7 @@
<compilation-unit name="insert-duplicated-keys">
<output-dir compare="Text">insert-duplicated-keys</output-dir>
<expected-error>Inserting duplicate keys into the primary storage</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="dml">
@@ -1901,13 +1902,13 @@
<test-case FilePath="dml">
<compilation-unit name="load-with-autogenerated-pk_adm_02">
<output-dir compare="Text">load-with-autogenerated-pk_adm_02</output-dir>
- <expected-error>Parse error at (0, 5): ASX3058: This record is closed, you can not add extra fields! new field name: id</expected-error>
+ <expected-error>ASX3058: This record is closed, you can not add extra fields! new field name: id</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="dml">
<compilation-unit name="load-with-autogenerated-pk_adm_03">
<output-dir compare="Text">load-with-autogenerated-pk_adm_03</output-dir>
- <expected-error>Parse error at (0, 5): ASX3058: This record is closed, you can not add extra fields! new field name: id</expected-error>
+ <expected-error>ASX3058: This record is closed, you can not add extra fields! new field name: id</expected-error>
</compilation-unit>
</test-case>
<test-case FilePath="dml">
@@ -5426,6 +5427,7 @@
<compilation-unit name="query-issue410">
<output-dir compare="Text">query-issue410</output-dir>
<expected-error>Field type double can't be promoted to type string</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="open-closed">
@@ -8142,36 +8144,42 @@
<compilation-unit name="drop-dependency-1">
<output-dir compare="Text">drop-dependency-1</output-dir>
<expected-error>Cannot drop dataverse. Function B.f0@2 depends on function C.f1@2</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="drop-dependency-2">
<output-dir compare="Text">drop-dependency-2</output-dir>
<expected-error>Cannot drop dataverse. Function B.f2@2 depends on dataset C.TweetMessages</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="drop-dependency-3">
<output-dir compare="Text">drop-dependency-3</output-dir>
<expected-error>Cannot drop function C.f1@2 being used by function B.f0@2</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="drop-dependency-4">
<output-dir compare="Text">drop-dependency-4</output-dir>
<expected-error>Cannot drop dataset C.TweetMessages being used by function B.f2@2</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="drop-dependency-5">
<output-dir compare="Text">drop-dependency-5</output-dir>
<expected-error>Cannot drop function C.f1@2 being used by function C.f0@2</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
<compilation-unit name="drop-dependency-6">
<output-dir compare="Text">drop-dependency-6</output-dir>
<expected-error>Cannot drop dataset C.TweetMessages being used by function C.f2@2</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="user-defined-functions">
@@ -8416,18 +8424,21 @@
<compilation-unit name="csv_05">
<output-dir compare="Text">csv_05</output-dir>
<expected-error>At record: 1, field#: 4 - a quote enclosing a field needs to be placed in the beginning of that field</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="load">
<compilation-unit name="csv_06">
<output-dir compare="Text">csv_06</output-dir>
<expected-error>At record: 1, field#: 3 - a quote enclosing a field needs to be placed in the beginning of that field</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="load">
<compilation-unit name="csv_07">
<output-dir compare="Text">csv_07</output-dir>
<expected-error>At record: 1, field#: 3 - A quote enclosing a field needs to be followed by the delimiter</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="load">
@@ -8449,12 +8460,14 @@
<compilation-unit name="issue14_query">
<output-dir compare="Text">issue14_query</output-dir>
<expected-error>Unspecified parameter: format</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="load">
<compilation-unit name="issue315_query">
<output-dir compare="Text">none</output-dir>
<expected-error>Invalid path</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="load">
@@ -8498,6 +8511,7 @@
<compilation-unit name="duplicate-key-error">
<output-dir compare="Text">none</output-dir>
<expected-error>Loading duplicate keys into the primary storage</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="load">
@@ -8660,6 +8674,7 @@
<output-dir compare="Text">twitter-feed</output-dir>
<expected-error>Twitter4J library not found!</expected-error>
<expected-error>Unknown source feed: TwitterFeed</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="feeds">
@@ -8667,6 +8682,7 @@
<output-dir compare="Text">revised-tweet-parser</output-dir>
<expected-error>Twitter4J library not found!</expected-error>
<expected-error>Unknown source feed: TwitterFeed</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="feeds">
@@ -8713,12 +8729,14 @@
<compilation-unit name="start-started-feed">
<output-dir compare="Text">start-started-feed</output-dir>
<expected-error>experiments.TweetFeed(Feed) is already started</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="feeds">
<compilation-unit name="stop-stopped-feed">
<output-dir compare="Text">stop-stopped-feed</output-dir>
<expected-error>new_experiments.TweetFeed(Feed) cannot be stopped because its state is STOPPED</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="feeds">
@@ -9724,6 +9742,7 @@
<compilation-unit name="numeric-tinyint-overflow">
<output-dir compare="Text">numeric-tinyint</output-dir>
<expected-error>Numeric value (1000) out of range of Java byte</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
@@ -9745,12 +9764,14 @@
<compilation-unit name="duplicate-fields">
<output-dir compare="Text">duplicate-fields</output-dir>
<expected-error>Duplicate field 'field'</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="malformed-json">
<output-dir compare="Text">malformed-json</output-dir>
<expected-error>Unexpected character ('}' (code 125)): was expecting double-quote to start field name</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
@@ -9762,12 +9783,14 @@
<compilation-unit name="nonoptional-missing">
<output-dir compare="Text">nonoptional-missing</output-dir>
<expected-error>ASX3075: Closed field missing_value has null value</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="nonoptional-null">
<output-dir compare="Text">nonoptional-null</output-dir>
<expected-error>ASX3075: Closed field null_value has null value</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
@@ -9779,18 +9802,21 @@
<compilation-unit name="spatial-line-3-points">
<output-dir compare="Text">spatial-line-3-points</output-dir>
<expected-error>Line must have 4 coordinates</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="spatial-polygon-unclosed">
<output-dir compare="Text">spatial-polygon-unclosed</output-dir>
<expected-error>Unclosed polygon is not supported</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="spatial-polygon-with-hole">
<output-dir compare="Text">spatial-polygon-with-hole</output-dir>
<expected-error>Only simple geometries are supported (Point, LineString and Polygon without holes)</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
@@ -9802,48 +9828,56 @@
<compilation-unit name="type-mismatch">
<output-dir compare="Text">type-mismatch</output-dir>
<expected-error>ASX3054: Mismatch Type, expecting a value of type string</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-circle">
<output-dir compare="Text">unsupported-type-circle</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type circle</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-daytimeduration">
<output-dir compare="Text">unsupported-type-daytimeduration</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type daytimeduration</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-duration">
<output-dir compare="Text">unsupported-type-duration</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type duration</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-interval">
<output-dir compare="Text">unsupported-type-interval</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type interval</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-multiset">
<output-dir compare="Text">unsupported-type-multiset</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type multiset</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-point3d">
<output-dir compare="Text">unsupported-type-point3d</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type point3d</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
<test-case FilePath="json-parser">
<compilation-unit name="unsupported-type-rectangle">
<output-dir compare="Text">unsupported-type-rectangle</output-dir>
<expected-error>ASX0004: Unsupported type: org.apache.asterix.external.parser.factory.JSONDataParserFactory cannot process input type rectangle</expected-error>
+ <source-location>false</source-location>
</compilation-unit>
</test-case>
</test-group>
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
index b3936de..1401c0a 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.ErrorCode;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
@@ -48,6 +49,7 @@
public static final String KEY_INDEX = "Index";
private final boolean isPrimary;
+ private final SourceLocation sourceLoc;
// This class has both lsmIndex and index (in super class) pointing to the same object
private AbstractLSMIndex lsmIndex;
private int i = 0;
@@ -69,10 +71,11 @@
public LSMInsertDeleteOperatorNodePushable(IHyracksTaskContext ctx, int partition, int[] fieldPermutation,
RecordDescriptor inputRecDesc, IndexOperation op, boolean isPrimary,
IIndexDataflowHelperFactory indexHelperFactory, IModificationOperationCallbackFactory modCallbackFactory,
- ITupleFilterFactory tupleFilterFactory) throws HyracksDataException {
+ ITupleFilterFactory tupleFilterFactory, SourceLocation sourceLoc) throws HyracksDataException {
super(ctx, partition, indexHelperFactory, fieldPermutation, inputRecDesc, op, modCallbackFactory,
tupleFilterFactory);
this.isPrimary = isPrimary;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -138,8 +141,8 @@
}
break;
default: {
- throw HyracksDataException.create(ErrorCode.INVALID_OPERATOR_OPERATION, op.toString(),
- LSMInsertDeleteOperatorNodePushable.class.getSimpleName());
+ throw HyracksDataException.create(ErrorCode.INVALID_OPERATOR_OPERATION, sourceLoc,
+ op.toString(), LSMInsertDeleteOperatorNodePushable.class.getSimpleName());
}
}
}
@@ -147,10 +150,10 @@
if (e.getErrorCode() == ErrorCode.INVALID_OPERATOR_OPERATION) {
throw e;
} else {
- throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, i);
+ throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, sourceLoc, i);
}
} catch (Exception e) {
- throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, i);
+ throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, sourceLoc, i);
}
writeBuffer.ensureFrameSize(buffer.capacity());
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMTreeInsertDeleteOperatorDescriptor.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMTreeInsertDeleteOperatorDescriptor.java
index 6d58f6d..45661e4 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMTreeInsertDeleteOperatorDescriptor.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMTreeInsertDeleteOperatorDescriptor.java
@@ -48,7 +48,7 @@
IRecordDescriptorProvider recordDescProvider, int partition, int nPartitions) throws HyracksDataException {
RecordDescriptor inputRecDesc = recordDescProvider.getInputRecordDescriptor(getActivityId(), 0);
return new LSMInsertDeleteOperatorNodePushable(ctx, partition, fieldPermutation, inputRecDesc, op, isPrimary,
- indexHelperFactory, modCallbackFactory, tupleFilterFactory);
+ indexHelperFactory, modCallbackFactory, tupleFilterFactory, sourceLoc);
}
public boolean isPrimary() {
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java
index dc884f1..a834a06 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java
@@ -21,6 +21,7 @@
import java.io.Serializable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class AsterixException extends AlgebricksException {
private static final long serialVersionUID = 1L;
@@ -33,9 +34,12 @@
super(message);
}
+ public AsterixException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc, params);
+ }
+
public AsterixException(int errorCode, Serializable... params) {
super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
-
}
/**
@@ -47,6 +51,11 @@
super(cause);
}
+ public AsterixException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+ super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc, params);
+ addSuppressed(cause);
+ }
+
public AsterixException(int errorCode, Throwable cause, Serializable... params) {
super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
addSuppressed(cause);
@@ -60,6 +69,10 @@
super(message, cause);
}
+ public static AsterixException create(int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ return new AsterixException(errorCode, sourceLoc, params);
+ }
+
public static AsterixException create(int errorCode, Serializable... params) {
return new AsterixException(errorCode, params);
}
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java
index 693b1c0..0de6b72 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java
@@ -22,14 +22,23 @@
import java.io.Serializable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class CompilationException extends AlgebricksException {
private static final long serialVersionUID = 1L;
+ public CompilationException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc, params);
+ }
+
public CompilationException(int errorCode, Serializable... params) {
super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
}
+ public CompilationException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+ super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, sourceLoc, params);
+ }
+
public CompilationException(int errorCode, Throwable cause, Serializable... params) {
super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, params);
}
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 bd84832..55c70f2 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
@@ -150,6 +150,16 @@
public static final int CANNOT_FIND_NON_MISSING_SELECT_OPERATOR = 1067;
public static final int CANNOT_GET_CONDITIONAL_SPLIT_KEY_VARIABLE = 1068;
public static final int CANNOT_DROP_INDEX = 1069;
+ public static final int METADATA_ERROR = 1070;
+ public static final int DATAVERSE_EXISTS = 1071;
+ public static final int DATASET_EXISTS = 1072;
+ public static final int UNDEFINED_IDENTIFIER = 1073;
+ public static final int AMBIGUOUS_IDENTIFIER = 1074;
+ public static final int FORBIDDEN_SCOPE = 1075;
+ public static final int UNKNOWN_DATASET = 1076;
+ public static final int UNKNOWN_DATASET_IN_DATAVERSE = 1077;
+ public static final int COMPILATION_UNEXPECTED_OPERATOR = 1078;
+ public static final int COMPILATION_ERROR = 1079;
// Feed errors
public static final int DATAFLOW_ILLEGAL_STATE = 3001;
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java
index 085f465..a735c81 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java
@@ -21,6 +21,7 @@
import java.io.Serializable;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -62,10 +63,18 @@
super(errorCode, params);
}
+ public MetadataException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ super(errorCode, sourceLoc, params);
+ }
+
public MetadataException(int errorCode, Throwable cause, Serializable... params) {
super(errorCode, cause, params);
}
+ public MetadataException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+ super(errorCode, cause, sourceLoc, params);
+ }
+
public static MetadataException create(Throwable cause) {
if (cause instanceof MetadataException || cause == null) {
return (MetadataException) cause;
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
index 85bfaa5..1c6763f 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
@@ -22,6 +22,7 @@
import java.io.Serializable;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class RuntimeDataException extends HyracksDataException {
private static final long serialVersionUID = 1L;
@@ -30,7 +31,15 @@
super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
}
+ public RuntimeDataException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), null, sourceLoc, params);
+ }
+
public RuntimeDataException(int errorCode, Throwable cause, Serializable... params) {
super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, params);
}
+
+ public RuntimeDataException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+ super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, sourceLoc, params);
+ }
}
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 d62ffde..21813e3 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -137,6 +137,16 @@
1067 = Cannot find a non-missing SELECT operator in GROUP operator for a left-outer-join plan optimization.
1068 = Cannot get the conditional split variable for the given UNNESTMAP operator.
1069 = Cannot drop index \"%1$s\". Drop dataset \"%1$s\" to remove this index
+1070 = Metadata error. %1$s
+1071 = A dataverse with this name %1$s already exists.
+1072 = A dataset with this name %1$s already exists.
+1073 = Cannot resolve alias reference for undefined identifier %1$s in %2$s
+1074 = Cannot resolve ambiguous alias reference for undefined identifier %1$s in %2$s
+1075 = Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.
+1076 = Cannot find dataset %1$s because there is no dataverse declared, nor an alias with name %1$s!
+1077 = Cannot find dataset %1$s in dataverse %2$s nor an alias with name %1$s!
+1078 = Unexpected operator %1$s in an OperatorExpr starting with %2$s
+1079 = %1$s
# Feed Errors
3001 = Illegal state.
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java
index 3bada4a..ea99993 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java
@@ -89,7 +89,7 @@
case NO_OP:
break;
default:
- throw HyracksDataException.create(ErrorCode.UNKNOWN_EXTERNAL_FILE_PENDING_OP,
+ throw HyracksDataException.create(ErrorCode.UNKNOWN_EXTERNAL_FILE_PENDING_OP, sourceLoc,
file.getPendingOp());
}
}
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java
index 34e3eef..333ac55 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java
@@ -65,15 +65,14 @@
public String getMessage() {
StringBuilder msg = new StringBuilder("Parse error");
if (filename != null) {
- msg.append(" in file " + filename);
+ msg.append(" in file ").append(filename);
}
if (line >= 0) {
+ msg.append(" in line ").append(line);
if (column >= 0) {
- msg.append(" at (" + line + ", " + column + ")");
- } else {
- msg.append(" in line " + line);
+ msg.append(", at column ").append(column);
}
}
- return msg.append(": " + super.getMessage()).toString();
+ return msg.append(": ").append(super.getMessage()).toString();
}
}
\ No newline at end of file
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
index 4cc4975..62e4732 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
@@ -37,6 +37,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -53,9 +54,9 @@
protected final ISerializerDeserializer<ABoolean> booleanSerde =
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ABOOLEAN);
- public EditDistanceCheckEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public EditDistanceCheckEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
edThreshEval = args[2].createScalarEvaluator(context);
listBuilder = new OrderedListBuilder();
listItemVal = new ArrayBackedValueStorage();
@@ -110,7 +111,7 @@
}
default: {
- throw new TypeMismatchException(BuiltinFunctions.EDIT_DISTANCE_CHECK, 0, argType.serialize(),
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE_CHECK, 0, argType.serialize(),
ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
index eaf3368..d35dd89 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
@@ -24,13 +24,14 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
public class EditDistanceContainsEvaluator extends EditDistanceCheckEvaluator {
- public EditDistanceContainsEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public EditDistanceContainsEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
@@ -51,8 +52,9 @@
return ed.getSimilarityContains(firstOrdListIter, secondOrdListIter, edThresh);
}
default: {
- throw new TypeMismatchException(BuiltinFunctions.EDIT_DISTANCE_CONTAINS, 0, argType.serialize(),
- ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE_CONTAINS, 0,
+ argType.serialize(), ATypeTag.SERIALIZED_STRING_TYPE_TAG,
+ ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
}
}
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
index c3af387..cc103e0 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
@@ -37,6 +37,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -53,6 +54,7 @@
protected final IPointable argPtr2 = new VoidPointable();
protected final IScalarEvaluator firstStringEval;
protected final IScalarEvaluator secondStringEval;
+ protected final SourceLocation sourceLoc;
protected final SimilarityMetricEditDistance ed = new SimilarityMetricEditDistance();
protected final OrderedListIterator firstOrdListIter = new OrderedListIterator();
protected final OrderedListIterator secondOrdListIter = new OrderedListIterator();
@@ -66,10 +68,11 @@
protected ATypeTag firstTypeTag;
protected ATypeTag secondTypeTag;
- public EditDistanceEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
+ public EditDistanceEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, SourceLocation sourceLoc)
throws HyracksDataException {
firstStringEval = args[0].createScalarEvaluator(context);
secondStringEval = args[1].createScalarEvaluator(context);
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -115,7 +118,7 @@
return (int) ed.computeSimilarity(firstOrdListIter, secondOrdListIter);
}
default: {
- throw new TypeMismatchException(BuiltinFunctions.EDIT_DISTANCE, 0, argType.serialize(),
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE, 0, argType.serialize(),
ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
@@ -124,13 +127,13 @@
protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws HyracksDataException {
if (typeTag1 != typeTag2) {
- throw new IncompatibleTypeException(BuiltinFunctions.EDIT_DISTANCE, typeTag1.serialize(),
+ throw new IncompatibleTypeException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE, typeTag1.serialize(),
typeTag2.serialize());
}
// Since they are equal, check one tag is enough.
if (typeTag1 != ATypeTag.STRING && typeTag1 != ATypeTag.ARRAY) { // could be an list
- throw new TypeMismatchException(BuiltinFunctions.EDIT_DISTANCE, 0, typeTag1.serialize(),
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE, 0, typeTag1.serialize(),
ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
@@ -138,12 +141,14 @@
itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
.deserialize(argPtr1.getByteArray()[argPtr1.getStartOffset() + 1]);
if (itemTypeTag == ATypeTag.ANY) {
- throw new UnsupportedItemTypeException(BuiltinFunctions.EDIT_DISTANCE, itemTypeTag.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE,
+ itemTypeTag.serialize());
}
itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
.deserialize(argPtr2.getByteArray()[argPtr2.getStartOffset() + 1]);
if (itemTypeTag == ATypeTag.ANY) {
- throw new UnsupportedItemTypeException(BuiltinFunctions.EDIT_DISTANCE, itemTypeTag.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.EDIT_DISTANCE,
+ itemTypeTag.serialize());
}
}
return true;
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
index e4b40b1..d803a47 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
@@ -46,7 +46,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new EditDistanceCheckEvaluator(args, ctx);
+ return new EditDistanceCheckEvaluator(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceContainsDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceContainsDescriptor.java
index 4c7c257..b6002b5 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceContainsDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceContainsDescriptor.java
@@ -46,7 +46,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new EditDistanceContainsEvaluator(args, ctx);
+ return new EditDistanceContainsEvaluator(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java
index 8c6c9ed..60c8867 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java
@@ -46,7 +46,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new EditDistanceEvaluator(args, ctx);
+ return new EditDistanceEvaluator(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
index 17637bc..e7d582f 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
@@ -91,7 +91,7 @@
byte[] data = inputVal.getByteArray();
int offset = inputVal.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
int length = IntegerPointable.getInteger(data, offset + 1);
@@ -101,7 +101,7 @@
data = inputVal.getByteArray();
offset = inputVal.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, data[offset],
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
float similarityThreshold = (float) ADoubleSerializerDeserializer.getDouble(data, offset + 1);
@@ -112,7 +112,7 @@
offset = inputVal.getStartOffset();
int len = inputVal.getLength();
if (data[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 2, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 2, data[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
SimilarityFilters similarityFilters =
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
index 52bd8b1..d3fc6fc 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
@@ -94,7 +94,7 @@
byte[] data = thresholdPtr.getByteArray();
int offset = thresholdPtr.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, data[offset],
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG);
}
float similarityThreshold = AFloatSerializerDeserializer.getFloat(data, offset + 1);
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SimilarityDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
index 8584d06..89da0a1 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
@@ -105,7 +105,7 @@
int offset = inputVal.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
float similarityThreshold = (float) ADoubleSerializerDeserializer.getDouble(data, offset + 1);
@@ -116,7 +116,7 @@
offset = inputVal.getStartOffset();
int len = inputVal.getLength();
if (data[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, data[offset],
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
SimilarityFilters similarityFilters =
@@ -126,7 +126,7 @@
data = inputVal.getByteArray();
offset = inputVal.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 2, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 2, data[offset],
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
int length1 = IntegerPointable.getInteger(data, offset + 1);
@@ -135,7 +135,7 @@
data = inputVal.getByteArray();
offset = inputVal.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 3, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 3, data[offset],
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
int length2 = IntegerPointable.getInteger(data, offset + 1);
@@ -156,7 +156,7 @@
if (serList[offset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& serList[offset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 4, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 4, data[offset],
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
@@ -192,7 +192,7 @@
if (serList[offset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& serList[offset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 5, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 5, data[offset],
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
diff --git a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
index 4229f87..67e519f 100644
--- a/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
+++ b/asterixdb/asterix-fuzzyjoin/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
@@ -122,7 +122,8 @@
offset1 + APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints1 < 3) {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
int counter = 0;
@@ -231,7 +232,8 @@
offset1 + APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints1 < 3) {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
for (int i = 0; i < numOfPoints1; i++) {
double startX2 = ADoubleSerializerDeserializer.getDouble(bytes1,
@@ -383,7 +385,7 @@
int v = middleVertex;
while (!foundEar) {
if (0 >= (nonSimplePolygonDetection--)) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
int u = v;
@@ -676,7 +678,8 @@
offset1 + APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints1 < 3) {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
getCounterClockWisePolygon(bytes1, offset1, pointsOffsets1, numOfPoints1);
@@ -728,7 +731,8 @@
offset0 + APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints < 3) {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
getCounterClockWisePolygon(bytes0, offset0, pointsOffsets0, numOfPoints);
@@ -825,7 +829,7 @@
res = pointInRectangle(bytes0, offset0, bytes1, offset1);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG, ATypeTag.SERIALIZED_LINE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG,
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
@@ -894,7 +898,7 @@
res = lineRectangleIntersection(bytes0, offset0, bytes1, offset1);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG, ATypeTag.SERIALIZED_LINE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG,
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
@@ -916,7 +920,7 @@
offset1 + APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints0 < 3 || numOfPoints1 < 3) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
@@ -987,7 +991,7 @@
res = rectanglePolygonIntersection(bytes1, offset1, bytes0, offset0);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG, ATypeTag.SERIALIZED_LINE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG,
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
@@ -1012,7 +1016,7 @@
res = rectangleCircleIntersection(bytes1, offset1, bytes0, offset0);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG, ATypeTag.SERIALIZED_LINE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG,
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
@@ -1061,7 +1065,7 @@
}
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG, ATypeTag.SERIALIZED_LINE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG,
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
@@ -1069,7 +1073,7 @@
}
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_POINT_TYPE_TAG, ATypeTag.SERIALIZED_LINE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG, ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
ATypeTag.SERIALIZED_RECTANGLE_TYPE_TAG);
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateDescriptor.java
index ec45877..99eaf46 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new STUnionAggregateFunction(args, ctx);
+ return new STUnionAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateFunction.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateFunction.java
index c9c2eca..41c8c5b 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateFunction.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/aggregates/STUnionAggregateFunction.java
@@ -29,6 +29,7 @@
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.EnumDeserializer;
+import org.apache.asterix.runtime.aggregates.std.AbstractAggregateFunction;
import org.apache.asterix.runtime.exceptions.UnsupportedItemTypeException;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
@@ -36,6 +37,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -52,7 +54,7 @@
* multilinestring is created. Is the result contains geometries of different types, e.g., points and linestring, the
* output is a GeometryCollection.
*/
-public class STUnionAggregateFunction implements IAggregateEvaluator {
+public class STUnionAggregateFunction extends AbstractAggregateFunction {
/**Use WGS 84 (EPSG:4326) as the default coordinate reference system*/
public static final SpatialReference DEFAULT_CRS = SpatialReference.create(4326);
@SuppressWarnings("unchecked")
@@ -64,8 +66,9 @@
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
- public STUnionAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public STUnionAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
}
@@ -110,6 +113,7 @@
}
protected void processNull() throws UnsupportedItemTypeException {
- throw new UnsupportedItemTypeException(BuiltinFunctions.ST_UNION, ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.ST_UNION,
+ ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractGetValDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractGetValDescriptor.java
index 325b10a..65992f7 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractGetValDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractGetValDescriptor.java
@@ -31,8 +31,8 @@
} else if (bytes[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
return AInt64SerializerDeserializer.getLong(bytes, offset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes[offset], ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG,
- ATypeTag.SERIALIZED_INT64_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes[offset],
+ ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTDoubleGeometryDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTDoubleGeometryDescriptor.java
index 83925a1..60f6ea4 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTDoubleGeometryDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTDoubleGeometryDescriptor.java
@@ -95,12 +95,12 @@
ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]);
if (tag != ATypeTag.GEOMETRY) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]);
if (tag != ATypeTag.GEOMETRY) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes1[offset1],
ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTGeometryNDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTGeometryNDescriptor.java
index 62e8db9..cf1a900 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTGeometryNDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTGeometryNDescriptor.java
@@ -90,11 +90,12 @@
int offset0 = inputArg0.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
if (data0[offset0] != ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, data0[offset0], ATypeTag.SERIALIZED_INT64_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data0[offset0],
+ ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
ByteArrayInputStream inStream = new ByteArrayInputStream(data, offset + 1, len - 1);
@@ -108,7 +109,8 @@
AGeometrySerializerDeserializer.INSTANCE.serialize(new AGeometry(geometryN), out);
result.set(resultStorage);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTSingleGeometryDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTSingleGeometryDescriptor.java
index 0acf731..0100261 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTSingleGeometryDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/AbstractSTSingleGeometryDescriptor.java
@@ -92,7 +92,7 @@
ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]);
if (tag != ATypeTag.GEOMETRY) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/ParseGeoJSONDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/ParseGeoJSONDescriptor.java
index e59c3f8..75b3331 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/ParseGeoJSONDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/ParseGeoJSONDescriptor.java
@@ -116,7 +116,7 @@
int len = inputArg.getLength();
if (data[offset] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.GEOMETRY_CONSTRUCTOR, 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.GEOMETRY_CONSTRUCTOR, 0, data[offset],
ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
ByteArrayInputStream inStream = new ByteArrayInputStream(data, offset + 1, len - 1);
@@ -133,7 +133,8 @@
out.write(wKBGeometryBuffer);
result.set(resultStorage);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextDescriptor.java
index 8676600..81fa68d 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextDescriptor.java
@@ -101,7 +101,7 @@
int len = inputArg.getLength();
if (data[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.ST_GEOM_FROM_TEXT, 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.ST_GEOM_FROM_TEXT, 0, data[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
ByteArrayInputStream inStream = new ByteArrayInputStream(data, offset + 1, len - 1);
@@ -120,7 +120,8 @@
result.set(resultStorage);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextSRIDDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextSRIDDescriptor.java
index 01f7438..42401c5 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextSRIDDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromTextSRIDDescriptor.java
@@ -110,10 +110,12 @@
int offset0 = inputArg0.getStartOffset();
if (data[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
+ ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (data0[offset0] != ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, data0[offset0], ATypeTag.SERIALIZED_INT64_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data0[offset0],
+ ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
ByteArrayInputStream inStream = new ByteArrayInputStream(data, offset + 1, len - 1);
@@ -133,7 +135,8 @@
result.set(resultStorage);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromWKBDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromWKBDescriptor.java
index ad3365e..e949b90 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromWKBDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STGeomFromWKBDescriptor.java
@@ -93,7 +93,7 @@
int len = inputArg.getLength();
if (data[offset] != ATypeTag.SERIALIZED_BINARY_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.ST_GEOM_FROM_WKB, 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.ST_GEOM_FROM_WKB, 0, data[offset],
ATypeTag.SERIALIZED_BINARY_TYPE_TAG);
}
try {
@@ -105,7 +105,8 @@
out.write(data);
result.set(resultStorage);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STMakeEnvelopeDescriptorSRID.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STMakeEnvelopeDescriptorSRID.java
index efb4032..5fa6da8 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STMakeEnvelopeDescriptorSRID.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STMakeEnvelopeDescriptorSRID.java
@@ -137,7 +137,8 @@
out.write(bytes);
result.set(resultStorage);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STPolygonizeDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STPolygonizeDescriptor.java
index 56c79aa..12024bc 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STPolygonizeDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STPolygonizeDescriptor.java
@@ -114,7 +114,7 @@
} else if (typeTag == ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
serde = new AOrderedListSerializerDeserializer(type);
} else {
- throw new TypeMismatchException(BuiltinFunctions.ST_POLYGONIZE, 0, typeTag,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.ST_POLYGONIZE, 0, typeTag,
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
@@ -132,7 +132,8 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AGEOMETRY)
.serialize(new AGeometry(geometryCollection), out);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
result.set(resultStorage);
}
diff --git a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STRelateDescriptor.java b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STRelateDescriptor.java
index dc89943..5745dca 100644
--- a/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STRelateDescriptor.java
+++ b/asterixdb/asterix-geo/src/main/java/org/apache/asterix/geo/evaluators/functions/STRelateDescriptor.java
@@ -115,16 +115,17 @@
int len1 = inputArg1.getLength();
if (bytes[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
+ ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]);
if (tag != ATypeTag.GEOMETRY) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]);
if (tag != ATypeTag.GEOMETRY) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes1[offset1],
ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
@@ -140,7 +141,8 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ABOOLEAN)
.serialize(val ? ABoolean.TRUE : ABoolean.FALSE, out);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_GEOMETRY_TYPE_TAG);
}
result.set(resultStorage);
}
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/DistinctClause.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/DistinctClause.java
index bb4d346..1174717 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/DistinctClause.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/DistinctClause.java
@@ -22,11 +22,11 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.aql.visitor.base.IAQLVisitor;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class DistinctClause implements Clause {
+public class DistinctClause extends AbstractClause {
private List<Expression> distinctByExprs;
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/ForClause.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/ForClause.java
index 6cdc2f3..9bae2a0 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/ForClause.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/ForClause.java
@@ -20,12 +20,12 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.aql.visitor.base.IAQLVisitor;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class ForClause implements Clause {
+public class ForClause extends AbstractClause {
private VariableExpr varExpr = null;
private VariableExpr posExpr = null;
private Expression inExpr = null;
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/JoinClause.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/JoinClause.java
index 4767f4f..f0ed087 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/JoinClause.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/JoinClause.java
@@ -22,11 +22,12 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.aql.visitor.base.IAQLPlusVisitor;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Clause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class JoinClause implements Clause {
+public class JoinClause extends AbstractClause {
public static enum JoinKind {
INNER,
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/MetaVariableClause.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/MetaVariableClause.java
index 871c2ce..7712cf9 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/MetaVariableClause.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/clause/MetaVariableClause.java
@@ -20,11 +20,11 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.aql.visitor.base.IAQLPlusVisitor;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class MetaVariableClause implements Clause {
+public class MetaVariableClause extends AbstractClause {
private VarIdentifier var;
@Override
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
index d2cb64f..e9ff109 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/rewrites/AqlQueryRewriter.java
@@ -119,7 +119,7 @@
for (Expression topLevelExpr : topStatement.getDirectlyEnclosedExpressions()) {
storedFunctionDecls.addAll(FunctionUtil.retrieveUsedStoredFunctions(metadataProvider, topLevelExpr, funIds,
null, expr -> getFunctionCalls(expr), func -> functionParser.getFunctionDecl(func),
- signature -> CommonFunctionMapUtil.normalizeBuiltinFunctionSignature(signature)));
+ (signature, sourceLoc) -> CommonFunctionMapUtil.normalizeBuiltinFunctionSignature(signature)));
declaredFunctions.addAll(storedFunctionDecls);
}
if (!declaredFunctions.isEmpty()) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractClause.java
similarity index 71%
rename from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
rename to asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractClause.java
index 0660f23..bc7b45b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractClause.java
@@ -16,14 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.lang.common.base;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
-
- public TranslationException(String msg) {
- super(msg);
- }
+public abstract class AbstractClause extends AbstractLangExpression implements Clause {
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractExpression.java
index 44a05ef..773268f 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractExpression.java
@@ -23,7 +23,8 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
-public abstract class AbstractExpression implements Expression {
+public abstract class AbstractExpression extends AbstractLangExpression implements Expression {
+
protected List<IExpressionAnnotation> hints;
public void addHint(IExpressionAnnotation hint) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractLangExpression.java
similarity index 66%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractLangExpression.java
index 0660f23..3a784e3 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractLangExpression.java
@@ -16,14 +16,20 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.lang.common.base;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.hyracks.api.exceptions.SourceLocation;
- public TranslationException(String msg) {
- super(msg);
+public abstract class AbstractLangExpression implements ILangExpression {
+ private SourceLocation sourceLoc;
+
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
+
+ @Override
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractStatement.java
similarity index 71%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractStatement.java
index 0660f23..e07683d 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/AbstractStatement.java
@@ -16,14 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.lang.common.base;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
-
- public TranslationException(String msg) {
- super(msg);
- }
+public abstract class AbstractStatement extends AbstractLangExpression implements Statement {
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ILangExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ILangExpression.java
index f6b9399..e80d7bb 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ILangExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ILangExpression.java
@@ -20,7 +20,10 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public interface ILangExpression {
- public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException;
+ <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException;
+
+ SourceLocation getSourceLocation();
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java
index 31c903e..20dba52 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java
@@ -24,7 +24,7 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
import org.apache.asterix.lang.common.expression.VariableExpr;
@@ -32,7 +32,7 @@
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class GroupbyClause implements Clause {
+public class GroupbyClause extends AbstractClause {
private List<GbyVariableExpressionPair> gbyPairList;
private List<GbyVariableExpressionPair> decorPairList;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LetClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LetClause.java
index df560ea..750cbe3 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LetClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LetClause.java
@@ -21,12 +21,12 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class LetClause implements Clause {
+public class LetClause extends AbstractClause {
private VariableExpr varExpr;
private Expression bindExpr;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LimitClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LimitClause.java
index fbfa64e..d597bc2 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LimitClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/LimitClause.java
@@ -21,11 +21,11 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class LimitClause implements Clause {
+public class LimitClause extends AbstractClause {
private Expression limitExpr;
private Expression offset;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java
index c1ceaa8..faefe1d 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/OrderbyClause.java
@@ -22,12 +22,12 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap;
-public class OrderbyClause implements Clause {
+public class OrderbyClause extends AbstractClause {
private List<Expression> orderbyList;
private List<OrderModifier> modifierList;
private IRangeMap rangeMap;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/UpdateClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/UpdateClause.java
index 4089c07..49c0c58 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/UpdateClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/UpdateClause.java
@@ -21,14 +21,14 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.statement.DeleteStatement;
import org.apache.asterix.lang.common.statement.InsertStatement;
import org.apache.asterix.lang.common.statement.UpdateStatement;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class UpdateClause implements Clause {
+public class UpdateClause extends AbstractClause {
private Expression target;
private Expression value;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
index c540588..9153400 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/WhereClause.java
@@ -19,11 +19,11 @@
package org.apache.asterix.lang.common.clause;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class WhereClause implements Clause {
+public class WhereClause extends AbstractClause {
private Expression whereExpr;
public WhereClause() {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractTypeExpression.java
similarity index 71%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractTypeExpression.java
index 0660f23..f55f055 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/AbstractTypeExpression.java
@@ -16,14 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.lang.common.expression;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.asterix.lang.common.base.AbstractLangExpression;
- public TranslationException(String msg) {
- super(msg);
- }
+public abstract class AbstractTypeExpression extends AbstractLangExpression implements TypeExpression {
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
index 0c3fdb1..ab6b3f1 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/LiteralExpr.java
@@ -21,19 +21,9 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.base.AbstractExpression;
import org.apache.asterix.lang.common.base.Literal;
-import org.apache.asterix.lang.common.literal.DoubleLiteral;
-import org.apache.asterix.lang.common.literal.LongIntegerLiteral;
-import org.apache.asterix.lang.common.literal.StringLiteral;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-import org.apache.asterix.object.base.AdmBigIntNode;
-import org.apache.asterix.object.base.AdmBooleanNode;
-import org.apache.asterix.object.base.AdmDoubleNode;
-import org.apache.asterix.object.base.AdmNullNode;
-import org.apache.asterix.object.base.AdmStringNode;
-import org.apache.asterix.object.base.IAdmNode;
public class LiteralExpr extends AbstractExpression {
private Literal value;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
index 58d3756..d4c03b2 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/OrderedListTypeDefinition.java
@@ -23,7 +23,7 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class OrderedListTypeDefinition implements TypeExpression {
+public class OrderedListTypeDefinition extends AbstractTypeExpression {
private TypeExpression itemTypeExpression;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
index 4aecd92..4fcc7ae 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/RecordTypeDefinition.java
@@ -27,7 +27,7 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class RecordTypeDefinition implements TypeExpression {
+public class RecordTypeDefinition extends AbstractTypeExpression {
public enum RecordKind {
OPEN,
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
index 8c1e5c6..a76e5bb 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/TypeReferenceExpression.java
@@ -25,7 +25,7 @@
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class TypeReferenceExpression implements TypeExpression {
+public class TypeReferenceExpression extends AbstractTypeExpression {
private final Pair<Identifier, Identifier> ident;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
index 8f4b1b7..b55c910 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/UnorderedListTypeDefinition.java
@@ -23,7 +23,7 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class UnorderedListTypeDefinition implements TypeExpression {
+public class UnorderedListTypeDefinition extends AbstractTypeExpression {
private TypeExpression itemTypeExpression;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CompactStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CompactStatement.java
index d2cc431..d35516b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CompactStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CompactStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 CompactStatement implements Statement {
+public class CompactStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier datasetName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/ConnectFeedStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/ConnectFeedStatement.java
index b0a3f6e..eaa95cd 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/ConnectFeedStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/ConnectFeedStatement.java
@@ -22,13 +22,14 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.functions.FunctionSignature;
+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;
import org.apache.asterix.metadata.feeds.BuiltinFeedPolicies;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class ConnectFeedStatement implements Statement {
+public class ConnectFeedStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier datasetName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDataverseStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDataverseStatement.java
index dcbf334..9881f83 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDataverseStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateDataverseStatement.java
@@ -19,12 +19,13 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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;
import org.apache.asterix.runtime.formats.NonTaggedDataFormat;
-public class CreateDataverseStatement implements Statement {
+public class CreateDataverseStatement extends AbstractStatement {
private Identifier dataverseName;
private String format;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedPolicyStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedPolicyStatement.java
index 2deec27..ea6955b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedPolicyStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedPolicyStatement.java
@@ -21,10 +21,11 @@
import java.util.Map;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class CreateFeedPolicyStatement implements Statement {
+public class CreateFeedPolicyStatement extends AbstractStatement {
private final String policyName;
private final String sourcePolicyName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedStatement.java
index a4acfdf..5e82a38 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFeedStatement.java
@@ -19,6 +19,7 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.struct.Identifier;
@@ -35,7 +36,7 @@
* The new create feed statement only concerns the feed adaptor configuration.
* All feeds are considered as primary feeds.
*/
-public class CreateFeedStatement implements Statement {
+public class CreateFeedStatement extends AbstractStatement {
private final Pair<Identifier, Identifier> qName;
private final boolean ifNotExists;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
index c5fa524..f1cc6ba 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateFunctionStatement.java
@@ -23,12 +23,13 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class CreateFunctionStatement implements Statement {
+public class CreateFunctionStatement extends AbstractStatement {
private final FunctionSignature signature;
private final String functionBody;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java
index 1dc8673..2e9f1f9 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/CreateIndexStatement.java
@@ -23,13 +23,14 @@
import org.apache.asterix.common.config.DatasetConfig.IndexType;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.expression.IndexedTypeExpression;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class CreateIndexStatement implements Statement {
+public class CreateIndexStatement extends AbstractStatement {
private Identifier indexName;
private Identifier dataverseName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
index f8cf62c..4aeb6d3 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DatasetDecl.java
@@ -26,6 +26,7 @@
import org.apache.asterix.common.config.DatasetConfig.DatasetType;
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.expression.RecordConstructor;
import org.apache.asterix.lang.common.struct.Identifier;
@@ -38,7 +39,7 @@
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-public class DatasetDecl implements Statement {
+public class DatasetDecl extends AbstractStatement {
protected static final String[] WITH_OBJECT_FIELDS = new String[] { MergePolicyUtils.MERGE_POLICY_PARAMETER_NAME };
protected static final Set<String> WITH_OBJECT_FIELDS_SET = new HashSet<>(Arrays.asList(WITH_OBJECT_FIELDS));
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java
index 1b0c5cd..99303ce 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDecl.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 DataverseDecl implements Statement {
+public class DataverseDecl extends AbstractStatement {
private Identifier dataverseName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDropStatement.java
index 6349006..9e184c2 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DataverseDropStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 DataverseDropStatement implements Statement {
+public class DataverseDropStatement extends AbstractStatement {
private Identifier dataverseName;
private boolean ifExists;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
index 18045b5..f05efbc 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DeleteStatement.java
@@ -21,13 +21,14 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class DeleteStatement implements Statement {
+public class DeleteStatement extends AbstractStatement {
private VariableExpr vars;
private Identifier dataverseName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DisconnectFeedStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DisconnectFeedStatement.java
index 33fa559..cb33452 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DisconnectFeedStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DisconnectFeedStatement.java
@@ -19,12 +19,13 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class DisconnectFeedStatement implements Statement {
+public class DisconnectFeedStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier feedName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DropDatasetStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DropDatasetStatement.java
index 45f5875..1434620 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DropDatasetStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/DropDatasetStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 DropDatasetStatement implements Statement {
+public class DropDatasetStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier datasetName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedDropStatement.java
index 47e51e3..ef6c096 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedDropStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 FeedDropStatement implements Statement {
+public class FeedDropStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier feedName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedPolicyDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedPolicyDropStatement.java
index 1b23237..a95254b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedPolicyDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FeedPolicyDropStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 FeedPolicyDropStatement implements Statement {
+public class FeedPolicyDropStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier policyName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDecl.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDecl.java
index 2ea6c40..4161824 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDecl.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDecl.java
@@ -22,12 +22,13 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class FunctionDecl implements Statement {
+public class FunctionDecl extends AbstractStatement {
private FunctionSignature signature;
private List<VarIdentifier> paramList;
private Expression funcBody;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDropStatement.java
index 610a20d..0496ecc 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/FunctionDropStatement.java
@@ -20,10 +20,11 @@
import org.apache.asterix.common.exceptions.CompilationException;
import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class FunctionDropStatement implements Statement {
+public class FunctionDropStatement extends AbstractStatement {
private final FunctionSignature signature;
private boolean ifExists;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/IndexDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/IndexDropStatement.java
index c262855..39e1d31 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/IndexDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/IndexDropStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 IndexDropStatement implements Statement {
+public class IndexDropStatement extends AbstractStatement {
private Identifier dataverseName;
private Identifier datasetName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
index de12dee..20aea67 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/InsertStatement.java
@@ -23,6 +23,7 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
+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.base.Statement;
@@ -31,7 +32,7 @@
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class InsertStatement implements IReturningStatement {
+public class InsertStatement extends AbstractStatement implements IReturningStatement {
private final Identifier dataverseName;
private final Identifier datasetName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/LoadStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/LoadStatement.java
index 92ea383..5366bc0 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/LoadStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/LoadStatement.java
@@ -21,11 +21,12 @@
import java.util.Map;
import org.apache.asterix.common.exceptions.CompilationException;
+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 LoadStatement implements Statement {
+public class LoadStatement extends AbstractStatement {
private Identifier datasetName;
private Identifier dataverseName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodeGroupDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodeGroupDropStatement.java
index 5ec0181..7bb0c69 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodeGroupDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodeGroupDropStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 NodeGroupDropStatement implements Statement {
+public class NodeGroupDropStatement extends AbstractStatement {
private Identifier nodeGroupName;
private boolean ifExists;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodegroupDecl.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodegroupDecl.java
index 1213f11..e4b3f5b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodegroupDecl.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/NodegroupDecl.java
@@ -21,11 +21,12 @@
import java.util.List;
import org.apache.asterix.common.exceptions.CompilationException;
+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 NodegroupDecl implements Statement {
+public class NodegroupDecl extends AbstractStatement {
private Identifier nodegroupName;
private List<Identifier> nodeControllerNames;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
index 6f2b6de..6b532fe 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/Query.java
@@ -23,13 +23,14 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
+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.base.Statement;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class Query implements IReturningStatement {
+public class Query extends AbstractStatement implements IReturningStatement {
private final boolean explain;
private boolean topLevel = true;
private Expression body;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RefreshExternalDatasetStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RefreshExternalDatasetStatement.java
index 78d766c..4ca9d97 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RefreshExternalDatasetStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RefreshExternalDatasetStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 RefreshExternalDatasetStatement implements Statement {
+public class RefreshExternalDatasetStatement extends AbstractStatement {
private Identifier dataverseName;
private Identifier datasetName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/SetStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/SetStatement.java
index 17727af..8c52b45 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/SetStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/SetStatement.java
@@ -19,10 +19,11 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class SetStatement implements Statement {
+public class SetStatement extends AbstractStatement {
private String propName;
private String propValue;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StartFeedStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StartFeedStatement.java
index bc37c42..3ea791d 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StartFeedStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StartFeedStatement.java
@@ -20,12 +20,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class StartFeedStatement implements Statement {
+public class StartFeedStatement extends AbstractStatement {
public static final String WAIT_FOR_COMPLETION = "wait-for-completion-feed";
private Identifier dataverseName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StopFeedStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StopFeedStatement.java
index 1fec6b2..99e5069 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StopFeedStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/StopFeedStatement.java
@@ -19,12 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
-public class StopFeedStatement implements Statement {
+public class StopFeedStatement extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier feedName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDecl.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDecl.java
index 4f0ea52..5430945 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDecl.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDecl.java
@@ -20,12 +20,13 @@
import org.apache.asterix.common.annotations.TypeDataGen;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.expression.TypeExpression;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class TypeDecl implements Statement {
+public class TypeDecl extends AbstractStatement {
private final Identifier dataverseName;
private final Identifier ident;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDropStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDropStatement.java
index 059ac67..9f59f98 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDropStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/TypeDropStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 TypeDropStatement implements Statement {
+public class TypeDropStatement extends AbstractStatement {
private final Identifier dataverseName;
private Identifier typeName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
index 0bdbbd1..e631107 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/UpdateStatement.java
@@ -22,13 +22,14 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.clause.UpdateClause;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class UpdateStatement implements Statement {
+public class UpdateStatement extends AbstractStatement {
private VariableExpr vars;
private Expression target;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/WriteStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/WriteStatement.java
index 5dd9935..aabd999 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/WriteStatement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/WriteStatement.java
@@ -19,11 +19,12 @@
package org.apache.asterix.lang.common.statement;
import org.apache.asterix.common.exceptions.CompilationException;
+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 WriteStatement implements Statement {
+public class WriteStatement extends AbstractStatement {
private final Identifier ncName;
private final String fileName;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
index 3571dcf..1f564a5 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/FunctionUtil.java
@@ -25,6 +25,7 @@
import java.util.Set;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionConstants;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.Expression;
@@ -43,6 +44,7 @@
import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FunctionUtil {
@@ -68,7 +70,8 @@
@FunctionalInterface
public interface IFunctionNormalizer {
- FunctionSignature normalizeBuiltinFunctionSignature(FunctionSignature fs) throws CompilationException;
+ FunctionSignature normalizeBuiltinFunctionSignature(FunctionSignature fs, SourceLocation sourceLoc)
+ throws CompilationException;
}
/**
@@ -116,8 +119,9 @@
if (!namespace.equals(FunctionConstants.ASTERIX_NS)
&& !namespace.equals(AlgebricksBuiltinFunctions.ALGEBRICKS_NS)
&& metadataProvider.findDataverse(namespace) == null) {
- throw new CompilationException("In function call \"" + namespace + "." + signature.getName()
- + "(...)\", the dataverse \"" + namespace + "\" cannot be found!");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, functionCall.getSourceLocation(),
+ "In function call \"" + namespace + "." + signature.getName() + "(...)\", the dataverse \""
+ + namespace + "\" cannot be found!");
}
} catch (AlgebricksException e) {
throw new CompilationException(e);
@@ -130,7 +134,8 @@
}
if (function == null) {
FunctionSignature normalizedSignature = functionNormalizer == null ? signature
- : functionNormalizer.normalizeBuiltinFunctionSignature(signature);
+ : functionNormalizer.normalizeBuiltinFunctionSignature(signature,
+ functionCall.getSourceLocation());
if (BuiltinFunctions.isBuiltinCompilerFunction(normalizedSignature, includePrivateFunctions)) {
continue;
}
@@ -141,7 +146,8 @@
} else {
messageBuilder.append("function " + signature + " is not defined");
}
- throw new CompilationException(messageBuilder.toString());
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, functionCall.getSourceLocation(),
+ messageBuilder.toString());
}
if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_AQL)
@@ -149,7 +155,7 @@
FunctionDecl functionDecl = functionParser.getFunctionDecl(function);
if (functionDecl != null) {
if (functionDecls.contains(functionDecl)) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, functionCall.getSourceLocation(),
"Recursive invocation " + functionDecls.get(functionDecls.size() - 1).getSignature()
+ " <==> " + functionDecl.getSignature());
}
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 8ae67d6..0413fa5 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
@@ -60,6 +60,7 @@
import org.apache.asterix.metadata.entities.Dataverse;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractInlineUdfsVisitor extends AbstractQueryExpressionVisitor<Boolean, List<FunctionDecl>> {
@@ -289,12 +290,18 @@
if (e.getKind() == Kind.VARIABLE_EXPRESSION) {
subts.addSubstituion(new VariableExpr(param), e);
} else {
+ SourceLocation sourceLoc = e.getSourceLocation();
VarIdentifier newV = context.newVariable();
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 =
e.accept(cloneVisitor, new VariableSubstitutionEnvironment());
- LetClause c = new LetClause(new VariableExpr(newV), (Expression) p1.first);
+ VariableExpr newVRef1 = new VariableExpr(newV);
+ newVRef1.setSourceLocation(sourceLoc);
+ LetClause c = new LetClause(newVRef1, (Expression) p1.first);
+ c.setSourceLocation(sourceLoc);
clauses.add(c);
- subts.addSubstituion(new VariableExpr(param), new VariableExpr(newV));
+ VariableExpr newVRef2 = new VariableExpr(newV);
+ newVRef2.setSourceLocation(sourceLoc);
+ subts.addSubstituion(new VariableExpr(param), newVRef2);
}
}
@@ -325,7 +332,9 @@
}
private Expression rewriteFunctionBody(FunctionDecl fnDecl) throws CompilationException {
+ SourceLocation sourceLoc = fnDecl.getSourceLocation();
Query wrappedQuery = new Query(false);
+ wrappedQuery.setSourceLocation(sourceLoc);
wrappedQuery.setBody(fnDecl.getFuncBody());
wrappedQuery.setTopLevel(false);
wrappedQuery.setExternalVars(fnDecl.getParamList());
@@ -340,7 +349,7 @@
try {
fnDataverse = metadataProvider.findDataverse(fnNamespace);
} catch (AlgebricksException e) {
- throw new CompilationException(ErrorCode.NO_DATAVERSE_WITH_NAME, e, fnNamespace);
+ throw new CompilationException(ErrorCode.NO_DATAVERSE_WITH_NAME, e, sourceLoc, fnNamespace);
}
}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
index 58c81a6..64023a8 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
@@ -25,6 +25,7 @@
import java.util.Map.Entry;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Expression.Kind;
import org.apache.asterix.lang.common.base.ILangExpression;
@@ -73,6 +74,7 @@
VariableExpr varExpr = lc.getVarExpr();
VariableExpr newVe = generateNewVariable(context, varExpr);
LetClause newLet = new LetClause(newVe, (Expression) p1.first);
+ newLet.setSourceLocation(lc.getSourceLocation());
return new Pair<>(newLet, VariableCloneAndSubstitutionUtil.eliminateSubstFromList(lc.getVarExpr(), env));
}
@@ -107,6 +109,7 @@
}
GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, newWithMap, newGroupVar, newGroupFieldList,
gc.hasHashGroupByHint(), gc.isGroupAll());
+ newGroup.setSourceLocation(gc.getSourceLocation());
return new Pair<>(newGroup, newSubs);
}
@@ -126,6 +129,7 @@
}
Pair<ILangExpression, VariableSubstitutionEnvironment> p2 = qe.getSatisfiesExpr().accept(this, newSubs);
QuantifiedExpression qe2 = new QuantifiedExpression(qe.getQuantifier(), newPairs, (Expression) p2.first);
+ qe2.setSourceLocation(qe.getSourceLocation());
return new Pair<>(qe2, newSubs);
}
@@ -134,6 +138,7 @@
VariableSubstitutionEnvironment env) throws CompilationException {
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = wc.getWhereExpr().accept(this, env);
WhereClause newW = new WhereClause((Expression) p1.first);
+ newW.setSourceLocation(wc.getSourceLocation());
return new Pair<>(newW, p1.second);
}
@@ -142,6 +147,7 @@
VariableSubstitutionEnvironment env) throws CompilationException {
List<Expression> exprList = VariableCloneAndSubstitutionUtil.visitAndCloneExprList(pf.getExprList(), env, this);
CallExpr f = new CallExpr(pf.getFunctionSignature(), exprList);
+ f.setSourceLocation(pf.getSourceLocation());
return new Pair<>(f, env);
}
@@ -152,11 +158,12 @@
for (VarIdentifier vi : fd.getParamList()) {
VariableExpr varExpr = new VariableExpr(vi);
if (!env.constainsOldVar(varExpr)) {
- throw new CompilationException("Parameter " + vi + " does not appear in the substitution list.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, fd.getSourceLocation(),
+ "Parameter " + vi + " does not appear in the substitution list.");
}
Expression newExpr = env.findSubstitution(varExpr);
if (newExpr.getKind() != Kind.VARIABLE_EXPRESSION) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, fd.getSourceLocation(),
"Parameter " + vi + " cannot be substituted by a non-variable expression.");
}
newList.add(((VariableExpr) newExpr).getVar());
@@ -164,6 +171,7 @@
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = fd.getFuncBody().accept(this, env);
FunctionDecl newF = new FunctionDecl(fd.getSignature(), newList, (Expression) p1.first);
+ newF.setSourceLocation(fd.getSourceLocation());
return new Pair<>(newF, env);
}
@@ -174,6 +182,7 @@
Pair<ILangExpression, VariableSubstitutionEnvironment> p2 = ifexpr.getThenExpr().accept(this, env);
Pair<ILangExpression, VariableSubstitutionEnvironment> p3 = ifexpr.getElseExpr().accept(this, env);
IfExpr i = new IfExpr((Expression) p1.first, (Expression) p2.first, (Expression) p3.first);
+ i.setSourceLocation(ifexpr.getSourceLocation());
return new Pair<>(i, env);
}
@@ -189,6 +198,7 @@
p2 = new Pair<>(null, null);
}
LimitClause c = new LimitClause((Expression) p1.first, (Expression) p2.first);
+ c.setSourceLocation(lc.getSourceLocation());
return new Pair<>(c, env);
}
@@ -198,6 +208,7 @@
List<Expression> oldExprList = lc.getExprList();
List<Expression> exprs = VariableCloneAndSubstitutionUtil.visitAndCloneExprList(oldExprList, env, this);
ListConstructor c = new ListConstructor(lc.getType(), exprs);
+ c.setSourceLocation(lc.getSourceLocation());
return new Pair<>(c, env);
}
@@ -217,6 +228,7 @@
exprs.add((Expression) p1.first);
}
OperatorExpr oe = new OperatorExpr(exprs, op.getExprBroadcastIdx(), op.getOpList(), op.isCurrentop());
+ oe.setSourceLocation(op.getSourceLocation());
return new Pair<>(oe, env);
}
@@ -229,6 +241,7 @@
oc2.setNumFrames(oc.getNumFrames());
oc2.setNumTuples(oc.getNumTuples());
oc2.setRangeMap(oc.getRangeMap());
+ oc2.setSourceLocation(oc.getSourceLocation());
return new Pair<>(oc2, env);
}
@@ -238,6 +251,7 @@
Query newQ = new Query(q.isExplain());
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = q.getBody().accept(this, env);
newQ.setBody((Expression) p1.first);
+ newQ.setSourceLocation(q.getSourceLocation());
return new Pair<>(newQ, p1.second);
}
@@ -253,6 +267,7 @@
newFbs.add(fb2);
}
RecordConstructor newRc = new RecordConstructor(newFbs);
+ newRc.setSourceLocation(rc.getSourceLocation());
return new Pair<>(newRc, env);
}
@@ -261,6 +276,7 @@
VariableSubstitutionEnvironment env) throws CompilationException {
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = u.getExpr().accept(this, env);
UnaryExpr newU = new UnaryExpr(u.getExprType(), (Expression) p1.first);
+ newU.setSourceLocation(u.getSourceLocation());
return new Pair<>(newU, env);
}
@@ -275,6 +291,7 @@
}
IndexAccessor i = new IndexAccessor((Expression) p1.first, indexExpr);
i.setAny(ia.isAny());
+ i.setSourceLocation(ia.getSourceLocation());
return new Pair<>(i, env);
}
@@ -283,6 +300,7 @@
VariableSubstitutionEnvironment env) throws CompilationException {
Pair<ILangExpression, VariableSubstitutionEnvironment> p = fa.getExpr().accept(this, env);
FieldAccessor newF = new FieldAccessor((Expression) p.first, fa.getIdent());
+ newF.setSourceLocation(fa.getSourceLocation());
return new Pair<>(newF, p.second);
}
@@ -301,7 +319,9 @@
// it is a variable from the context
VarIdentifier var = context.getRewrittenVar(expr.getVar().getId());
if (var != null) {
- return new VariableExpr(var);
+ VariableExpr newVarExpr = new VariableExpr(var);
+ newVarExpr.setSourceLocation(expr.getSourceLocation());
+ return newVarExpr;
}
}
return expr;
@@ -319,7 +339,9 @@
public VariableExpr generateNewVariable(LangRewritingContext context, VariableExpr varExpr) {
VarIdentifier vi = varExpr.getVar();
VarIdentifier newVar = context.mapOldId(vi.getId(), vi.getValue());
- return new VariableExpr(newVar);
+ VariableExpr newVarExpr = new VariableExpr(newVar);
+ newVarExpr.setSourceLocation(varExpr.getSourceLocation());
+ return newVarExpr;
}
/**
diff --git a/asterixdb/asterix-lang-sqlpp/pom.xml b/asterixdb/asterix-lang-sqlpp/pom.xml
index 0321437..e122335 100644
--- a/asterixdb/asterix-lang-sqlpp/pom.xml
+++ b/asterixdb/asterix-lang-sqlpp/pom.xml
@@ -162,6 +162,10 @@
</dependency>
<dependency>
<groupId>org.apache.hyracks</groupId>
+ <artifactId>hyracks-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hyracks</groupId>
<artifactId>algebricks-core</artifactId>
</dependency>
<dependency>
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/AbstractBinaryCorrelateClause.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/AbstractBinaryCorrelateClause.java
index 40a5ea5..ba1c498 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/AbstractBinaryCorrelateClause.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/AbstractBinaryCorrelateClause.java
@@ -21,12 +21,12 @@
import java.util.Objects;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.sqlpp.optype.JoinType;
-public abstract class AbstractBinaryCorrelateClause implements Clause {
+public abstract class AbstractBinaryCorrelateClause extends AbstractClause {
private JoinType joinType;
private Expression rightExpr;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromClause.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromClause.java
index 65c2f01..4b0e324 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromClause.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromClause.java
@@ -19,18 +19,17 @@
package org.apache.asterix.lang.sqlpp.clause;
-import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class FromClause implements Clause {
+public class FromClause extends AbstractClause {
- private List<FromTerm> fromTerms = new ArrayList<>();
+ private List<FromTerm> fromTerms;
public FromClause(List<FromTerm> fromTerms) {
this.fromTerms = fromTerms;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromTerm.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromTerm.java
index 6860cfe..3e26371 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromTerm.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/FromTerm.java
@@ -24,13 +24,13 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class FromTerm implements Clause {
+public class FromTerm extends AbstractClause {
private Expression leftExpr;
private VariableExpr leftVar;
private VariableExpr posVar;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/HavingClause.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/HavingClause.java
index aadbe42..2c0ce0c 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/HavingClause.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/HavingClause.java
@@ -19,12 +19,12 @@
package org.apache.asterix.lang.sqlpp.clause;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class HavingClause implements Clause {
+public class HavingClause extends AbstractClause {
private Expression filterExpression;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/Projection.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/Projection.java
index 066ad22..7f353d6 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/Projection.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/Projection.java
@@ -22,12 +22,12 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class Projection implements Clause {
+public class Projection extends AbstractClause {
private Expression expr;
private String name;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectBlock.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectBlock.java
index 0477b1c..f072fe4 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectBlock.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectBlock.java
@@ -24,14 +24,14 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.clause.GroupbyClause;
import org.apache.asterix.lang.common.clause.LetClause;
import org.apache.asterix.lang.common.clause.WhereClause;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class SelectBlock implements Clause {
+public class SelectBlock extends AbstractClause {
private SelectClause selectClause;
private FromClause fromClause;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectClause.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectClause.java
index e5c3f56..2627870 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectClause.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectClause.java
@@ -22,11 +22,11 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class SelectClause implements Clause {
+public class SelectClause extends AbstractClause {
private SelectElement selectElement;
private SelectRegular selectRegular;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectElement.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectElement.java
index 9c82d5c..464b744 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectElement.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectElement.java
@@ -20,12 +20,12 @@
package org.apache.asterix.lang.sqlpp.clause;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class SelectElement implements Clause {
+public class SelectElement extends AbstractClause {
private Expression expr;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectRegular.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectRegular.java
index a114337..9a191723 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectRegular.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectRegular.java
@@ -23,11 +23,11 @@
import java.util.stream.Collectors;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class SelectRegular implements Clause {
+public class SelectRegular extends AbstractClause {
private List<Projection> projections;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectSetOperation.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectSetOperation.java
index 18d9879..7994358 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectSetOperation.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/clause/SelectSetOperation.java
@@ -24,13 +24,13 @@
import java.util.Objects;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Clause;
+import org.apache.asterix.lang.common.base.AbstractClause;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
import org.apache.asterix.lang.sqlpp.struct.SetOperationInput;
import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-public class SelectSetOperation implements Clause {
+public class SelectSetOperation extends AbstractClause {
private SetOperationInput leftInput;
private List<SetOperationRight> rightInputs = new ArrayList<>();
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParseException.java
similarity index 65%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParseException.java
index 0660f23..52752bb 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/parser/SqlppParseException.java
@@ -16,14 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.lang.sqlpp.parser;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.hyracks.api.exceptions.SourceLocation;
- public TranslationException(String msg) {
- super(msg);
+public final class SqlppParseException extends ParseException {
+
+ private final SourceLocation sourceLoc;
+
+ public SqlppParseException(SourceLocation sourceLoc, String message) {
+ super(message);
+ this.sourceLoc = sourceLoc;
}
-}
+
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+}
\ No newline at end of file
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
index befa5ab..36c8145 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
@@ -225,7 +225,8 @@
for (Expression topLevelExpr : topExpr.getDirectlyEnclosedExpressions()) {
usedStoredFunctionDecls.addAll(FunctionUtil.retrieveUsedStoredFunctions(metadataProvider, topLevelExpr,
funIds, null, expr -> getFunctionCalls(expr), func -> functionRepository.getFunctionDecl(func),
- signature -> FunctionMapUtil.normalizeBuiltinFunctionSignature(signature, false)));
+ (signature, sourceLoc) -> FunctionMapUtil.normalizeBuiltinFunctionSignature(signature, false,
+ sourceLoc)));
}
declaredFunctions.addAll(usedStoredFunctionDecls);
if (inlineUdfs && !declaredFunctions.isEmpty()) {
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/GenerateColumnNameVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/GenerateColumnNameVisitor.java
index b945a40..14a7ec0 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/GenerateColumnNameVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/GenerateColumnNameVisitor.java
@@ -57,7 +57,9 @@
public Expression visit(GroupbyClause groupbyClause, ILangExpression arg) throws CompilationException {
for (GbyVariableExpressionPair gbyKeyPair : groupbyClause.getGbyPairList()) {
if (gbyKeyPair.getVar() == null) {
- gbyKeyPair.setVar(new VariableExpr(context.newVariable()));
+ VariableExpr varExpr = new VariableExpr(context.newVariable());
+ varExpr.setSourceLocation(gbyKeyPair.getExpr().getSourceLocation());
+ gbyKeyPair.setVar(varExpr);
}
}
return super.visit(groupbyClause, arg);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/OperatorExpressionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/OperatorExpressionVisitor.java
index 7e228f4..f29dbf1 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/OperatorExpressionVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/OperatorExpressionVisitor.java
@@ -40,6 +40,7 @@
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class OperatorExpressionVisitor extends AbstractSqlppExpressionScopingVisitor {
@@ -76,14 +77,17 @@
}
private Expression processLikeOperator(OperatorExpr operatorExpr, OperatorType opType) {
- Expression likeExpr =
+ CallExpr likeExpr =
new CallExpr(new FunctionSignature(BuiltinFunctions.STRING_LIKE), operatorExpr.getExprList());
+ likeExpr.setSourceLocation(operatorExpr.getSourceLocation());
switch (opType) {
case LIKE:
return likeExpr;
case NOT_LIKE:
- return new CallExpr(new FunctionSignature(BuiltinFunctions.NOT),
+ CallExpr notLikeExpr = new CallExpr(new FunctionSignature(BuiltinFunctions.NOT),
new ArrayList<>(Collections.singletonList(likeExpr)));
+ notLikeExpr.setSourceLocation(operatorExpr.getSourceLocation());
+ return notLikeExpr;
default:
throw new IllegalArgumentException(String.valueOf(opType));
}
@@ -91,29 +95,37 @@
private Expression processInOperator(OperatorExpr operatorExpr, OperatorType opType) throws CompilationException {
VariableExpr bindingVar = new VariableExpr(context.newVariable());
+ bindingVar.setSourceLocation(operatorExpr.getSourceLocation());
Expression itemExpr = operatorExpr.getExprList().get(0);
Expression collectionExpr = operatorExpr.getExprList().get(1);
OperatorExpr comparison = new OperatorExpr();
comparison.addOperand(itemExpr);
comparison.addOperand(bindingVar);
comparison.setCurrentop(true);
+ comparison.setSourceLocation(operatorExpr.getSourceLocation());
if (opType == OperatorType.IN) {
comparison.addOperator(OperatorType.EQ);
- return new QuantifiedExpression(Quantifier.SOME,
+ QuantifiedExpression quantExpr = new QuantifiedExpression(Quantifier.SOME,
new ArrayList<>(Collections.singletonList(new QuantifiedPair(bindingVar, collectionExpr))),
comparison);
+ quantExpr.setSourceLocation(operatorExpr.getSourceLocation());
+ return quantExpr;
} else {
comparison.addOperator(OperatorType.NEQ);
- return new QuantifiedExpression(Quantifier.EVERY,
+ QuantifiedExpression quantExpr = new QuantifiedExpression(Quantifier.EVERY,
new ArrayList<>(Collections.singletonList(new QuantifiedPair(bindingVar, collectionExpr))),
comparison);
+ quantExpr.setSourceLocation(operatorExpr.getSourceLocation());
+ return quantExpr;
}
}
private Expression processConcatOperator(OperatorExpr operatorExpr) {
// All operators have to be "||"s (according to the grammar).
- return new CallExpr(new FunctionSignature(FunctionConstants.ASTERIX_NS, FunctionMapUtil.CONCAT, 1),
+ CallExpr callExpr = new CallExpr(new FunctionSignature(FunctionConstants.ASTERIX_NS, FunctionMapUtil.CONCAT, 1),
operatorExpr.getExprList());
+ callExpr.setSourceLocation(operatorExpr.getSourceLocation());
+ return callExpr;
}
private Expression processBetweenOperator(OperatorExpr operatorExpr, OperatorType opType)
@@ -124,24 +136,33 @@
Expression right = operatorExpr.getExprList().get(2);
// Creates the expression left <= target.
- Expression leftComparison = createLessThanExpression(left, target, operatorExpr.getHints());
+ Expression leftComparison =
+ createLessThanExpression(left, target, operatorExpr.getHints(), operatorExpr.getSourceLocation());
// Creates the expression target <= right.
- Expression rightComparison = createLessThanExpression(target, right, operatorExpr.getHints());
+ Expression rightComparison =
+ createLessThanExpression(target, right, operatorExpr.getHints(), operatorExpr.getSourceLocation());
OperatorExpr andExpr = new OperatorExpr();
andExpr.addOperand(leftComparison);
andExpr.addOperand(rightComparison);
andExpr.addOperator(OperatorType.AND);
- return opType == OperatorType.BETWEEN ? andExpr
- : new CallExpr(new FunctionSignature(BuiltinFunctions.NOT),
- new ArrayList<>(Collections.singletonList(andExpr)));
+ andExpr.setSourceLocation(operatorExpr.getSourceLocation());
+ if (opType == OperatorType.BETWEEN) {
+ return andExpr;
+ } else {
+ CallExpr callExpr = new CallExpr(new FunctionSignature(BuiltinFunctions.NOT),
+ new ArrayList<>(Collections.singletonList(andExpr)));
+ callExpr.setSourceLocation(operatorExpr.getSourceLocation());
+ return callExpr;
+ }
}
- private Expression createLessThanExpression(Expression lhs, Expression rhs, List<IExpressionAnnotation> hints)
- throws CompilationException {
+ private Expression createLessThanExpression(Expression lhs, Expression rhs, List<IExpressionAnnotation> hints,
+ SourceLocation sourceLoc) {
OperatorExpr comparison = new OperatorExpr();
comparison.addOperand(lhs);
comparison.addOperand(rhs);
comparison.addOperator(OperatorType.LE);
+ comparison.setSourceLocation(sourceLoc);
if (hints != null) {
for (IExpressionAnnotation hint : hints) {
comparison.addHint(hint);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SetOperationVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SetOperationVisitor.java
index ddf3cd6..f0a0f87 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SetOperationVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SetOperationVisitor.java
@@ -38,6 +38,7 @@
import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
import org.apache.asterix.lang.sqlpp.struct.SetOperationInput;
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* This visitor rewrites set operation queries with order by and limit into
@@ -81,19 +82,28 @@
OrderbyClause orderBy = selectExpression.getOrderbyClause();
LimitClause limit = selectExpression.getLimitClause();
+ SourceLocation sourceLoc = selectExpression.getSourceLocation();
+
// Wraps the set operation part with a subquery.
SelectExpression nestedSelectExpression = new SelectExpression(null, selectSetOperation, null, null, true);
+ nestedSelectExpression.setSourceLocation(sourceLoc);
VariableExpr newBindingVar = new VariableExpr(context.newVariable()); // Binding variable for the subquery.
+ newBindingVar.setSourceLocation(sourceLoc);
FromTerm newFromTerm = new FromTerm(nestedSelectExpression, newBindingVar, null, null);
+ newFromTerm.setSourceLocation(sourceLoc);
FromClause newFromClause = new FromClause(new ArrayList<>(Collections.singletonList(newFromTerm)));
+ newFromClause.setSourceLocation(sourceLoc);
SelectClause selectClause = new SelectClause(new SelectElement(newBindingVar), null, false);
+ selectClause.setSourceLocation(sourceLoc);
SelectBlock selectBlock = new SelectBlock(selectClause, newFromClause, null, null, null, null, null);
+ selectBlock.setSourceLocation(sourceLoc);
SelectSetOperation newSelectSetOperation =
new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
-
+ newSelectSetOperation.setSourceLocation(sourceLoc);
// Puts together the generated select-from-where query and order by/limit.
SelectExpression newSelectExpression = new SelectExpression(selectExpression.getLetList(),
newSelectSetOperation, orderBy, limit, selectExpression.isSubquery());
+ newSelectExpression.setSourceLocation(sourceLoc);
return super.visit(newSelectExpression, arg);
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java
index 8d59a3b..abfa14e 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppBuiltinFunctionRewriteVisitor.java
@@ -42,7 +42,8 @@
public Expression visit(CallExpr callExpr, ILangExpression arg) throws CompilationException {
//TODO(buyingyi): rewrite SQL temporal functions
FunctionSignature functionSignature = callExpr.getFunctionSignature();
- callExpr.setFunctionSignature(FunctionMapUtil.normalizeBuiltinFunctionSignature(functionSignature, true));
+ callExpr.setFunctionSignature(FunctionMapUtil.normalizeBuiltinFunctionSignature(functionSignature, true,
+ callExpr.getSourceLocation()));
List<Expression> newExprList = new ArrayList<>();
for (Expression expr : callExpr.getExprList()) {
newExprList.add(expr.accept(this, arg));
@@ -73,13 +74,16 @@
newExprList.add(thenExprList.get(index));
}
newExprList.add(newCaseExpr.getElseExpr());
- return new CallExpr(functionSignature, newExprList);
+ CallExpr callExpr = new CallExpr(functionSignature, newExprList);
+ callExpr.setSourceLocation(caseExpr.getSourceLocation());
+ return callExpr;
}
// Normalizes WHEN expressions so that it can have correct NULL/MISSING semantics as well
// as type promotion semantics.
private CaseExpression normalizeCaseExpr(CaseExpression caseExpr) throws CompilationException {
LiteralExpr trueLiteral = new LiteralExpr(TrueLiteral.INSTANCE);
+ trueLiteral.setSourceLocation(caseExpr.getSourceLocation());
Expression conditionExpr = caseExpr.getConditionExpr();
if (trueLiteral.equals(conditionExpr)) {
return caseExpr;
@@ -90,9 +94,13 @@
operatorExpr.addOperand((Expression) SqlppRewriteUtil.deepCopy(expr));
operatorExpr.addOperand(caseExpr.getConditionExpr());
operatorExpr.addOperator(OperatorType.EQ);
+ operatorExpr.setSourceLocation(expr.getSourceLocation());
normalizedWhenExprs.add(operatorExpr);
}
- return new CaseExpression(trueLiteral, normalizedWhenExprs, caseExpr.getThenExprs(), caseExpr.getElseExpr());
+ CaseExpression newCaseExpr =
+ new CaseExpression(trueLiteral, normalizedWhenExprs, caseExpr.getThenExprs(), caseExpr.getElseExpr());
+ newCaseExpr.setSourceLocation(caseExpr.getSourceLocation());
+ return newCaseExpr;
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java
index fd50c8e..80844ab 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppDistinctAggregationSugarVisitor.java
@@ -43,6 +43,7 @@
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* An AST pre-processor to rewrite distinct aggregates into regular aggregates as follows: <br/>
@@ -81,17 +82,28 @@
* rewrites {@code expr -> FROM expr AS i SELECT DISTINCT VALUE i}
*/
private Expression rewriteArgument(Expression argExpr) throws CompilationException {
+ SourceLocation sourceLoc = argExpr.getSourceLocation();
// From clause
VariableExpr fromBindingVar = new VariableExpr(context.newVariable());
+ fromBindingVar.setSourceLocation(sourceLoc);
FromTerm fromTerm = new FromTerm(argExpr, fromBindingVar, null, null);
+ fromTerm.setSourceLocation(sourceLoc);
FromClause fromClause = new FromClause(Collections.singletonList(fromTerm));
+ fromClause.setSourceLocation(sourceLoc);
// Select clause.
- SelectClause selectClause = new SelectClause(new SelectElement(fromBindingVar), null, true);
+ SelectElement selectElement = new SelectElement(fromBindingVar);
+ selectElement.setSourceLocation(sourceLoc);
+ SelectClause selectClause = new SelectClause(selectElement, null, true);
+ selectClause.setSourceLocation(sourceLoc);
// Construct the select expression.
SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, null, null, null, null);
+ selectBlock.setSourceLocation(sourceLoc);
SelectSetOperation selectSetOperation = new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
- return new SelectExpression(null, selectSetOperation, null, null, true);
+ selectSetOperation.setSourceLocation(sourceLoc);
+ SelectExpression selectExpr = new SelectExpression(null, selectSetOperation, null, null, true);
+ selectExpr.setSourceLocation(sourceLoc);
+ return selectExpr;
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
index c5f0a54..e133bad 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByAggregationSugarVisitor.java
@@ -19,6 +19,7 @@
package org.apache.asterix.lang.sqlpp.rewrites.visitor;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.ILangExpression;
@@ -48,6 +49,7 @@
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import java.util.ArrayList;
import java.util.Collection;
@@ -259,12 +261,16 @@
}
private Expression wrapAggregationArgument(Expression argExpr) throws CompilationException {
+ SourceLocation sourceLoc = argExpr.getSourceLocation();
Expression expr = argExpr;
Set<VariableExpr> freeVars = SqlppRewriteUtil.getFreeVariable(expr);
VariableExpr fromBindingVar = new VariableExpr(context.newVariable());
+ fromBindingVar.setSourceLocation(sourceLoc);
FromTerm fromTerm = new FromTerm(groupVar, fromBindingVar, null, null);
+ fromTerm.setSourceLocation(sourceLoc);
FromClause fromClause = new FromClause(Collections.singletonList(fromTerm));
+ fromClause.setSourceLocation(sourceLoc);
// Maps field variable expressions to field accesses.
Map<Expression, Expression> varExprMap = new HashMap<>();
@@ -272,31 +278,42 @@
// Reference to a field in the group variable.
if (fieldVars.containsKey(usedVar)) {
// Rewrites to a reference to a field in the group variable.
- varExprMap.put(usedVar,
- new FieldAccessor(fromBindingVar, new VarIdentifier(fieldVars.get(usedVar).getValue())));
+ FieldAccessor fa =
+ new FieldAccessor(fromBindingVar, new VarIdentifier(fieldVars.get(usedVar).getValue()));
+ fa.setSourceLocation(usedVar.getSourceLocation());
+ varExprMap.put(usedVar, fa);
} else if (outerVars.contains(usedVar)) {
// Do nothing
} else if (fieldVars.size() == 1) {
// Rewrites to a reference to a single field in the group variable.
- varExprMap.put(usedVar,
- new FieldAccessor(new FieldAccessor(fromBindingVar, fieldVars.values().iterator().next()),
- SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar())));
+ FieldAccessor faInner = new FieldAccessor(fromBindingVar, fieldVars.values().iterator().next());
+ faInner.setSourceLocation(usedVar.getSourceLocation());
+ FieldAccessor faOuter =
+ new FieldAccessor(faInner, SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar()));
+ faOuter.setSourceLocation(usedVar.getSourceLocation());
+ varExprMap.put(usedVar, faOuter);
} else {
- throw new CompilationException("Cannot resolve alias reference for undefined identifier "
- + usedVar.getVar().getValue() + " in " + fieldVars);
+ throw new CompilationException(ErrorCode.UNDEFINED_IDENTIFIER, usedVar.getSourceLocation(),
+ usedVar.getVar().getValue(), String.valueOf(fieldVars));
}
}
// Select clause.
SelectElement selectElement =
new SelectElement(SqlppRewriteUtil.substituteExpression(expr, varExprMap, context));
+ selectElement.setSourceLocation(sourceLoc);
SelectClause selectClause = new SelectClause(selectElement, null, false);
+ selectClause.setSourceLocation(sourceLoc);
// Construct the select expression.
SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, null, null, null, null);
+ selectBlock.setSourceLocation(sourceLoc);
SelectSetOperation selectSetOperation =
new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
- return new SelectExpression(null, selectSetOperation, null, null, true);
+ selectSetOperation.setSourceLocation(sourceLoc);
+ SelectExpression selectExpr = new SelectExpression(null, selectSetOperation, null, null, true);
+ selectExpr.setSourceLocation(sourceLoc);
+ return selectExpr;
}
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
index bee5830..faca85e 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
@@ -72,6 +72,7 @@
// Sets the group variable.
if (!gbyClause.hasGroupVar()) {
VariableExpr groupVar = new VariableExpr(context.newVariable());
+ groupVar.setSourceLocation(gbyClause.getSourceLocation());
gbyClause.setGroupVar(groupVar);
}
@@ -95,9 +96,11 @@
List<GbyVariableExpressionPair> gbyPairList = new ArrayList<>();
List<GbyVariableExpressionPair> decorPairList = new ArrayList<>();
VariableExpr groupVar = new VariableExpr(context.newVariable());
+ groupVar.setSourceLocation(selectBlock.getSourceLocation());
List<Pair<Expression, Identifier>> groupFieldList = createGroupFieldList(selectBlock);
GroupbyClause gbyClause = new GroupbyClause(gbyPairList, decorPairList, new HashMap<>(), groupVar,
groupFieldList, false, true);
+ gbyClause.setSourceLocation(selectBlock.getSourceLocation());
selectBlock.setGroupbyClause(gbyClause);
}
}
@@ -128,8 +131,10 @@
private void addToGroupFieldList(List<Pair<Expression, Identifier>> groupFieldList,
Collection<VariableExpr> fromBindingVars) {
for (VariableExpr varExpr : fromBindingVars) {
- Pair<Expression, Identifier> varIdPair = new Pair<>(new VariableExpr(varExpr.getVar()),
- SqlppVariableUtil.toUserDefinedVariableName(varExpr.getVar()));
+ VariableExpr newVarExpr = new VariableExpr(varExpr.getVar());
+ newVarExpr.setSourceLocation(varExpr.getSourceLocation());
+ Pair<Expression, Identifier> varIdPair =
+ new Pair<>(newVarExpr, SqlppVariableUtil.toUserDefinedVariableName(varExpr.getVar()));
groupFieldList.add(varIdPair);
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
index 04f8bc6..eadb4c1 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
@@ -23,6 +23,7 @@
import java.util.Set;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Expression.Kind;
@@ -43,6 +44,7 @@
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.commons.lang3.StringUtils;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class VariableCheckAndRewriteVisitor extends AbstractSqlppExpressionScopingVisitor {
@@ -94,9 +96,10 @@
private Expression resolve(VariableExpr varExpr, String dataverseName, String datasetName,
Expression originalExprWithUndefinedIdentifier, ILangExpression parent) throws CompilationException {
- String varName = varExpr.getVar().getValue();
+ SourceLocation sourceLoc = varExpr.getSourceLocation();
- VarIdentifier var = lookupVariable(varName);
+ String varName = varExpr.getVar().getValue();
+ VarIdentifier var = lookupVariable(varName, sourceLoc);
if (var != null) {
// Exists such an identifier
varExpr.setIsNewVar(false);
@@ -106,61 +109,63 @@
boolean resolveToDatasetOnly = resolveToDatasetOnly(originalExprWithUndefinedIdentifier, parent);
if (resolveToDatasetOnly) {
- return resolveAsDataset(dataverseName, datasetName);
+ return resolveAsDataset(dataverseName, datasetName, sourceLoc);
}
Set<VariableExpr> localVars = scopeChecker.getCurrentScope().getLiveVariables(scopeChecker.getPrecedingScope());
switch (localVars.size()) {
case 0:
- return resolveAsDataset(dataverseName, datasetName);
+ return resolveAsDataset(dataverseName, datasetName, sourceLoc);
case 1:
return resolveAsFieldAccess(localVars.iterator().next(),
- SqlppVariableUtil.toUserDefinedVariableName(varName).getValue());
+ SqlppVariableUtil.toUserDefinedVariableName(varName).getValue(), sourceLoc);
default:
// More than one possibilities.
- throw new CompilationException("Cannot resolve ambiguous alias reference for undefined identifier "
- + SqlppVariableUtil.toUserDefinedVariableName(varName).getValue() + " in " + localVars);
+ throw new CompilationException(ErrorCode.AMBIGUOUS_IDENTIFIER, sourceLoc,
+ SqlppVariableUtil.toUserDefinedVariableName(varName).getValue(), String.valueOf(localVars));
}
}
- private VarIdentifier lookupVariable(String varName) throws CompilationException {
+ private VarIdentifier lookupVariable(String varName, SourceLocation sourceLoc) throws CompilationException {
if (scopeChecker.isInForbiddenScopes(varName)) {
- throw new CompilationException(
- "Inside limit clauses, it is disallowed to reference a variable having the same name"
- + " as any variable bound in the same scope as the limit clause.");
+ throw new CompilationException(ErrorCode.FORBIDDEN_SCOPE, sourceLoc);
}
Identifier ident = scopeChecker.lookupSymbol(varName);
return ident != null ? (VarIdentifier) ident : null;
}
- private Expression resolveAsDataset(String dataverseName, String datasetName) throws CompilationException {
- if (!datasetExists(dataverseName, datasetName)) {
- throwUnresolvableError(dataverseName, datasetName);
+ private Expression resolveAsDataset(String dataverseName, String datasetName, SourceLocation sourceLoc)
+ throws CompilationException {
+ if (!datasetExists(dataverseName, datasetName, sourceLoc)) {
+ throwUnresolvableError(dataverseName, datasetName, sourceLoc);
}
String fullyQualifiedName = dataverseName == null ? datasetName : dataverseName + "." + datasetName;
List<Expression> argList = new ArrayList<>(1);
argList.add(new LiteralExpr(new StringLiteral(fullyQualifiedName)));
- return new CallExpr(new FunctionSignature(BuiltinFunctions.DATASET), argList);
+ CallExpr callExpr = new CallExpr(new FunctionSignature(BuiltinFunctions.DATASET), argList);
+ callExpr.setSourceLocation(sourceLoc);
+ return callExpr;
}
// Rewrites for an field access by name
- private Expression resolveAsFieldAccess(VariableExpr var, String fieldName) throws CompilationException {
+ private Expression resolveAsFieldAccess(VariableExpr var, String fieldName, SourceLocation sourceLoc) {
List<Expression> argList = new ArrayList<>(2);
argList.add(var);
argList.add(new LiteralExpr(new StringLiteral(fieldName)));
- return new CallExpr(new FunctionSignature(BuiltinFunctions.FIELD_ACCESS_BY_NAME), argList);
+ CallExpr callExpr = new CallExpr(new FunctionSignature(BuiltinFunctions.FIELD_ACCESS_BY_NAME), argList);
+ callExpr.setSourceLocation(sourceLoc);
+ return callExpr;
}
- private void throwUnresolvableError(String dataverseName, String datasetName) throws CompilationException {
+ private void throwUnresolvableError(String dataverseName, String datasetName, SourceLocation sourceLoc)
+ throws CompilationException {
String defaultDataverseName = metadataProvider.getDefaultDataverseName();
if (dataverseName == null && defaultDataverseName == null) {
- throw new CompilationException("Cannot find dataset " + datasetName
- + " because there is no dataverse declared, nor an alias with name " + datasetName + "!");
+ throw new CompilationException(ErrorCode.UNKNOWN_DATASET, sourceLoc, datasetName);
}
//If no available dataset nor in-scope variable to resolve to, we throw an error.
- throw new CompilationException("Cannot find dataset " + datasetName + " in dataverse "
- + (dataverseName == null ? defaultDataverseName : dataverseName) + " nor an alias with name "
- + datasetName + "!");
+ throw new CompilationException(ErrorCode.UNKNOWN_DATASET_IN_DATAVERSE, sourceLoc, datasetName,
+ dataverseName == null ? defaultDataverseName : dataverseName);
}
// For a From/Join/UNNEST/Quantifiers binding expression, we resolve the undefined identifier reference as
@@ -171,12 +176,13 @@
return parent.accept(visitor, originalExpressionWithUndefinedIdentifier);
}
- private boolean datasetExists(String dataverseName, String datasetName) throws CompilationException {
+ private boolean datasetExists(String dataverseName, String datasetName, SourceLocation sourceLoc)
+ throws CompilationException {
try {
return metadataProvider.findDataset(dataverseName, datasetName) != null
|| fullyQualifiedDatasetNameExists(datasetName);
} catch (AlgebricksException e) {
- throw new CompilationException(e);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, e, sourceLoc, e.getMessage());
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/ExpressionToVariableUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/ExpressionToVariableUtil.java
index 96c61f2..c0eb2d9 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/ExpressionToVariableUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/ExpressionToVariableUtil.java
@@ -26,6 +26,7 @@
import org.apache.asterix.lang.common.expression.VariableExpr;
import org.apache.asterix.lang.common.struct.VarIdentifier;
import org.apache.asterix.lang.sqlpp.parser.ParseException;
+import org.apache.asterix.lang.sqlpp.parser.SqlppParseException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -44,13 +45,15 @@
FieldAccessor fa = (FieldAccessor) expr;
return SqlppVariableUtil.toInternalVariableName(fa.getIdent().getValue());
} else {
+ String exprText;
try {
- throw new ParseException(
- "Need an alias for the enclosed expression:\n" + SqlppFormatPrintUtil.toString(expr));
+ exprText = SqlppFormatPrintUtil.toString(expr);
} catch (CompilationException e) {
LOGGER.error(e.getLocalizedMessage(), e);
- throw new ParseException(e.getLocalizedMessage());
+ throw new SqlppParseException(expr.getSourceLocation(), e.getLocalizedMessage());
}
+ throw new SqlppParseException(expr.getSourceLocation(),
+ "Need an alias for the enclosed expression:\n" + exprText);
}
}
@@ -93,6 +96,7 @@
VarIdentifier var = new VarIdentifier(varName);
VariableExpr varExpr = new VariableExpr();
varExpr.setVar(var);
+ varExpr.setSourceLocation(expr.getSourceLocation());
return varExpr;
} catch (ParseException e) {
if (raiseError) {
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java
index 1ff7c9e..beb031a 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/FunctionMapUtil.java
@@ -24,6 +24,7 @@
import java.util.Map;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionConstants;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.lang.common.expression.CallExpr;
@@ -33,6 +34,7 @@
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FunctionMapUtil {
@@ -114,16 +116,18 @@
*
* @param fs,
* the user typed function.
+ * @param sourceLoc
* @return the system internal function.
*/
- public static FunctionSignature normalizeBuiltinFunctionSignature(FunctionSignature fs, boolean checkSql92Aggregate)
- throws CompilationException {
+ public static FunctionSignature normalizeBuiltinFunctionSignature(FunctionSignature fs, boolean checkSql92Aggregate,
+ SourceLocation sourceLoc) throws CompilationException {
if (isCoreAggregateFunction(fs)) {
return internalizeCoreAggregateFunctionName(fs);
} else if (checkSql92Aggregate && isSql92AggregateFunction(fs)) {
- throw new CompilationException(fs.getName()
- + " is a SQL-92 aggregate function. The SQL++ core aggregate function " + CORE_SQL_AGGREGATE_PREFIX
- + fs.getName().toLowerCase() + " could potentially express the intent.");
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
+ fs.getName() + " is a SQL-92 aggregate function. The SQL++ core aggregate function "
+ + CORE_SQL_AGGREGATE_PREFIX + fs.getName().toLowerCase()
+ + " could potentially express the intent.");
}
String mappedName = CommonFunctionMapUtil.normalizeBuiltinFunctionSignature(fs).getName();
return new FunctionSignature(fs.getNamespace(), mappedName, fs.getArity());
@@ -143,8 +147,10 @@
return callExpr;
}
callExpr.setFunctionSignature(new FunctionSignature(FunctionConstants.ASTERIX_NS, internalFuncName, 1));
- callExpr.setExprList(new ArrayList<>(Collections.singletonList(
- new ListConstructor(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR, callExpr.getExprList()))));
+ ListConstructor listConstr =
+ new ListConstructor(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR, callExpr.getExprList());
+ listConstr.setSourceLocation(callExpr.getSourceLocation());
+ callExpr.setExprList(new ArrayList<>(Collections.singletonList(listConstr)));
return callExpr;
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java
index 228ea23..5a30b42 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java
@@ -83,6 +83,7 @@
// Creates a wrapper query for the expression so that if the expression itself
// is the key, it can also be replaced.
Query wrapper = new Query(false);
+ wrapper.setSourceLocation(expression.getSourceLocation());
wrapper.setBody(expression);
// Creates a substitution visitor.
SqlppSubstituteExpressionVisitor visitor = new SqlppSubstituteExpressionVisitor(context, exprMap);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
index 1166148..6635a0e 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
@@ -78,7 +78,9 @@
for (FromTerm fromTerm : fromClause.getFromTerms()) {
fromTerms.add((FromTerm) fromTerm.accept(this, arg));
}
- return new FromClause(fromTerms);
+ FromClause copy = new FromClause(fromTerms);
+ copy.setSourceLocation(fromClause.getSourceLocation());
+ return copy;
}
@Override
@@ -94,7 +96,9 @@
for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) {
correlateClauses.add((AbstractBinaryCorrelateClause) correlateClause.accept(this, arg));
}
- return new FromTerm(fromExpr, fromVar, positionVar, correlateClauses);
+ FromTerm copy = new FromTerm(fromExpr, fromVar, positionVar, correlateClauses);
+ copy.setSourceLocation(fromTerm.getSourceLocation());
+ return copy;
}
@Override
@@ -104,8 +108,10 @@
VariableExpr rightPositionVar = joinClause.getPositionalVariable() == null ? null
: (VariableExpr) joinClause.getPositionalVariable().accept(this, arg);
Expression conditionExpresion = (Expression) joinClause.getConditionExpression().accept(this, arg);
- return new JoinClause(joinClause.getJoinType(), rightExpression, rightVar, rightPositionVar,
+ JoinClause copy = new JoinClause(joinClause.getJoinType(), rightExpression, rightVar, rightPositionVar,
conditionExpresion);
+ copy.setSourceLocation(joinClause.getSourceLocation());
+ return copy;
}
@Override
@@ -115,8 +121,10 @@
VariableExpr rightPositionVar = nestClause.getPositionalVariable() == null ? null
: (VariableExpr) nestClause.getPositionalVariable().accept(this, arg);
Expression conditionExpresion = (Expression) nestClause.getConditionExpression().accept(this, arg);
- return new NestClause(nestClause.getJoinType(), rightExpression, rightVar, rightPositionVar,
+ NestClause copy = new NestClause(nestClause.getJoinType(), rightExpression, rightVar, rightPositionVar,
conditionExpresion);
+ copy.setSourceLocation(nestClause.getSourceLocation());
+ return copy;
}
@Override
@@ -125,13 +133,18 @@
VariableExpr rightVar = (VariableExpr) unnestClause.getRightVariable().accept(this, arg);
VariableExpr rightPositionVar = unnestClause.getPositionalVariable() == null ? null
: (VariableExpr) unnestClause.getPositionalVariable().accept(this, arg);
- return new UnnestClause(unnestClause.getJoinType(), rightExpression, rightVar, rightPositionVar);
+ UnnestClause copy = new UnnestClause(unnestClause.getJoinType(), rightExpression, rightVar, rightPositionVar);
+ copy.setSourceLocation(unnestClause.getSourceLocation());
+ return copy;
}
@Override
public Projection visit(Projection projection, Void arg) throws CompilationException {
- return new Projection(projection.star() ? null : (Expression) projection.getExpression().accept(this, arg),
- projection.getName(), projection.star(), projection.varStar());
+ Projection copy =
+ new Projection(projection.star() ? null : (Expression) projection.getExpression().accept(this, arg),
+ projection.getName(), projection.star(), projection.varStar());
+ copy.setSourceLocation(projection.getSourceLocation());
+ return copy;
}
@Override
@@ -170,8 +183,10 @@
havingClause = (HavingClause) selectBlock.getHavingClause().accept(this, arg);
}
selectCluase = (SelectClause) selectBlock.getSelectClause().accept(this, arg);
- return new SelectBlock(selectCluase, fromClause, letClauses, whereClause, gbyClause, gbyLetClauses,
+ SelectBlock copy = new SelectBlock(selectCluase, fromClause, letClauses, whereClause, gbyClause, gbyLetClauses,
havingClause);
+ copy.setSourceLocation(selectBlock.getSourceLocation());
+ return copy;
}
@Override
@@ -184,12 +199,16 @@
if (selectClause.selectRegular()) {
selectRegular = (SelectRegular) selectClause.getSelectRegular().accept(this, arg);
}
- return new SelectClause(selectElement, selectRegular, selectClause.distinct());
+ SelectClause copy = new SelectClause(selectElement, selectRegular, selectClause.distinct());
+ copy.setSourceLocation(selectClause.getSourceLocation());
+ return copy;
}
@Override
public SelectElement visit(SelectElement selectElement, Void arg) throws CompilationException {
- return new SelectElement((Expression) selectElement.getExpression().accept(this, arg));
+ SelectElement copy = new SelectElement((Expression) selectElement.getExpression().accept(this, arg));
+ copy.setSourceLocation(selectElement.getSourceLocation());
+ return copy;
}
@Override
@@ -198,7 +217,9 @@
for (Projection projection : selectRegular.getProjections()) {
projections.add((Projection) projection.accept(this, arg));
}
- return new SelectRegular(projections);
+ SelectRegular copy = new SelectRegular(projections);
+ copy.setSourceLocation(selectRegular.getSourceLocation());
+ return copy;
}
@Override
@@ -221,28 +242,39 @@
}
rightInputs.add(new SetOperationRight(right.getSetOpType(), right.isSetSemantics(), newRightInput));
}
- return new SelectSetOperation(newLeftInput, rightInputs);
+ SelectSetOperation copy = new SelectSetOperation(newLeftInput, rightInputs);
+ copy.setSourceLocation(selectSetOperation.getSourceLocation());
+ return copy;
}
@Override
public HavingClause visit(HavingClause havingClause, Void arg) throws CompilationException {
- return new HavingClause((Expression) havingClause.getFilterExpression().accept(this, arg));
+ HavingClause copy = new HavingClause((Expression) havingClause.getFilterExpression().accept(this, arg));
+ copy.setSourceLocation(havingClause.getSourceLocation());
+ return copy;
}
@Override
public Query visit(Query q, Void arg) throws CompilationException {
- return new Query(q.isExplain(), q.isTopLevel(), (Expression) q.getBody().accept(this, arg), q.getVarCounter(),
- q.getExternalVars());
+ Query copy = new Query(q.isExplain(), q.isTopLevel(), (Expression) q.getBody().accept(this, arg),
+ q.getVarCounter(), q.getExternalVars());
+ copy.setSourceLocation(q.getSourceLocation());
+ return copy;
}
@Override
public FunctionDecl visit(FunctionDecl fd, Void arg) throws CompilationException {
- return new FunctionDecl(fd.getSignature(), fd.getParamList(), (Expression) fd.getFuncBody().accept(this, arg));
+ FunctionDecl copy =
+ new FunctionDecl(fd.getSignature(), fd.getParamList(), (Expression) fd.getFuncBody().accept(this, arg));
+ copy.setSourceLocation(fd.getSourceLocation());
+ return copy;
}
@Override
public WhereClause visit(WhereClause whereClause, Void arg) throws CompilationException {
- return new WhereClause((Expression) whereClause.getWhereExpr().accept(this, arg));
+ WhereClause copy = new WhereClause((Expression) whereClause.getWhereExpr().accept(this, arg));
+ copy.setSourceLocation(whereClause.getSourceLocation());
+ return copy;
}
@Override
@@ -251,7 +283,9 @@
for (Expression orderExpr : oc.getOrderbyList()) {
newOrderbyList.add((Expression) orderExpr.accept(this, arg));
}
- return new OrderbyClause(newOrderbyList, oc.getModifierList());
+ OrderbyClause copy = new OrderbyClause(newOrderbyList, oc.getModifierList());
+ copy.setSourceLocation(oc.getSourceLocation());
+ return copy;
}
@Override
@@ -281,21 +315,27 @@
for (Pair<Expression, Identifier> field : gc.getGroupFieldList()) {
groupFieldList.add(new Pair<>((Expression) field.first.accept(this, arg), field.second));
}
- return new GroupbyClause(gbyPairList, decorPairList, withVarMap, groupVarExpr, groupFieldList,
+ GroupbyClause copy = new GroupbyClause(gbyPairList, decorPairList, withVarMap, groupVarExpr, groupFieldList,
gc.hasHashGroupByHint(), gc.isGroupAll());
+ copy.setSourceLocation(gc.getSourceLocation());
+ return copy;
}
@Override
public LimitClause visit(LimitClause limitClause, Void arg) throws CompilationException {
Expression limitExpr = (Expression) limitClause.getLimitExpr().accept(this, arg);
Expression offsetExpr = limitClause.hasOffset() ? (Expression) limitClause.getOffset().accept(this, arg) : null;
- return new LimitClause(limitExpr, offsetExpr);
+ LimitClause copy = new LimitClause(limitExpr, offsetExpr);
+ copy.setSourceLocation(limitClause.getSourceLocation());
+ return copy;
}
@Override
public LetClause visit(LetClause letClause, Void arg) throws CompilationException {
- return new LetClause((VariableExpr) letClause.getVarExpr().accept(this, arg),
+ LetClause copy = new LetClause((VariableExpr) letClause.getVarExpr().accept(this, arg),
(Expression) letClause.getBindingExpr().accept(this, arg));
+ copy.setSourceLocation(letClause.getSourceLocation());
+ return copy;
}
@Override
@@ -317,11 +357,7 @@
// visit order by
if (selectExpression.hasOrderby()) {
- List<Expression> orderExprs = new ArrayList<>();
- for (Expression orderExpr : selectExpression.getOrderbyClause().getOrderbyList()) {
- orderExprs.add((Expression) orderExpr.accept(this, arg));
- }
- orderby = new OrderbyClause(orderExprs, selectExpression.getOrderbyClause().getModifierList());
+ orderby = (OrderbyClause) selectExpression.getOrderbyClause().accept(this, arg);
}
// visit limit
@@ -338,7 +374,9 @@
@Override
public ListConstructor visit(ListConstructor lc, Void arg) throws CompilationException {
- return new ListConstructor(lc.getType(), copyExprList(lc.getExprList(), arg));
+ ListConstructor copy = new ListConstructor(lc.getType(), copyExprList(lc.getExprList(), arg));
+ copy.setSourceLocation(lc.getSourceLocation());
+ return copy;
}
@Override
@@ -349,13 +387,17 @@
(Expression) binding.getRightExpr().accept(this, arg));
bindings.add(fb);
}
- return new RecordConstructor(bindings);
+ RecordConstructor copy = new RecordConstructor(bindings);
+ copy.setSourceLocation(rc.getSourceLocation());
+ return copy;
}
@Override
public OperatorExpr visit(OperatorExpr operatorExpr, Void arg) throws CompilationException {
- return new OperatorExpr(copyExprList(operatorExpr.getExprList(), arg), operatorExpr.getExprBroadcastIdx(),
- operatorExpr.getOpList(), operatorExpr.isCurrentop());
+ OperatorExpr copy = new OperatorExpr(copyExprList(operatorExpr.getExprList(), arg),
+ operatorExpr.getExprBroadcastIdx(), operatorExpr.getOpList(), operatorExpr.isCurrentop());
+ copy.setSourceLocation(operatorExpr.getSourceLocation());
+ return copy;
}
@Override
@@ -363,7 +405,9 @@
Expression conditionExpr = (Expression) ifExpr.getCondExpr().accept(this, arg);
Expression thenExpr = (Expression) ifExpr.getThenExpr().accept(this, arg);
Expression elseExpr = (Expression) ifExpr.getElseExpr().accept(this, arg);
- return new IfExpr(conditionExpr, thenExpr, elseExpr);
+ IfExpr copy = new IfExpr(conditionExpr, thenExpr, elseExpr);
+ copy.setSourceLocation(ifExpr.getSourceLocation());
+ return copy;
}
@Override
@@ -375,7 +419,9 @@
quantifiedPairs.add(new QuantifiedPair(var, expr));
}
Expression condition = (Expression) qe.getSatisfiesExpr().accept(this, arg);
- return new QuantifiedExpression(qe.getQuantifier(), quantifiedPairs, condition);
+ QuantifiedExpression copy = new QuantifiedExpression(qe.getQuantifier(), quantifiedPairs, condition);
+ copy.setSourceLocation(qe.getSourceLocation());
+ return copy;
}
@Override
@@ -384,24 +430,31 @@
for (Expression expr : callExpr.getExprList()) {
newExprList.add((Expression) expr.accept(this, arg));
}
- return new CallExpr(callExpr.getFunctionSignature(), newExprList);
+ CallExpr copy = new CallExpr(callExpr.getFunctionSignature(), newExprList);
+ copy.setSourceLocation(callExpr.getSourceLocation());
+ return copy;
}
@Override
public VariableExpr visit(VariableExpr varExpr, Void arg) throws CompilationException {
VariableExpr clonedVar = new VariableExpr(new VarIdentifier(varExpr.getVar()));
+ clonedVar.setSourceLocation(varExpr.getSourceLocation());
clonedVar.setIsNewVar(varExpr.getIsNewVar());
return clonedVar;
}
@Override
public UnaryExpr visit(UnaryExpr u, Void arg) throws CompilationException {
- return new UnaryExpr(u.getExprType(), (Expression) u.getExpr().accept(this, arg));
+ UnaryExpr copy = new UnaryExpr(u.getExprType(), (Expression) u.getExpr().accept(this, arg));
+ copy.setSourceLocation(u.getSourceLocation());
+ return copy;
}
@Override
public FieldAccessor visit(FieldAccessor fa, Void arg) throws CompilationException {
- return new FieldAccessor((Expression) fa.getExpr().accept(this, arg), fa.getIdent());
+ FieldAccessor copy = new FieldAccessor((Expression) fa.getExpr().accept(this, arg), fa.getIdent());
+ copy.setSourceLocation(fa.getSourceLocation());
+ return copy;
}
@Override
@@ -411,7 +464,9 @@
if (ia.getIndexExpr() != null) {
indexExpr = (Expression) ia.getIndexExpr().accept(this, arg);
}
- return new IndexAccessor(expr, indexExpr);
+ IndexAccessor copy = new IndexAccessor(expr, indexExpr);
+ copy.setSourceLocation(ia.getSourceLocation());
+ return copy;
}
@Override
@@ -420,7 +475,9 @@
List<Expression> whenExprList = copyExprList(caseExpr.getWhenExprs(), arg);
List<Expression> thenExprList = copyExprList(caseExpr.getThenExprs(), arg);
Expression elseExpr = (Expression) caseExpr.getElseExpr().accept(this, arg);
- return new CaseExpression(conditionExpr, whenExprList, thenExprList, elseExpr);
+ CaseExpression copy = new CaseExpression(conditionExpr, whenExprList, thenExprList, elseExpr);
+ copy.setSourceLocation(caseExpr.getSourceLocation());
+ return copy;
}
private List<Expression> copyExprList(List<Expression> exprs, Void arg) throws CompilationException {
@@ -430,5 +487,4 @@
}
return newExprList;
}
-
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
index 5f6b75b..0973bec 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppAstPrintVisitor.java
@@ -250,7 +250,7 @@
public Void visit(CallExpr pf, Integer step) throws CompilationException {
FunctionSignature functionSignature = pf.getFunctionSignature();
FunctionSignature normalizedFunctionSignature =
- FunctionMapUtil.normalizeBuiltinFunctionSignature(functionSignature, false);
+ FunctionMapUtil.normalizeBuiltinFunctionSignature(functionSignature, false, pf.getSourceLocation());
if (BuiltinFunctions.isBuiltinCompilerFunction(normalizedFunctionSignature, true)) {
functionSignature = normalizedFunctionSignature;
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
index 0222e0e..e00a3bd 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
@@ -77,7 +77,9 @@
// therefore we propagate the substitution environment.
currentEnv = p.second;
}
- return new Pair<>(new FromClause(newFromTerms), currentEnv);
+ FromClause newFromClause = new FromClause(newFromTerms);
+ newFromClause.setSourceLocation(fromClause.getSourceLocation());
+ return new Pair<>(newFromClause, currentEnv);
}
@Override
@@ -114,7 +116,9 @@
}
}
}
- return new Pair<>(new FromTerm(newLeftExpr, newLeftVar, newLeftPosVar, newCorrelateClauses), currentEnv);
+ FromTerm newFromTerm = new FromTerm(newLeftExpr, newLeftVar, newLeftPosVar, newCorrelateClauses);
+ newFromTerm.setSourceLocation(fromTerm.getSourceLocation());
+ return new Pair<>(newFromTerm, currentEnv);
}
@Override
@@ -139,6 +143,7 @@
JoinClause newJoinClause =
new JoinClause(joinClause.getJoinType(), newRightExpr, newRightVar, newRightPosVar, conditionExpr);
+ newJoinClause.setSourceLocation(joinClause.getSourceLocation());
return new Pair<>(newJoinClause, currentEnv);
}
@@ -162,9 +167,10 @@
// The condition can refer to the newRightVar and newRightPosVar.
Expression conditionExpr = (Expression) nestClause.getConditionExpression().accept(this, currentEnv).first;
- NestClause newJoinClause =
+ NestClause newNestClause =
new NestClause(nestClause.getJoinType(), rightExpr, newRightVar, newRightPosVar, conditionExpr);
- return new Pair<>(newJoinClause, currentEnv);
+ newNestClause.setSourceLocation(nestClause.getSourceLocation());
+ return new Pair<>(newNestClause, currentEnv);
}
@Override
@@ -185,9 +191,10 @@
currentEnv.removeSubstitution(newRightPosVar);
}
// The condition can refer to the newRightVar and newRightPosVar.
- UnnestClause newJoinClause =
+ UnnestClause newUnnestClause =
new UnnestClause(unnestClause.getJoinType(), rightExpr, newRightVar, newRightPosVar);
- return new Pair<>(newJoinClause, currentEnv);
+ newUnnestClause.setSourceLocation(unnestClause.getSourceLocation());
+ return new Pair<>(newUnnestClause, currentEnv);
}
@Override
@@ -198,6 +205,7 @@
}
Projection newProjection = new Projection((Expression) projection.getExpression().accept(this, env).first,
projection.getName(), projection.star(), projection.varStar());
+ newProjection.setSourceLocation(projection.getSourceLocation());
return new Pair<>(newProjection, env);
}
@@ -255,8 +263,10 @@
WhereClause whereClause = newWhere == null ? null : (WhereClause) newWhere.first;
GroupbyClause groupbyClause = newGroupby == null ? null : (GroupbyClause) newGroupby.first;
HavingClause havingClause = newHaving == null ? null : (HavingClause) newHaving.first;
- return new Pair<>(new SelectBlock((SelectClause) newSelect.first, fromClause, newLetClauses, whereClause,
- groupbyClause, newLetClausesAfterGby, havingClause), currentEnv);
+ SelectBlock newSelectBlock = new SelectBlock((SelectClause) newSelect.first, fromClause, newLetClauses,
+ whereClause, groupbyClause, newLetClausesAfterGby, havingClause);
+ newSelectBlock.setSourceLocation(selectBlock.getSourceLocation());
+ return new Pair<>(newSelectBlock, currentEnv);
}
@Override
@@ -266,13 +276,15 @@
if (selectClause.selectElement()) {
Pair<ILangExpression, VariableSubstitutionEnvironment> newSelectElement =
selectClause.getSelectElement().accept(this, env);
- return new Pair<>(new SelectClause((SelectElement) newSelectElement.first, null, distinct),
- newSelectElement.second);
+ SelectClause newSelectClause = new SelectClause((SelectElement) newSelectElement.first, null, distinct);
+ newSelectClause.setSourceLocation(selectClause.getSourceLocation());
+ return new Pair<>(newSelectClause, newSelectElement.second);
} else {
Pair<ILangExpression, VariableSubstitutionEnvironment> newSelectRegular =
selectClause.getSelectRegular().accept(this, env);
- return new Pair<>(new SelectClause(null, (SelectRegular) newSelectRegular.first, distinct),
- newSelectRegular.second);
+ SelectClause newSelectClause = new SelectClause(null, (SelectRegular) newSelectRegular.first, distinct);
+ newSelectClause.setSourceLocation(selectClause.getSourceLocation());
+ return new Pair<>(newSelectClause, newSelectRegular.second);
}
}
@@ -281,7 +293,9 @@
VariableSubstitutionEnvironment env) throws CompilationException {
Pair<ILangExpression, VariableSubstitutionEnvironment> newExpr =
selectElement.getExpression().accept(this, env);
- return new Pair<>(new SelectElement((Expression) newExpr.first), newExpr.second);
+ SelectElement newSelectElement = new SelectElement((Expression) newExpr.first);
+ newSelectElement.setSourceLocation(selectElement.getSourceLocation());
+ return new Pair<>(newSelectElement, newExpr.second);
}
@Override
@@ -291,7 +305,9 @@
for (Projection projection : selectRegular.getProjections()) {
newProjections.add((Projection) projection.accept(this, env).first);
}
- return new Pair<>(new SelectRegular(newProjections), env);
+ SelectRegular newSelectRegular = new SelectRegular(newProjections);
+ newSelectRegular.setSourceLocation(selectRegular.getSourceLocation());
+ return new Pair<>(newSelectRegular, env);
}
@Override
@@ -329,6 +345,7 @@
}
}
SelectSetOperation newSelectSetOperation = new SelectSetOperation(newLeftInput, newRightInputs);
+ newSelectSetOperation.setSourceLocation(selectSetOperation.getSourceLocation());
return new Pair<>(newSelectSetOperation, selectSetOperation.hasRightInputs() ? env : leftResult.second);
}
@@ -366,9 +383,10 @@
newLimitClause = (LimitClause) p.first;
currentEnv = p.second;
}
- return new Pair<>(
- new SelectExpression(newLetList, newSelectSetOperation, newOrderbyClause, newLimitClause, subquery),
- currentEnv);
+ SelectExpression newSelectExpression =
+ new SelectExpression(newLetList, newSelectSetOperation, newOrderbyClause, newLimitClause, subquery);
+ newSelectExpression.setSourceLocation(selectExpression.getSourceLocation());
+ return new Pair<>(newSelectExpression, currentEnv);
}
@Override
@@ -376,6 +394,7 @@
VariableSubstitutionEnvironment env) throws CompilationException {
Pair<ILangExpression, VariableSubstitutionEnvironment> p = havingClause.getFilterExpression().accept(this, env);
HavingClause newHavingClause = new HavingClause((Expression) p.first);
+ newHavingClause.setSourceLocation(havingClause.getSourceLocation());
return new Pair<>(newHavingClause, p.second);
}
@@ -389,7 +408,7 @@
VariableCloneAndSubstitutionUtil.visitAndCloneExprList(caseExpr.getThenExprs(), env, this);
Expression elseExpr = (Expression) caseExpr.getElseExpr().accept(this, env).first;
CaseExpression newCaseExpr = new CaseExpression(conditionExpr, whenExprList, thenExprList, elseExpr);
+ newCaseExpr.setSourceLocation(caseExpr.getSourceLocation());
return new Pair<>(newCaseExpr, env);
}
-
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppDeleteRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppDeleteRewriteVisitor.java
index 4542bab..bf57184 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppDeleteRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppDeleteRewriteVisitor.java
@@ -59,36 +59,45 @@
LiteralExpr argumentLiteral = new LiteralExpr(new StringLiteral(arg));
arguments.add(argumentLiteral);
CallExpr callExpression = new CallExpr(new FunctionSignature(BuiltinFunctions.DATASET), arguments);
+ callExpression.setSourceLocation(deleteStmt.getSourceLocation());
// From clause.
VariableExpr var = deleteStmt.getVariableExpr();
FromTerm fromTerm = new FromTerm(callExpression, var, null, null);
- @SuppressWarnings("unchecked")
+ fromTerm.setSourceLocation(var.getSourceLocation());
FromClause fromClause = new FromClause(Collections.singletonList(fromTerm));
+ fromClause.setSourceLocation(var.getSourceLocation());
// Where clause.
WhereClause whereClause = null;
Expression condition = deleteStmt.getCondition();
if (condition != null) {
whereClause = new WhereClause(condition);
+ whereClause.setSourceLocation(condition.getSourceLocation());
}
// Select clause.
VariableExpr returnExpr = new VariableExpr(var.getVar());
returnExpr.setIsNewVar(false);
+ returnExpr.setSourceLocation(var.getSourceLocation());
SelectElement selectElement = new SelectElement(returnExpr);
+ selectElement.setSourceLocation(deleteStmt.getSourceLocation());
SelectClause selectClause = new SelectClause(selectElement, null, false);
+ selectClause.setSourceLocation(deleteStmt.getSourceLocation());
// Construct the select expression.
SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, whereClause, null, null, null);
+ selectBlock.setSourceLocation(var.getSourceLocation());
SelectSetOperation selectSetOperation = new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
+ selectSetOperation.setSourceLocation(var.getSourceLocation());
SelectExpression selectExpression = new SelectExpression(null, selectSetOperation, null, null, false);
+ selectExpression.setSourceLocation(var.getSourceLocation());
Query query = new Query(false, false, selectExpression, 0);
query.setBody(selectExpression);
+ query.setSourceLocation(deleteStmt.getSourceLocation());
// return the delete statement.
deleteStmt.setQuery(query);
return null;
}
-
}
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 bcb131b..392ccdb 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
@@ -25,6 +25,7 @@
import java.util.Set;
import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.ILangExpression;
import org.apache.asterix.lang.common.clause.GroupbyClause;
@@ -54,6 +55,7 @@
import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.Counter;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class AbstractSqlppExpressionScopingVisitor extends AbstractSqlppSimpleExpressionVisitor {
@@ -92,7 +94,7 @@
// Merges the variables defined in the current from term into the scope of the current from clause.
Scope scopeForFromTerm = scopeChecker.removeCurrentScope();
- mergeScopes(scopeForFromClause, scopeForFromTerm);
+ mergeScopes(scopeForFromClause, scopeForFromTerm, fromTerm.getSourceLocation());
}
return null;
}
@@ -105,12 +107,12 @@
// Registers the data item variable.
VariableExpr leftVar = fromTerm.getLeftVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), leftVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), leftVar.getVar(), leftVar.getSourceLocation());
// Registers the positional variable
if (fromTerm.hasPositionalVariable()) {
VariableExpr posVar = fromTerm.getPositionalVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar(), posVar.getSourceLocation());
}
// Visits join/unnest/nest clauses.
for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) {
@@ -130,16 +132,16 @@
// Registers the data item variable.
VariableExpr rightVar = joinClause.getRightVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), rightVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), rightVar.getVar(), rightVar.getSourceLocation());
if (joinClause.hasPositionalVariable()) {
// Registers the positional variable.
VariableExpr posVar = joinClause.getPositionalVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar(), posVar.getSourceLocation());
}
Scope rightScope = scopeChecker.removeCurrentScope();
- mergeScopes(leftScope, rightScope);
+ mergeScopes(leftScope, rightScope, joinClause.getRightExpression().getSourceLocation());
scopeChecker.pushExistingScope(leftScope);
// The condition expression can refer to the just registered variables
// for the right branch.
@@ -156,12 +158,12 @@
// Registers the data item variable.
VariableExpr rightVar = nestClause.getRightVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), rightVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), rightVar.getVar(), rightVar.getSourceLocation());
if (nestClause.hasPositionalVariable()) {
// Registers the positional variable.
VariableExpr posVar = nestClause.getPositionalVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar(), posVar.getSourceLocation());
}
// The condition expression can refer to the just registered variables
@@ -176,12 +178,12 @@
// register the data item variable
VariableExpr rightVar = unnestClause.getRightVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), rightVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), rightVar.getVar(), rightVar.getSourceLocation());
if (unnestClause.hasPositionalVariable()) {
// register the positional variable
VariableExpr posVar = unnestClause.getPositionalVariable();
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), posVar.getVar(), posVar.getSourceLocation());
}
return null;
}
@@ -234,7 +236,7 @@
gbyKeyVarExpr.setExpr(visit(gbyKeyVarExpr.getExpr(), gc));
VariableExpr gbyKeyVar = gbyKeyVarExpr.getVar();
if (gbyKeyVar != null) {
- addNewVarSymbolToScope(newScope, gbyKeyVar.getVar());
+ addNewVarSymbolToScope(newScope, gbyKeyVar.getVar(), gbyKeyVar.getSourceLocation());
}
}
if (gc.hasGroupFieldList()) {
@@ -247,12 +249,13 @@
decorVarExpr.setExpr(visit(decorVarExpr.getExpr(), gc));
VariableExpr decorVar = decorVarExpr.getVar();
if (decorVar != null) {
- addNewVarSymbolToScope(newScope, decorVar.getVar());
+ addNewVarSymbolToScope(newScope, decorVar.getVar(), decorVar.getSourceLocation());
}
}
}
if (gc.hasGroupVar()) {
- addNewVarSymbolToScope(newScope, gc.getGroupVar().getVar());
+ VariableExpr groupVar = gc.getGroupVar();
+ addNewVarSymbolToScope(newScope, groupVar.getVar(), groupVar.getSourceLocation());
}
if (gc.hasWithMap()) {
Map<Expression, VariableExpr> newWithMap = new HashMap<>();
@@ -260,7 +263,7 @@
Expression expr = visit(entry.getKey(), arg);
Expression newKey = expr;
VariableExpr value = entry.getValue();
- addNewVarSymbolToScope(newScope, value.getVar());
+ addNewVarSymbolToScope(newScope, value.getVar(), value.getSourceLocation());
newWithMap.put(newKey, value);
}
gc.setWithVarMap(newWithMap);
@@ -285,7 +288,8 @@
public Expression visit(LetClause letClause, ILangExpression arg) throws CompilationException {
scopeChecker.extendCurrentScope();
letClause.setBindingExpr(visit(letClause.getBindingExpr(), letClause));
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), letClause.getVarExpr().getVar());
+ VariableExpr varExpr = letClause.getVarExpr();
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), varExpr.getVar(), varExpr.getSourceLocation());
return null;
}
@@ -327,7 +331,8 @@
scopeChecker.createNewScope();
for (QuantifiedPair pair : qe.getQuantifiedList()) {
pair.setExpr(visit(pair.getExpr(), qe));
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), pair.getVarExpr().getVar());
+ VariableExpr varExpr = pair.getVarExpr();
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), varExpr.getVar(), varExpr.getSourceLocation());
}
qe.setSatisfiesExpr(visit(qe.getSatisfiesExpr(), qe));
scopeChecker.removeCurrentScope();
@@ -338,7 +343,7 @@
public Expression visit(VariableExpr varExpr, ILangExpression arg) throws CompilationException {
String varName = varExpr.getVar().getValue();
if (scopeChecker.isInForbiddenScopes(varName)) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, varExpr.getSourceLocation(),
"Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.");
}
Identifier ident = scopeChecker.lookupSymbol(varName);
@@ -361,7 +366,7 @@
// Registers the (inserted) data item variable.
VariableExpr bindingVar = insertStatement.getVar();
if (bindingVar != null) {
- addNewVarSymbolToScope(scopeChecker.getCurrentScope(), bindingVar.getVar());
+ addNewVarSymbolToScope(scopeChecker.getCurrentScope(), bindingVar.getVar(), bindingVar.getSourceLocation());
}
// Visits the expression for the returning expression.
@@ -373,20 +378,22 @@
}
// Adds a new encountered alias identifier into a scope
- private void addNewVarSymbolToScope(Scope scope, VarIdentifier var) throws CompilationException {
+ private void addNewVarSymbolToScope(Scope scope, VarIdentifier var, SourceLocation sourceLoc)
+ throws CompilationException {
if (scope.findLocalSymbol(var.getValue()) != null) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Duplicate alias definitions: " + SqlppVariableUtil.toUserDefinedName(var.getValue()));
}
scope.addNewVarSymbolToScope(var);
}
// Merges <code>scopeToBeMerged</code> into <code>hostScope</code>.
- private void mergeScopes(Scope hostScope, Scope scopeToBeMerged) throws CompilationException {
+ private void mergeScopes(Scope hostScope, Scope scopeToBeMerged, SourceLocation sourceLoc)
+ throws CompilationException {
Set<String> symbolsToBeMerged = scopeToBeMerged.getLocalSymbols();
for (String symbolToBeMerged : symbolsToBeMerged) {
if (hostScope.findLocalSymbol(symbolToBeMerged) != null) {
- throw new CompilationException(
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, sourceLoc,
"Duplicate alias definitions: " + SqlppVariableUtil.toUserDefinedName(symbolToBeMerged));
}
}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index c3a9c0b..a7771b9 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -67,9 +67,12 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionConstants;
import org.apache.asterix.common.functions.FunctionSignature;
+import org.apache.asterix.lang.common.base.AbstractLangExpression;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.base.Expression;
import org.apache.asterix.lang.common.base.Literal;
import org.apache.asterix.lang.common.base.IParser;
+import org.apache.asterix.lang.common.base.ILangExpression;
import org.apache.asterix.lang.common.base.Statement;
import org.apache.asterix.lang.common.clause.GroupbyClause;
import org.apache.asterix.lang.common.clause.LetClause;
@@ -175,6 +178,7 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
import org.apache.hyracks.algebricks.core.algebra.expressions.IndexedNLJoinExpressionAnnotation;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
class SQLPPParser extends ScopeChecker implements IParser {
@@ -216,13 +220,14 @@
};
private static class FunctionName {
- public String dataverse = null;
- public String library = null;
- public String function = null;
- public String hint = null;
+ public String dataverse;
+ public String library;
+ public String function;
+ public String hint;
+ public SourceLocation sourceLoc;
}
- private static String getHint(Token t) {
+ private String getHint(Token t) {
if (t.specialToken == null) {
return null;
}
@@ -234,7 +239,11 @@
return s.substring(1).trim();
}
- private static IRecordFieldDataGen parseFieldDataGen(String hint) throws ParseException {
+ private Token getHintToken(Token t) {
+ return t.specialToken;
+ }
+
+ private IRecordFieldDataGen parseFieldDataGen(String hint, Token hintToken) throws ParseException {
IRecordFieldDataGen rfdg = null;
String splits[] = hint.split(" +");
if (splits[0].equals(VAL_FILE_HINT)) {
@@ -260,7 +269,7 @@
} else if (splits[1].equals("double")) {
vt = FieldIntervalDataGen.ValueType.DOUBLE;
} else {
- throw new ParseException("Unknown type for interval data gen: " + splits[1]);
+ throw new SqlppParseException(getSourceLocation(hintToken), "Unknown type for interval data gen: " + splits[1]);
}
rfdg = new FieldIntervalDataGen(vt, splits[2], splits[3]);
} else if (splits[0].equals(INSERT_RAND_INT_HINT)) {
@@ -294,10 +303,12 @@
try {
return Statement();
} catch (Error e) {
- // this is here as the JavaCharStream that's below the lexer somtimes throws Errors that are not handled
+ // this is here as the JavaCharStream that's below the lexer sometimes throws Errors that are not handled
// by the ANTLR-generated lexer or parser (e.g it does this for invalid backslash u + 4 hex digits escapes)
final String msg = e.getClass().getSimpleName() + (e.getMessage() != null ? ": " + e.getMessage() : "");
throw new CompilationException(ErrorCode.PARSE_ERROR, msg);
+ } catch (SqlppParseException e) {
+ throw new CompilationException(ErrorCode.PARSE_ERROR, e.getSourceLocation(), getMessage(e));
} catch (ParseException e) {
throw new CompilationException(ErrorCode.PARSE_ERROR, getMessage(e));
}
@@ -315,34 +326,42 @@
int maxSize = appendExpected(expected, expectedTokenSequences, tokenImage);
Token tok = currentToken.next;
int line = tok.beginLine;
- String message = "In line " + line + " >>" + getLine(line) + "<<" + sep + "Encountered ";
+ StringBuilder message = new StringBuilder(128);
+ message.append("In line ").append(line).append(" >>").append(getLine(line)).append("<<").append(sep).append("Encountered ");
for (int i = 0; i < maxSize; i++) {
if (i != 0) {
- message += " ";
+ message.append(' ');
}
if (tok.kind == 0) {
- message += fixQuotes(tokenImage[0]);
+ message.append(fixQuotes(tokenImage[0]));
break;
}
final String fixedTokenImage = tokenImage[tok.kind];
if (! tok.image.equalsIgnoreCase(stripQuotes(fixedTokenImage))) {
- message += fixQuotes(fixedTokenImage) + " ";
+ message.append(fixQuotes(fixedTokenImage)).append(' ');
}
- message += quot + addEscapes(tok.image) + quot;
+ message.append(quot).append(addEscapes(tok.image)).append(quot);
tok = tok.next;
}
- message += " at column " + currentToken.next.beginColumn + "." + sep;
+ message.append(" at column ").append(currentToken.next.beginColumn).append('.').append(sep);
if (REPORT_EXPECTED_TOKENS) {
if (expectedTokenSequences.length == 1) {
- message += "Was expecting:" + sep + " ";
+ message.append("Was expecting:").append(sep).append(" ");
} else {
- message += "Was expecting one of:" + sep + " ";
+ message.append("Was expecting one of:").append(sep).append(" ");
}
- message += expected.toString();
+ message.append(expected);
}
- return message;
+ return message.toString();
}
+ protected static SourceLocation getSourceLocation(Token token) {
+ return token != null ? new SourceLocation(token.beginLine, token.beginColumn) : null;
+ }
+
+ protected static void setSourceLocation(AbstractLangExpression expr, Token sourceLocToken) {
+ expr.setSourceLocation(getSourceLocation(sourceLocToken));
+ }
}
PARSER_END(SQLPPParser)
@@ -399,46 +418,52 @@
DataverseDecl DataverseDeclaration() throws ParseException:
{
+ Token startToken = null;
String dvName = null;
}
{
- <USE> dvName = Identifier()
+ <USE> { startToken = token; } dvName = Identifier()
{
defaultDataverse = dvName;
- return new DataverseDecl(new Identifier(dvName));
+ DataverseDecl dvDecl = new DataverseDecl(new Identifier(dvName));
+ setSourceLocation(dvDecl, startToken);
+ return dvDecl;
}
}
Statement CreateStatement() throws ParseException:
{
+ Token startToken = null;
String hint = null;
- boolean dgen = false;
+ Token hintToken = null;
+ boolean hintDGen = false;
Statement stmt = null;
}
{
- <CREATE>
+ <CREATE> { startToken = token; }
(
{
hint = getHint(token);
- if (hint != null && hint.startsWith(DGEN_HINT)) {
- dgen = true;
+ if (hint != null) {
+ hintToken = getHintToken(token);
+ hintDGen = hint.startsWith(DGEN_HINT);
}
}
- stmt = TypeSpecification(hint, dgen)
- | stmt = NodegroupSpecification()
- | stmt = DatasetSpecification()
- | stmt = IndexSpecification()
- | stmt = DataverseSpecification()
- | stmt = FunctionSpecification()
- | stmt = FeedSpecification()
- | stmt = FeedPolicySpecification()
+ stmt = TypeSpecification(startToken, hint, hintDGen, hintToken)
+ | stmt = NodegroupSpecification(startToken)
+ | stmt = DatasetSpecification(startToken)
+ | stmt = IndexSpecification(startToken)
+ | stmt = DataverseSpecification(startToken)
+ | stmt = FunctionSpecification(startToken)
+ | stmt = FeedSpecification(startToken)
+ | stmt = FeedPolicySpecification(startToken)
)
{
return stmt;
}
}
-TypeDecl TypeSpecification(String hint, boolean dgen) throws ParseException:
+TypeDecl TypeSpecification(Token startStmtToken, String hint, boolean dgen, Token hintToken) throws ParseException:
{
Pair<Identifier,Identifier> nameComponents = null;
boolean ifNotExists = false;
@@ -453,18 +478,19 @@
if (dgen) {
String splits[] = hint.split(" +");
if (splits.length != 3) {
- throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");
+ throw new SqlppParseException(getSourceLocation(hintToken), "Expecting /*+ dgen <filename> <numberOfItems> */");
}
filename = splits[1];
numValues = Long.parseLong(splits[2]);
}
TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues);
- return new TypeDecl(nameComponents.first, nameComponents.second, typeExpr, tddg, ifNotExists);
+ TypeDecl stmt = new TypeDecl(nameComponents.first, nameComponents.second, typeExpr, tddg, ifNotExists);
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
-
-NodegroupDecl NodegroupSpecification() throws ParseException:
+NodegroupDecl NodegroupSpecification(Token startStmtToken) throws ParseException:
{
String name = null;
String tmp = null;
@@ -484,11 +510,13 @@
}
)*
{
- return new NodegroupDecl(new Identifier(name), ncNames, ifNotExists);
+ NodegroupDecl stmt = new NodegroupDecl(new Identifier(name), ncNames, ifNotExists);
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
-DatasetDecl DatasetSpecification() throws ParseException:
+DatasetDecl DatasetSpecification(Token startStmtToken) throws ParseException:
{
Pair<Identifier,Identifier> nameComponents = null;
boolean ifNotExists = false;
@@ -499,7 +527,7 @@
Pair<List<Integer>, List<List<String>>> primaryKeyFields = null;
String nodeGroupName = null;
Map<String,String> hints = new HashMap<String,String>();
- DatasetDecl dsetDecl = null;
+ DatasetDecl stmt = null;
boolean autogenerated = false;
Pair<Integer, List<String>> filterField = null;
Pair<Identifier,Identifier> metaTypeComponents = new Pair<Identifier, Identifier>(null, null);
@@ -519,7 +547,7 @@
edd.setAdapter(adapterName);
edd.setProperties(properties);
try{
- dsetDecl = new DatasetDecl(nameComponents.first,
+ stmt = new DatasetDecl(nameComponents.first,
nameComponents.second,
typeComponents.first,
typeComponents.second,
@@ -532,7 +560,7 @@
withRecord,
ifNotExists);
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(startStmtToken), e.getMessage());
}
}
@@ -544,8 +572,9 @@
<WITH>
name = Identifier()
{
- if(!name.toLowerCase().equals("meta")){
- throw new ParseException("We can only support one additional associated field called \"meta\".");
+ if (!name.equalsIgnoreCase("meta")){
+ throw new SqlppParseException(getSourceLocation(startStmtToken),
+ "We can only support one additional associated field called \"meta\".");
}
}
<LEFTPAREN> metaTypeComponents = TypeName() <RIGHTPAREN>
@@ -559,14 +588,15 @@
( <WITH> withRecord = RecordConstructor() )?
{
if(filterField!=null && filterField.first!=0){
- throw new ParseException("A filter field can only be a field in the main record of the dataset.");
+ throw new SqlppParseException(getSourceLocation(startStmtToken),
+ "A filter field can only be a field in the main record of the dataset.");
}
InternalDetailsDecl idd = new InternalDetailsDecl(primaryKeyFields.second,
primaryKeyFields.first,
autogenerated,
filterField == null? null : filterField.second);
try{
- dsetDecl = new DatasetDecl(nameComponents.first,
+ stmt = new DatasetDecl(nameComponents.first,
nameComponents.second,
typeComponents.first,
typeComponents.second,
@@ -579,33 +609,36 @@
withRecord,
ifNotExists);
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(startStmtToken), e.getMessage());
}
}
)
{
- return dsetDecl;
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
RefreshExternalDatasetStatement RefreshExternalDatasetStatement() throws ParseException:
{
- RefreshExternalDatasetStatement redss = new RefreshExternalDatasetStatement();
+ Token startToken = null;
Pair<Identifier,Identifier> nameComponents = null;
String datasetName = null;
}
{
- <REFRESH> <EXTERNAL> Dataset() nameComponents = QualifiedName()
+ <REFRESH> { startToken = token; } <EXTERNAL> Dataset() nameComponents = QualifiedName()
{
- redss.setDataverseName(nameComponents.first);
- redss.setDatasetName(nameComponents.second);
- return redss;
+ RefreshExternalDatasetStatement stmt = new RefreshExternalDatasetStatement();
+ stmt.setDataverseName(nameComponents.first);
+ stmt.setDatasetName(nameComponents.second);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
-CreateIndexStatement IndexSpecification() throws ParseException:
+CreateIndexStatement IndexSpecification(Token startStmtToken) throws ParseException:
{
- CreateIndexStatement cis = new CreateIndexStatement();
+ CreateIndexStatement stmt = new CreateIndexStatement();
String indexName = null;
boolean ifNotExists = false;
Pair<Identifier,Identifier> nameComponents = null;
@@ -621,13 +654,13 @@
<ON> nameComponents = QualifiedName()
<LEFTPAREN> ( fieldPair = OpenField()
{
- cis.addFieldExprPair(fieldPair.second);
- cis.addFieldIndexIndicator(fieldPair.first);
+ stmt.addFieldExprPair(fieldPair.second);
+ stmt.addFieldIndexIndicator(fieldPair.first);
}
) (<COMMA> fieldPair = OpenField()
{
- cis.addFieldExprPair(fieldPair.second);
- cis.addFieldIndexIndicator(fieldPair.first);
+ stmt.addFieldExprPair(fieldPair.second);
+ stmt.addFieldIndexIndicator(fieldPair.first);
}
)* <RIGHTPAREN> ( <TYPE> indexType = IndexType() )? ( <ENFORCED> { enforced = true; } )?)
|
@@ -642,16 +675,17 @@
if (isPrimaryIdx && indexName == null) {
indexName = "primary_idx_" + nameComponents.second;
}
- cis.setIndexName(new Identifier(indexName));
- cis.setIfNotExists(ifNotExists);
- cis.setDataverseName(nameComponents.first);
- cis.setDatasetName(nameComponents.second);
+ stmt.setIndexName(new Identifier(indexName));
+ stmt.setIfNotExists(ifNotExists);
+ stmt.setDataverseName(nameComponents.first);
+ stmt.setDatasetName(nameComponents.second);
if (indexType != null) {
- cis.setIndexType(indexType.type);
- cis.setGramLength(indexType.gramLength);
+ stmt.setIndexType(indexType.type);
+ stmt.setGramLength(indexType.gramLength);
}
- cis.setEnforced(enforced);
- return cis;
+ stmt.setEnforced(enforced);
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
@@ -710,7 +744,7 @@
}
}
-CreateDataverseStatement DataverseSpecification() throws ParseException :
+CreateDataverseStatement DataverseSpecification(Token startStmtToken) throws ParseException :
{
String dvName = null;
boolean ifNotExists = false;
@@ -719,11 +753,13 @@
<DATAVERSE> dvName = Identifier()
ifNotExists = IfNotExists()
{
- return new CreateDataverseStatement(new Identifier(dvName), null, ifNotExists);
+ CreateDataverseStatement stmt = new CreateDataverseStatement(new Identifier(dvName), null, ifNotExists);
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
-CreateFunctionStatement FunctionSpecification() throws ParseException:
+CreateFunctionStatement FunctionSpecification(Token startStmtToken) throws ParseException:
{
FunctionSignature signature;
boolean ifNotExists = false;
@@ -759,17 +795,19 @@
getCurrentScope().addFunctionDescriptor(signature, false);
removeCurrentScope();
defaultDataverse = currentDataverse;
- return new CreateFunctionStatement(signature, paramList, functionBody, functionBodyExpr, ifNotExists);
+ CreateFunctionStatement stmt = new CreateFunctionStatement(signature, paramList, functionBody, functionBodyExpr, ifNotExists);
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
-CreateFeedStatement FeedSpecification() throws ParseException:
+CreateFeedStatement FeedSpecification(Token startStmtToken) throws ParseException:
{
Pair<Identifier,Identifier> nameComponents = null;
boolean ifNotExists = false;
String adapterName = null;
Map<String,String> properties = null;
- CreateFeedStatement cfs = null;
+ CreateFeedStatement stmt = null;
Pair<Identifier,Identifier> sourceNameComponents = null;
RecordConstructor withRecord = null;
}
@@ -778,15 +816,16 @@
<WITH> withRecord = RecordConstructor()
{
try {
- cfs = new CreateFeedStatement(nameComponents, withRecord, ifNotExists);
- return cfs;
+ stmt = new CreateFeedStatement(nameComponents, withRecord, ifNotExists);
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
} catch (AlgebricksException e) {
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(startStmtToken), e.getMessage());
}
}
}
-CreateFeedPolicyStatement FeedPolicySpecification() throws ParseException:
+CreateFeedPolicyStatement FeedPolicySpecification(Token startStmtToken) throws ParseException:
{
String policyName = null;
String basePolicyName = null;
@@ -794,7 +833,7 @@
String definition = null;
boolean ifNotExists = false;
Map<String,String> properties = null;
- CreateFeedPolicyStatement cfps = null;
+ CreateFeedPolicyStatement stmt = null;
}
{
(
@@ -802,22 +841,21 @@
<FROM>
(<POLICY> basePolicyName = Identifier() properties = Configuration() (<DEFINITION> definition = ConstantString())?
{
- cfps = new CreateFeedPolicyStatement(policyName,
+ stmt = new CreateFeedPolicyStatement(policyName,
basePolicyName, properties, definition, ifNotExists);
}
| <PATH> sourcePolicyFile = ConstantString() (<DEFINITION> definition = ConstantString())?
{
- cfps = new CreateFeedPolicyStatement(policyName, sourcePolicyFile, definition, ifNotExists);
+ stmt = new CreateFeedPolicyStatement(policyName, sourcePolicyFile, definition, ifNotExists);
}
)
)
{
- return cfps;
+ setSourceLocation(stmt, startStmtToken);
+ return stmt;
}
}
-
-
List<VarIdentifier> ParameterList() throws ParseException:
{
List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
@@ -896,7 +934,7 @@
{
arity = new Integer(token.image);
if (arity < 0 && arity != FunctionIdentifier.VARARGS) {
- throw new ParseException(" invalid arity:" + arity);
+ throw new SqlppParseException(getSourceLocation(token), "Invalid arity:" + arity);
}
// TODO use fctName.library
@@ -930,15 +968,16 @@
Statement DropStatement() throws ParseException:
{
+ Token startToken = null;
String id = null;
Pair<Identifier,Identifier> pairId = null;
Triple<Identifier,Identifier,Identifier> tripleId = null;
FunctionSignature funcSig = null;
boolean ifExists = false;
- Statement stmt = null;
+ AbstractStatement stmt = null;
}
{
- <DROP>
+ <DROP> { startToken = token; }
(
Dataset() pairId = QualifiedName() ifExists = IfExists()
{
@@ -974,6 +1013,7 @@
}
)
{
+ setSourceLocation(stmt, startToken);
return stmt;
}
}
@@ -994,54 +1034,61 @@
InsertStatement InsertStatement() throws ParseException:
{
+ Token startToken = null;
Pair<Identifier,Identifier> nameComponents = null;
VariableExpr var = null;
Query query = null;
Expression returnExpression = null;
}
{
- <INSERT> <INTO> nameComponents = QualifiedName() (<AS> var = Variable())?
+ <INSERT> { startToken = token; } <INTO> nameComponents = QualifiedName() (<AS> var = Variable())?
query = Query(false)
( <RETURNING> returnExpression = Expression())?
{
if (returnExpression != null && var == null) {
- var = ExpressionToVariableUtil.getGeneratedVariable(query.getBody(), true);
+ var = ExpressionToVariableUtil.getGeneratedVariable(query.getBody(), true);
}
query.setTopLevel(true);
- return new InsertStatement(nameComponents.first, nameComponents.second, query, getVarCounter(), var,
- returnExpression);
+ InsertStatement stmt = new InsertStatement(nameComponents.first, nameComponents.second, query, getVarCounter(),
+ var, returnExpression);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
UpsertStatement UpsertStatement() throws ParseException:
{
+ Token startToken = null;
Pair<Identifier,Identifier> nameComponents = null;
VariableExpr var = null;
Query query = null;
Expression returnExpression = null;
}
{
- <UPSERT> <INTO> nameComponents = QualifiedName() (<AS> var = Variable())?
+ <UPSERT> { startToken = token; } <INTO> nameComponents = QualifiedName() (<AS> var = Variable())?
query = Query(false)
( <RETURNING> returnExpression = Expression())?
{
if (returnExpression != null && var == null) {
- var = ExpressionToVariableUtil.getGeneratedVariable(query.getBody(), true);
+ var = ExpressionToVariableUtil.getGeneratedVariable(query.getBody(), true);
}
query.setTopLevel(true);
- return new UpsertStatement(nameComponents.first, nameComponents.second, query, getVarCounter(), var,
- returnExpression);
+ UpsertStatement stmt = new UpsertStatement(nameComponents.first, nameComponents.second, query, getVarCounter(),
+ var, returnExpression);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
DeleteStatement DeleteStatement() throws ParseException:
{
+ Token startToken = null;
VariableExpr varExpr = null;
Expression condition = null;
Pair<Identifier, Identifier> nameComponents;
}
{
- <DELETE>
+ <DELETE> { startToken = token; }
<FROM> nameComponents = QualifiedName()
((<AS>)? varExpr = Variable())?
(<WHERE> condition = Expression())?
@@ -1050,14 +1097,18 @@
varExpr = new VariableExpr();
VarIdentifier var = SqlppVariableUtil.toInternalVariableIdentifier(nameComponents.second.getValue());
varExpr.setVar(var);
+ setSourceLocation(varExpr, startToken);
}
- return new DeleteStatement(varExpr, nameComponents.first, nameComponents.second,
+ DeleteStatement stmt = new DeleteStatement(varExpr, nameComponents.first, nameComponents.second,
condition, getVarCounter());
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
UpdateStatement UpdateStatement() throws ParseException:
{
+ Token startToken = null;
VariableExpr vars;
Expression target;
Expression condition;
@@ -1065,7 +1116,7 @@
List<UpdateClause> ucs = new ArrayList<UpdateClause>();
}
{
- <UPDATE> vars = Variable() <IN> target = Expression()
+ <UPDATE> { startToken = token; } vars = Variable() <IN> target = Expression()
<WHERE> condition = Expression()
<LEFTPAREN> (uc = UpdateClause()
{
@@ -1077,7 +1128,9 @@
}
)*) <RIGHTPAREN>
{
- return new UpdateStatement(vars, target, condition, ucs);
+ UpdateStatement stmt = new UpdateStatement(vars, target, condition, ucs);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
@@ -1108,18 +1161,22 @@
Statement SetStatement() throws ParseException:
{
+ Token startToken = null;
String pn = null;
String pv = null;
}
{
- <SET> pn = Identifier() pv = ConstantString()
+ <SET> { startToken = token; } pn = Identifier() pv = ConstantString()
{
- return new SetStatement(pn, pv);
+ SetStatement stmt = new SetStatement(pn, pv);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
Statement WriteStatement() throws ParseException:
{
+ Token startToken = null;
String nodeName = null;
String fileName = null;
Query query;
@@ -1127,15 +1184,18 @@
Pair<Identifier,Identifier> nameComponents = null;
}
{
- <WRITE> <OUTPUT> <TO> nodeName = Identifier() <COLON> fileName = ConstantString()
+ <WRITE> { startToken = token; } <OUTPUT> <TO> nodeName = Identifier() <COLON> fileName = ConstantString()
( <USING> writerClass = ConstantString() )?
{
- return new WriteStatement(new Identifier(nodeName), fileName, writerClass);
+ WriteStatement stmt = new WriteStatement(new Identifier(nodeName), fileName, writerClass);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
LoadStatement LoadStatement() throws ParseException:
{
+ Token startToken = null;
Identifier dataverseName = null;
Identifier datasetName = null;
boolean alreadySorted = false;
@@ -1144,7 +1204,7 @@
Pair<Identifier,Identifier> nameComponents = null;
}
{
- <LOAD> Dataset() nameComponents = QualifiedName()
+ <LOAD> { startToken = token; } Dataset() nameComponents = QualifiedName()
{
dataverseName = nameComponents.first;
datasetName = nameComponents.second;
@@ -1156,7 +1216,9 @@
}
)?
{
- return new LoadStatement(dataverseName, datasetName, adapterName, properties, alreadySorted);
+ LoadStatement stmt = new LoadStatement(dataverseName, datasetName, adapterName, properties, alreadySorted);
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
@@ -1174,77 +1236,71 @@
Statement CompactStatement() throws ParseException:
{
+ Token startToken = null;
Pair<Identifier,Identifier> nameComponents = null;
- Statement stmt = null;
}
{
- <COMPACT> Dataset() nameComponents = QualifiedName()
+ <COMPACT> { startToken = token; } Dataset() nameComponents = QualifiedName()
{
- stmt = new CompactStatement(nameComponents.first, nameComponents.second);
- }
- {
+ CompactStatement stmt = new CompactStatement(nameComponents.first, nameComponents.second);
+ setSourceLocation(stmt, startToken);
return stmt;
}
}
Statement ConnectionStatement() throws ParseException:
{
- Pair<Identifier,Identifier> feedNameComponents = null;
- Pair<Identifier,Identifier> datasetNameComponents = null;
-
- Map<String,String> configuration = null;
+ Token startToken = null;
Statement stmt = null;
- String policy = null;
}
{
(
- <CONNECT> stmt = ConnectStatement()
- | <DISCONNECT> stmt = DisconnectStatement()
- | <START> stmt = StartStatement()
- | <STOP> stmt = StopStatement()
+ <CONNECT> { startToken = token; } stmt = ConnectStatement(startToken)
+ | <DISCONNECT> { startToken = token; } stmt = DisconnectStatement(startToken)
+ | <START> { startToken = token; } stmt = StartStatement(startToken)
+ | <STOP> { startToken = token; } stmt = StopStatement(startToken)
)
{
return stmt;
}
}
-Statement StartStatement() throws ParseException:
+Statement StartStatement(Token startStmtToken) throws ParseException:
{
Pair<Identifier,Identifier> feedNameComponents = null;
- Statement stmt = null;
+ AbstractStatement stmt = null;
}
{
<FEED> feedNameComponents = QualifiedName()
{
stmt = new StartFeedStatement (feedNameComponents);
+ setSourceLocation(stmt, startStmtToken);
return stmt;
}
}
-Statement StopStatement () throws ParseException:
+AbstractStatement StopStatement(Token startStmtToken) throws ParseException:
{
Pair<Identifier,Identifier> feedNameComponents = null;
- Statement stmt = null;
+ AbstractStatement stmt = null;
}
{
<FEED> feedNameComponents = QualifiedName()
{
stmt = new StopFeedStatement (feedNameComponents);
+ setSourceLocation(stmt, startStmtToken);
return stmt;
}
}
-
-Statement DisconnectStatement() throws ParseException:
+AbstractStatement DisconnectStatement(Token startStmtToken) throws ParseException:
{
Pair<Identifier,Identifier> feedNameComponents = null;
Pair<Identifier,Identifier> datasetNameComponents = null;
- Map<String,String> configuration = null;
- Statement stmt = null;
- String policy = null;
+ AbstractStatement stmt = null;
}
{
(
@@ -1254,18 +1310,19 @@
}
)
{
+ setSourceLocation(stmt, startStmtToken);
return stmt;
}
}
-Statement ConnectStatement() throws ParseException:
+AbstractStatement ConnectStatement(Token startStmtToken) throws ParseException:
{
Pair<Identifier,Identifier> feedNameComponents = null;
Pair<Identifier,Identifier> datasetNameComponents = null;
Map<String,String> configuration = null;
List<FunctionSignature> appliedFunctions = new ArrayList<FunctionSignature>();
- Statement stmt = null;
+ AbstractStatement stmt = null;
String policy = null;
String whereClauseBody = null;
WhereClause whereClause = null;
@@ -1301,6 +1358,7 @@
}
)
{
+ setSourceLocation(stmt, startStmtToken);
return stmt;
}
}
@@ -1368,9 +1426,9 @@
( value = ConstantString() | <INTEGER_LITERAL>
{
try {
- value = "" + Long.valueOf(token.image);
+ value = String.valueOf(Long.parseLong(token.image));
} catch (NumberFormatException nfe) {
- throw new ParseException("inapproriate value: " + token.image);
+ throw new SqlppParseException(getSourceLocation(token), "inapproriate value: " + token.image);
}
}
)
@@ -1414,6 +1472,7 @@
RecordTypeDefinition RecordTypeDef() throws ParseException:
{
+ Token startToken = null;
RecordTypeDefinition recType = new RecordTypeDefinition();
RecordTypeDefinition.RecordKind recordKind = null;
}
@@ -1422,15 +1481,18 @@
| <OPEN> { recordKind = RecordTypeDefinition.RecordKind.OPEN; } )?
<LEFTBRACE>
{
+ startToken = token;
String hint = getHint(token);
if (hint != null) {
String splits[] = hint.split(" +");
if (splits[0].equals(GEN_FIELDS_HINT)) {
if (splits.length != 5) {
- throw new ParseException("Expecting: /*+ gen-fields <type> <min> <max> <prefix>*/");
+ throw new SqlppParseException(getSourceLocation(getHintToken(token)),
+ "Expecting: /*+ gen-fields <type> <min> <max> <prefix>*/");
}
if (!splits[1].equals("int")) {
- throw new ParseException("The only supported type for gen-fields is int.");
+ throw new SqlppParseException(getSourceLocation(getHintToken(token)),
+ "The only supported type for gen-fields is int.");
}
UndeclaredFieldsDataGen ufdg = new UndeclaredFieldsDataGen(UndeclaredFieldsDataGen.Type.INT,
Integer.parseInt(splits[2]), Integer.parseInt(splits[3]), splits[4]);
@@ -1449,6 +1511,7 @@
recordKind = RecordTypeDefinition.RecordKind.OPEN;
}
recType.setRecordKind(recordKind);
+ setSourceLocation(recType, startToken);
return recType;
}
}
@@ -1463,7 +1526,7 @@
fieldName = Identifier()
{
String hint = getHint(token);
- IRecordFieldDataGen rfdg = hint != null ? parseFieldDataGen(hint) : null;
+ IRecordFieldDataGen rfdg = hint != null ? parseFieldDataGen(hint, token.specialToken) : null;
}
<COLON> type = TypeExpr() (<QUES> { nullable = true; } )?
{
@@ -1476,40 +1539,47 @@
Pair<Identifier,Identifier> id = null;
}
{
- id = QualifiedName()
- {
- if (id.first == null && id.second.getValue().equalsIgnoreCase("int")) {
- id.second.setValue("int64");
- }
+ id = QualifiedName()
+ {
+ if (id.first == null && id.second.getValue().equalsIgnoreCase("int")) {
+ id.second.setValue("int64");
+ }
- return new TypeReferenceExpression(id);
- }
+ TypeReferenceExpression typeRef = new TypeReferenceExpression(id);
+ setSourceLocation(typeRef, token);
+ return typeRef;
+ }
}
OrderedListTypeDefinition OrderedListTypeDef() throws ParseException:
{
+ Token startToken = null;
TypeExpression type = null;
}
{
- <LEFTBRACKET>
- ( type = TypeExpr() )
+ <LEFTBRACKET> { startToken = token; }
+ ( type = TypeExpr() )
<RIGHTBRACKET>
{
- return new OrderedListTypeDefinition(type);
+ OrderedListTypeDefinition typeDef = new OrderedListTypeDefinition(type);
+ setSourceLocation(typeDef, startToken);
+ return typeDef;
}
}
-
UnorderedListTypeDefinition UnorderedListTypeDef() throws ParseException:
{
+ Token startToken = null;
TypeExpression type = null;
}
{
- <LEFTDBLBRACE>
+ <LEFTDBLBRACE> { startToken = token; }
( type = TypeExpr() )
<RIGHTDBLBRACE>
{
- return new UnorderedListTypeDefinition(type);
+ UnorderedListTypeDefinition typeDef = new UnorderedListTypeDefinition(type);
+ setSourceLocation(typeDef, startToken);
+ return typeDef;
}
}
@@ -1525,6 +1595,7 @@
{
FunctionName result = new FunctionName();
result.hint = getHint(token);
+ result.sourceLoc = getSourceLocation(token);
}
( <DOT> second = Identifier()
{
@@ -1614,19 +1685,21 @@
{
List<String> exprList = new ArrayList<String>();
String lit = null;
+ Token litToken = null;
int source = 0;
}
{
lit = Identifier()
{
boolean meetParens = false;
+ litToken = token;
}
(
LOOKAHEAD(1)
<LEFTPAREN><RIGHTPAREN>
{
- if(!lit.toLowerCase().equals("meta")){
- throw new ParseException("The string before () has to be \"meta\".");
+ if(!lit.equalsIgnoreCase("meta")){
+ throw new SqlppParseException(getSourceLocation(litToken), "The string before () has to be \"meta\".");
}
meetParens = true;
source = 1;
@@ -1659,7 +1732,6 @@
}
}
-
String QuotedString() throws ParseException:
{
}
@@ -1670,7 +1742,6 @@
}
}
-
String StringLiteral() throws ParseException:
{
}
@@ -1728,26 +1799,26 @@
FunctionDecl FunctionDeclaration() throws ParseException:
{
- FunctionDecl funcDecl;
- FunctionSignature signature;
+ Token startToken = null;
String functionName;
List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
Expression funcBody;
createNewScope();
}
{
- <DECLARE> <FUNCTION>
+ <DECLARE> { startToken = token; } <FUNCTION>
functionName = Identifier()
paramList = ParameterList()
<LEFTBRACE>
(funcBody = SelectExpression(true) | funcBody = Expression())
<RIGHTBRACE>
{
- signature = new FunctionSignature(defaultDataverse, functionName, paramList.size());
+ FunctionSignature signature = new FunctionSignature(defaultDataverse, functionName, paramList.size());
getCurrentScope().addFunctionDescriptor(signature, false);
- funcDecl = new FunctionDecl(signature, paramList, funcBody);
+ FunctionDecl stmt = new FunctionDecl(signature, paramList, funcBody);
removeCurrentScope();
- return funcDecl;
+ setSourceLocation(stmt, startToken);
+ return stmt;
}
}
@@ -1775,12 +1846,12 @@
)
{
query.setBody(expr);
+ query.setSourceLocation(expr.getSourceLocation());
return query;
}
}
-
Expression Expression():
{
Expression expr = null;
@@ -1797,9 +1868,7 @@
}
}
-
-
-Expression OperatorExpr()throws ParseException:
+Expression OperatorExpr() throws ParseException:
{
OperatorExpr op = null;
Expression operand = null;
@@ -1807,18 +1876,18 @@
{
operand = AndExpr()
(
-
<OR>
{
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
}
try{
op.addOperator(token.image.toLowerCase());
} catch (Exception e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(token), e.getMessage());
}
}
@@ -1834,7 +1903,7 @@
}
}
-Expression AndExpr()throws ParseException:
+Expression AndExpr() throws ParseException:
{
OperatorExpr op = null;
Expression operand = null;
@@ -1842,18 +1911,18 @@
{
operand = NotExpr()
(
-
<AND>
{
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
}
try{
op.addOperator(token.image.toLowerCase());
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(token), e.getMessage());
}
}
@@ -1865,28 +1934,31 @@
)*
{
- return op==null? operand: op;
+ return op==null ? operand: op;
}
}
-Expression NotExpr()throws ParseException:
+Expression NotExpr() throws ParseException:
{
Expression inputExpr;
boolean not = false;
+ Token startToken = null;
}
{
- (<NOT> { not = true; } )? inputExpr = RelExpr()
+ (<NOT> { not = true; startToken = token; } )? inputExpr = RelExpr()
{
- if(not){
+ if(not) {
FunctionSignature signature = new FunctionSignature(BuiltinFunctions.NOT);
- return new CallExpr(signature, new ArrayList<Expression>(Collections.singletonList(inputExpr)));
+ CallExpr callExpr = new CallExpr(signature, new ArrayList<Expression>(Collections.singletonList(inputExpr)));
+ setSourceLocation(callExpr, startToken);
+ return callExpr;
} else {
return inputExpr;
}
}
}
-Expression RelExpr()throws ParseException:
+Expression RelExpr() throws ParseException:
{
boolean not = false;
OperatorExpr op = null;
@@ -1920,13 +1992,14 @@
}
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand, false); // broadcast is always for the right branch
op.setCurrentop(true);
}
try{
op.addOperator(operator);
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(token), e.getMessage());
}
}
@@ -1944,8 +2017,7 @@
}
}
-
-Expression BetweenExpr()throws ParseException:
+Expression BetweenExpr() throws ParseException:
{
boolean not = false;
OperatorExpr op = null;
@@ -1972,13 +2044,14 @@
}
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
}
try{
op.addOperator(operator);
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(token), e.getMessage());
}
}
@@ -1999,13 +2072,14 @@
if (annotation != null) {
op.addHint(annotation);
}
- return op==null? operand: op;
+ return op==null ? operand: op;
}
}
Expression IsExpr() throws ParseException:
{
- Expression expr = null;
+ Token notToken = null;
+ CallExpr expr = null;
Expression operand = null;
boolean not = false;
FunctionIdentifier fn = null;
@@ -2013,7 +2087,7 @@
{
operand = LikeExpr()
( <IS>
- (<NOT> { not = true; })?
+ (<NOT> { not = true; notToken = token; })?
(
<NULL> { fn = BuiltinFunctions.IS_NULL; } |
<MISSING> { fn = BuiltinFunctions.IS_MISSING; } |
@@ -2023,19 +2097,20 @@
{
FunctionSignature signature = new FunctionSignature(fn);
expr = new CallExpr(signature, new ArrayList<Expression>(Collections.singletonList(operand)));
- if(not) {
+ expr.setSourceLocation(getSourceLocation(token));
+ if (not) {
FunctionSignature notSignature = new FunctionSignature(BuiltinFunctions.NOT);
expr = new CallExpr(notSignature, new ArrayList<Expression>(Collections.singletonList(expr)));
+ expr.setSourceLocation(getSourceLocation(notToken));
}
}
)?
{
- return expr = expr==null? operand : expr;
+ return expr == null ? operand : expr;
}
}
-
-Expression LikeExpr()throws ParseException:
+Expression LikeExpr() throws ParseException:
{
boolean not = false;
OperatorExpr op = null;
@@ -2048,6 +2123,7 @@
(<NOT> { not = true; })? <LIKE>
{
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
@@ -2055,10 +2131,10 @@
if (not) {
operator = "not_" + operator;
}
- try{
+ try {
op.addOperator(operator);
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(token), e.getMessage());
}
}
@@ -2073,7 +2149,7 @@
}
}
-Expression ConcatExpr()throws ParseException:
+Expression ConcatExpr() throws ParseException:
{
OperatorExpr op = null;
Expression operand = null;
@@ -2082,18 +2158,15 @@
operand = AddExpr()
(
LOOKAHEAD(1)
- (<CONCAT>)
+ <CONCAT>
{
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
}
- try{
- ((OperatorExpr)op).addOperator(token.image);
- } catch (Exception e){
- throw new ParseException(e.getMessage());
- }
+ op.addOperator(OperatorType.CONCAT);
}
operand = AddExpr()
{
@@ -2102,31 +2175,29 @@
)*
{
- return op==null? operand: op;
+ return op == null ? operand : op;
}
}
-Expression AddExpr()throws ParseException:
+Expression AddExpr() throws ParseException:
{
OperatorExpr op = null;
+ OperatorType opType = null;
Expression operand = null;
}
{
operand = MultExpr()
(
LOOKAHEAD(1)
- (<PLUS> | <MINUS>)
+ (<PLUS> { opType = OperatorType.PLUS; } | <MINUS> { opType = OperatorType.MINUS; } )
{
if (op == null) {
op = new OperatorExpr();
- op.addOperand(operand);
- op.setCurrentop(true);
+ op.setSourceLocation(getSourceLocation(token));
+ op.addOperand(operand);
+ op.setCurrentop(true);
}
- try{
- ((OperatorExpr)op).addOperator(token.image);
- } catch (Exception e){
- throw new ParseException(e.getMessage());
- }
+ op.addOperator(opType);
}
operand = MultExpr()
@@ -2136,11 +2207,11 @@
)*
{
- return op==null? operand: op;
+ return op == null ? operand : op;
}
}
-Expression MultExpr()throws ParseException:
+Expression MultExpr() throws ParseException:
{
OperatorExpr op = null;
OperatorType opType = null;
@@ -2158,6 +2229,7 @@
{
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
}
@@ -2170,11 +2242,11 @@
)*
{
- return op==null?operand:op;
+ return op == null ? operand : op;
}
}
-Expression ExponentExpr()throws ParseException:
+Expression ExponentExpr() throws ParseException:
{
OperatorExpr op = null;
Expression operand = null;
@@ -2185,14 +2257,11 @@
{
if (op == null) {
op = new OperatorExpr();
+ op.setSourceLocation(getSourceLocation(token));
op.addOperand(operand);
op.setCurrentop(true);
}
- try{
- op.addOperator(token.image);
- } catch (Exception e){
- throw new ParseException(e.getMessage());
- }
+ op.addOperator(OperatorType.CARET);
}
operand = UnaryExpr()
{
@@ -2200,7 +2269,7 @@
}
)?
{
- return op==null?operand:op;
+ return op == null ? operand : op;
}
}
@@ -2214,93 +2283,92 @@
( (<PLUS> | <MINUS> | (<NOT> { not = true; } )? <EXISTS> )
{
String exprType = token.image.toLowerCase();
- if(not){
+ if (not) {
exprType = "not_" + exprType;
}
uexpr = new UnaryExpr();
- try{
+ uexpr.setSourceLocation(getSourceLocation(token));
+ try {
uexpr.setExprType(exprType);
} catch (CompilationException e){
- throw new ParseException(e.getMessage());
+ throw new SqlppParseException(getSourceLocation(token), e.getMessage());
}
}
)?
expr = ValueExpr()
{
- if(uexpr==null){
- return expr;
+ if (uexpr == null) {
+ return expr;
}
- uexpr.setExpr(expr);
- return uexpr;
+ else {
+ uexpr.setExpr(expr);
+ return uexpr;
+ }
}
}
-Expression ValueExpr()throws ParseException:
+Expression ValueExpr() throws ParseException:
{
Expression expr = null;
- Identifier ident = null;
- AbstractAccessor fa = null;
- Expression indexExpr = null;
+ AbstractAccessor accessor = null;
}
{
expr = PrimaryExpr() (
- ident = Field()
- {
- fa = (fa == null ? new FieldAccessor(expr, ident)
- : new FieldAccessor(fa, ident));
- }
- | indexExpr = Index()
- {
- fa = (fa == null ? new IndexAccessor(expr, indexExpr)
- : new IndexAccessor(fa, indexExpr));
- }
- )*
- {
- return fa == null ? expr : fa;
- }
+ accessor = FieldAccessor(accessor != null ? accessor : expr)
+ | accessor = IndexAccessor(accessor != null ? accessor : expr)
+ )*
+ {
+ return accessor == null ? expr : accessor;
+ }
}
-Identifier Field() throws ParseException:
+FieldAccessor FieldAccessor(Expression inputExpr) throws ParseException:
{
+ Token startToken = null;
String ident = null;
}
{
- <DOT> ident = Identifier()
+ <DOT> { startToken = token; } ident = Identifier()
{
- return new Identifier(ident);
+ FieldAccessor fa = new FieldAccessor(inputExpr, new Identifier(ident));
+ setSourceLocation(fa, startToken);
+ return fa;
}
}
-Expression Index() throws ParseException:
+IndexAccessor IndexAccessor(Expression inputExpr) throws ParseException:
{
- Expression expr = null;
+ Token startToken = null;
+ Expression expr = null;
}
{
- <LEFTBRACKET> ( expr = Expression()
+ <LEFTBRACKET> { startToken = token; }
+ ( expr = Expression()
{
- if(expr.getKind() == Expression.Kind.LITERAL_EXPRESSION)
+ if (expr.getKind() == Expression.Kind.LITERAL_EXPRESSION)
{
Literal lit = ((LiteralExpr)expr).getValue();
- if(lit.getLiteralType() != Literal.Type.INTEGER &&
- lit.getLiteralType() != Literal.Type.LONG) {
- throw new ParseException("Index should be an INTEGER");
+ if (lit.getLiteralType() != Literal.Type.INTEGER &&
+ lit.getLiteralType() != Literal.Type.LONG) {
+ throw new SqlppParseException(expr.getSourceLocation(), "Index should be an INTEGER");
}
}
}
- | <QUES> // ANY
+ | <QUES> // ANY
- )
+ )
- <RIGHTBRACKET>
- {
- return expr;
- }
+ <RIGHTBRACKET>
+ {
+ IndexAccessor ia = new IndexAccessor(inputExpr, expr);
+ setSourceLocation(ia, startToken);
+ return ia;
+ }
}
-
-Expression PrimaryExpr()throws ParseException:
+Expression PrimaryExpr() throws ParseException:
{
Expression expr = null;
}
@@ -2334,7 +2402,7 @@
try {
lit.setValue(new LongIntegerLiteral(Long.valueOf(token.image)));
} catch (NumberFormatException e) {
- throw new ParseException("Could not parse numeric literal \"" + token.image +'"');
+ throw new SqlppParseException(getSourceLocation(token), "Could not parse numeric literal \"" + token.image +'"');
}
}
| <FLOAT_LITERAL>
@@ -2342,7 +2410,7 @@
try {
lit.setValue(new FloatLiteral(Float.valueOf(token.image)));
} catch (NumberFormatException e) {
- throw new ParseException("Could not parse numeric literal \"" + token.image +'"');
+ throw new SqlppParseException(getSourceLocation(token), "Could not parse numeric literal \"" + token.image +'"');
}
}
| <DOUBLE_LITERAL>
@@ -2350,7 +2418,7 @@
try {
lit.setValue(new DoubleLiteral(Double.valueOf(token.image)));
} catch (NumberFormatException e) {
- throw new ParseException("Could not parse numeric literal \"" + token.image +'"');
+ throw new SqlppParseException(getSourceLocation(token), "Could not parse numeric literal \"" + token.image +'"');
}
}
| <MISSING>
@@ -2371,53 +2439,55 @@
}
)
{
+ setSourceLocation(lit, token);
return lit;
}
}
-
VariableExpr VariableRef() throws ParseException:
{
- VariableExpr varExp = new VariableExpr();
VarIdentifier var = new VarIdentifier();
+ String id = null;
}
{
- { String id = null; }
(<IDENTIFIER> { id = token.image; } | id = QuotedString())
{
id = SqlppVariableUtil.toInternalVariableName(id); // Prefix user-defined variables with "$"
Identifier ident = lookupSymbol(id);
if (isInForbiddenScopes(id)) {
- throw new ParseException("Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.");
+ throw new SqlppParseException(getSourceLocation(token),
+ "Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.");
}
- if(ident != null) { // exist such ident
+ VariableExpr varExp = new VariableExpr();
+ if (ident != null) { // exist such ident
varExp.setVar((VarIdentifier)ident);
} else {
varExp.setVar(var);
varExp.setIsNewVar(false);
var.setValue(id);
}
+ setSourceLocation(varExp, token);
return varExp;
}
}
-
VariableExpr Variable() throws ParseException:
{
- VariableExpr varExp = new VariableExpr();
VarIdentifier var = new VarIdentifier();
+ String id = null;
}
{
- { String id = null; }
(<IDENTIFIER> { id = token.image; } | id = QuotedString())
{
id = SqlppVariableUtil.toInternalVariableName(id); // prefix user-defined variables with "$".
Identifier ident = lookupSymbol(id);
+ VariableExpr varExp = new VariableExpr();
if(ident != null) { // exist such ident
varExp.setIsNewVar(false);
}
varExp.setVar(var);
var.setValue(id);
+ setSourceLocation(varExp, token);
return varExp;
}
}
@@ -2428,96 +2498,99 @@
}
{
(
- expr = OrderedListConstructor() | expr = UnorderedListConstructor()
+ expr = OrderedListConstructor() |
+ expr = UnorderedListConstructor()
)
-
{
return expr;
}
}
-
ListConstructor OrderedListConstructor() throws ParseException:
{
- ListConstructor expr = new ListConstructor();
- List<Expression> exprList = null;
- expr.setType(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR);
+ Token startToken = null;
+ List<Expression> exprList = null;
}
{
- <LEFTBRACKET> exprList = ExpressionList() <RIGHTBRACKET>
- {
- expr.setExprList(exprList);
- return expr;
- }
+ <LEFTBRACKET> { startToken = token; }
+ exprList = ExpressionList()
+ <RIGHTBRACKET>
+ {
+ ListConstructor expr = new ListConstructor(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR, exprList);
+ setSourceLocation(expr, startToken);
+ return expr;
+ }
}
ListConstructor UnorderedListConstructor() throws ParseException:
{
- ListConstructor expr = new ListConstructor();
- List<Expression> exprList = null;
- expr.setType(ListConstructor.Type.UNORDERED_LIST_CONSTRUCTOR);
+ Token startToken = null;
+ List<Expression> exprList = null;
}
{
- <LEFTDBLBRACE> exprList = ExpressionList() <RIGHTDBLBRACE>
- {
- expr.setExprList(exprList);
- return expr;
- }
+ <LEFTDBLBRACE> { startToken = token; }
+ exprList = ExpressionList()
+ <RIGHTDBLBRACE>
+ {
+ ListConstructor expr = new ListConstructor(ListConstructor.Type.UNORDERED_LIST_CONSTRUCTOR, exprList);
+ setSourceLocation(expr, startToken);
+ return expr;
+ }
}
List<Expression> ExpressionList() throws ParseException:
{
- Expression expr = null;
- List<Expression> list = null;
- List<Expression> exprList = new ArrayList<Expression>();
+ Expression expr = null;
+ List<Expression> exprList = new ArrayList<Expression>();
}
{
- (
- expr = Expression()
+ (
+ expr = Expression()
+ {
+ exprList.add(expr);
+ }
+ ( <COMMA> expr = Expression()
{
exprList.add(expr);
}
- ( <COMMA> expr = Expression()
- {
- exprList.add(expr);
- }
- )*
- )?
- {
- return exprList;
- }
+ )*
+ )?
+ {
+ return exprList;
+ }
}
RecordConstructor RecordConstructor() throws ParseException:
{
- RecordConstructor expr = new RecordConstructor();
- FieldBinding tmp = null;
- List<FieldBinding> fbList = new ArrayList<FieldBinding>();
+ Token startToken = null;
+ FieldBinding fb = null;
+ List<FieldBinding> fbList = new ArrayList<FieldBinding>();
}
{
- <LEFTBRACE> (tmp = FieldBinding()
- {
- fbList.add(tmp);
- }
- (<COMMA> tmp = FieldBinding() { fbList.add(tmp); })*)? <RIGHTBRACE>
- {
- expr.setFbList(fbList);
- return expr;
- }
+ <LEFTBRACE> { startToken = token; }
+ (
+ fb = FieldBinding() { fbList.add(fb); }
+ (<COMMA> fb = FieldBinding() { fbList.add(fb); })*
+ )?
+ <RIGHTBRACE>
+ {
+ RecordConstructor expr = new RecordConstructor(fbList);
+ setSourceLocation(expr, startToken);
+ return expr;
+ }
}
FieldBinding FieldBinding() throws ParseException:
{
- Expression left, right;
+ Expression left, right;
}
{
- left = Expression() <COLON> right = Expression()
- {
- return new FieldBinding(left, right);
- }
+ left = Expression() <COLON> right = Expression()
+ {
+ return new FieldBinding(left, right);
+ }
}
-
Expression FunctionCallExpr() throws ParseException:
{
CallExpr callExpr;
@@ -2531,16 +2604,16 @@
}
{
funcName = FunctionName()
- {
- hint = funcName.hint;
- }
+ {
+ hint = funcName.hint;
+ }
<LEFTPAREN> (
( <DISTINCT> { distinct = true; } )?
( tmp = Expression() | <MUL> { star = true; } )
{
if(star){
- if(!funcName.function.toLowerCase().equals("count")){
- throw new ParseException("The parameter * can only be used in COUNT().");
+ if(!funcName.function.equalsIgnoreCase("count")){
+ throw new SqlppParseException(getSourceLocation(token), "The parameter * can only be used in COUNT().");
}
argList.add(new LiteralExpr(new LongIntegerLiteral(1L)));
} else {
@@ -2574,6 +2647,7 @@
callExpr.addHint(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE);
}
}
+ callExpr.setSourceLocation(funcName.sourceLoc);
return callExpr;
}
}
@@ -2594,19 +2668,19 @@
}
}
-
Expression CaseExpr() throws ParseException:
{
- Expression conditionExpr = new LiteralExpr(TrueLiteral.INSTANCE);
+ Token startToken = null;
+ Expression conditionExpr = null;
List<Expression> whenExprs = new ArrayList<Expression>();
List<Expression> thenExprs = new ArrayList<Expression>();
Expression elseExpr = null;
-
Expression whenExpr = null;
Expression thenExpr = null;
}
{
- <CASE> ( conditionExpr = Expression() )?
+ <CASE> { startToken = token; }
+ ( conditionExpr = Expression() )?
(
<WHEN> whenExpr = Expression()
{
@@ -2620,7 +2694,14 @@
(<ELSE> elseExpr = Expression() )?
<END>
{
- return new CaseExpression(conditionExpr, whenExprs, thenExprs, elseExpr);
+ if (conditionExpr == null) {
+ LiteralExpr litExpr = new LiteralExpr(TrueLiteral.INSTANCE);
+ setSourceLocation(litExpr, startToken);
+ conditionExpr = litExpr;
+ }
+ CaseExpression caseExpr = new CaseExpression(conditionExpr, whenExprs, thenExprs, elseExpr);
+ setSourceLocation(caseExpr, startToken);
+ return caseExpr;
}
}
@@ -2638,7 +2719,10 @@
(orderbyClause = OrderbyClause() {})?
(limitClause = LimitClause() {})?
{
- return new SelectExpression(letClauses, selectSetOperation, orderbyClause, limitClause, subquery);
+ SelectExpression selectExpr =
+ new SelectExpression(letClauses, selectSetOperation, orderbyClause, limitClause, subquery);
+ selectExpr.setSourceLocation((!letClauses.isEmpty() ? letClauses.get(0) : selectSetOperation).getSourceLocation());
+ return selectExpr;
}
}
@@ -2671,7 +2755,9 @@
}
)*
{
- return new SelectSetOperation(setOperationInputLeft, setOperationRights);
+ SelectSetOperation selectSetOp = new SelectSetOperation(setOperationInputLeft, setOperationRights);
+ selectSetOp.setSourceLocation(selectBlockLeft.getSourceLocation());
+ return selectSetOp;
}
}
@@ -2695,10 +2781,11 @@
GroupbyClause groupbyClause = null;
List<LetClause> gbyLetClauses = null;
HavingClause havingClause = null;
+ SourceLocation startSrcLoc = null;
}
{
(
- selectClause = SelectClause()
+ selectClause = SelectClause() { startSrcLoc = selectClause.getSourceLocation(); }
(
LOOKAHEAD(1)
fromClause = FromClause()
@@ -2717,7 +2804,7 @@
(havingClause = HavingClause())?
)?
|
- fromClause = FromClause()
+ fromClause = FromClause() { startSrcLoc = fromClause.getSourceLocation(); }
(
LOOKAHEAD(1)
fromLetClauses = LetClause()
@@ -2733,65 +2820,85 @@
selectClause = SelectClause()
)
{
- return new SelectBlock(selectClause, fromClause, fromLetClauses, whereClause, groupbyClause, gbyLetClauses, havingClause);
+ SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, fromLetClauses, whereClause, groupbyClause,
+ gbyLetClauses, havingClause);
+ selectBlock.setSourceLocation(startSrcLoc);
+ return selectBlock;
}
}
SelectClause SelectClause() throws ParseException:
{
+ Token startToken = null;
SelectRegular selectRegular = null;
SelectElement selectElement = null;
boolean distinct = false;
}
{
- <SELECT> (<ALL>|<DISTINCT> {distinct = true; } )?
+ <SELECT> { startToken = token; } (<ALL>|<DISTINCT> { distinct = true; } )?
(
selectRegular = SelectRegular()
|
selectElement = SelectElement()
)?
{
- if(selectRegular == null && selectElement == null){
+ SourceLocation sourceLoc = getSourceLocation(startToken);
+ if (selectRegular == null && selectElement == null){
Projection projection = new Projection(null, null, true, false);
+ projection.setSourceLocation(sourceLoc);
List<Projection> projections = new ArrayList<Projection>();
projections.add(projection);
selectRegular = new SelectRegular(projections);
+ selectRegular.setSourceLocation(sourceLoc);
}
- return new SelectClause(selectElement, selectRegular, distinct);
+ SelectClause selectClause = new SelectClause(selectElement, selectRegular, distinct);
+ selectClause.setSourceLocation(sourceLoc);
+ return selectClause;
}
}
SelectRegular SelectRegular() throws ParseException:
{
+ SourceLocation startSrcLoc = null;
List<Projection> projections = new ArrayList<Projection>();
+ Projection projection = null;
}
{
- {
- Projection projection = null;
- }
- projection = Projection() { projections.add(projection); }
- ( LOOKAHEAD(2) <COMMA>
- projection = Projection() {projections.add(projection);}
- )*
+ projection = Projection()
{
- return new SelectRegular(projections);
+ projections.add(projection);
+ startSrcLoc = projection.getSourceLocation();
+ }
+ ( LOOKAHEAD(2) <COMMA> projection = Projection()
+ {
+ projections.add(projection);
+ }
+ )*
+ {
+ SelectRegular selectRegular = new SelectRegular(projections);
+ selectRegular.setSourceLocation(startSrcLoc);
+ return selectRegular;
}
}
SelectElement SelectElement() throws ParseException:
{
+ Token startToken = null;
Expression expr = null;
String name = null;
}
{
- (<RAW>|<ELEMENT>|<VALUE>) expr = Expression()
+ (<RAW>|<ELEMENT>|<VALUE>) { startToken = token; } expr = Expression()
{
- return new SelectElement(expr);
+ SelectElement selectElement = new SelectElement(expr);
+ setSourceLocation(selectElement, startToken);
+ return selectElement;
}
}
Projection Projection() throws ParseException :
{
+ SourceLocation startSrcLoc = null;
Expression expr = null;
Identifier identifier = null;
String name = null;
@@ -2800,8 +2907,8 @@
}
{
(
- <MUL> {star = true; }
- | LOOKAHEAD(3) expr = VariableRef() <DOT> <MUL> {varStar = true; }
+ <MUL> { star = true; startSrcLoc = getSourceLocation(token); }
+ | LOOKAHEAD(3) expr = VariableRef() <DOT> <MUL> { varStar = true; }
| expr = Expression() ((<AS>)? name = Identifier())?
{
if (name == null) {
@@ -2813,12 +2920,15 @@
}
)
{
- return new Projection(expr, name, star, varStar);
+ Projection projection = new Projection(expr, name, star, varStar);
+ projection.setSourceLocation(expr != null ? expr.getSourceLocation() : startSrcLoc);
+ return projection;
}
}
FromClause FromClause() throws ParseException :
{
+ Token startToken = null;
List<FromTerm> fromTerms = new ArrayList<FromTerm>();
extendCurrentScope();
}
@@ -2826,10 +2936,12 @@
{
FromTerm fromTerm = null;
}
- <FROM> fromTerm = FromTerm() { fromTerms.add(fromTerm); }
+ <FROM> { startToken = token; } fromTerm = FromTerm() { fromTerms.add(fromTerm); }
(LOOKAHEAD(2) <COMMA> fromTerm = FromTerm() { fromTerms.add(fromTerm); } )*
{
- return new FromClause(fromTerms);
+ FromClause fromClause = new FromClause(fromTerms);
+ setSourceLocation(fromClause, startToken);
+ return fromClause;
}
}
@@ -2856,47 +2968,54 @@
}
)*
{
- if(leftVar==null){
+ if (leftVar == null) {
leftVar = ExpressionToVariableUtil.getGeneratedVariable(leftExpr, true);
}
- return new FromTerm(leftExpr, leftVar, posVar, correlateClauses);
+ FromTerm fromTerm = new FromTerm(leftExpr, leftVar, posVar, correlateClauses);
+ fromTerm.setSourceLocation(leftExpr.getSourceLocation());
+ return fromTerm;
}
}
JoinClause JoinClause(JoinType joinType) throws ParseException :
{
+ Token startToken = null;
Expression rightExpr = null;
VariableExpr rightVar = null;
VariableExpr posVar = null;
Expression conditionExpr = null;
}
{
- <JOIN> rightExpr = Expression() ((<AS>)? rightVar = Variable())? (<AT> posVar = Variable())? <ON> conditionExpr = Expression()
+ <JOIN> { startToken = token; } rightExpr = Expression() ((<AS>)? rightVar = Variable())? (<AT> posVar = Variable())? <ON> conditionExpr = Expression()
{
if(rightVar==null){
rightVar = ExpressionToVariableUtil.getGeneratedVariable(rightExpr, true);
}
- return new JoinClause(joinType, rightExpr, rightVar, posVar, conditionExpr);
+ JoinClause joinClause = new JoinClause(joinType, rightExpr, rightVar, posVar, conditionExpr);
+ setSourceLocation(joinClause, startToken);
+ return joinClause;
}
}
UnnestClause UnnestClause(JoinType joinType) throws ParseException :
{
+ Token startToken = null;
Expression rightExpr;
VariableExpr rightVar;
VariableExpr posVar = null;
}
{
- (<UNNEST>|<CORRELATE>|<FLATTEN>) rightExpr = Expression() ((<AS>)? rightVar = Variable()) (<AT> posVar = Variable())?
+ (<UNNEST>|<CORRELATE>|<FLATTEN>) { startToken = token; } rightExpr = Expression() ((<AS>)? rightVar = Variable()) (<AT> posVar = Variable())?
{
- if(rightVar==null){
- rightVar = ExpressionToVariableUtil.getGeneratedVariable(rightExpr, true);
+ if (rightVar == null) {
+ rightVar = ExpressionToVariableUtil.getGeneratedVariable(rightExpr, true);
}
- return new UnnestClause(joinType, rightExpr, rightVar, posVar);
+ UnnestClause unnestClause = new UnnestClause(joinType, rightExpr, rightVar, posVar);
+ setSourceLocation(unnestClause, startToken);
+ return unnestClause;
}
}
-
JoinType JoinType() throws ParseException :
{
JoinType joinType = JoinType.INNER;
@@ -2924,30 +3043,33 @@
}
}
-WhereClause WhereClause()throws ParseException :
+WhereClause WhereClause() throws ParseException :
{
- WhereClause wc = new WhereClause();
+ Token startToken = null;
Expression whereExpr;
}
{
- <WHERE> whereExpr = Expression()
+ <WHERE> { startToken = token; } whereExpr = Expression()
{
- wc.setWhereExpr(whereExpr);
+ WhereClause wc = new WhereClause(whereExpr);
+ setSourceLocation(wc, startToken);
return wc;
}
}
-OrderbyClause OrderbyClause()throws ParseException :
+OrderbyClause OrderbyClause() throws ParseException :
{
+ Token startToken = null;
OrderbyClause oc = new OrderbyClause();
Expression orderbyExpr;
List<Expression> orderbyList = new ArrayList<Expression>();
- List<OrderbyClause.OrderModifier> modifierList = new ArrayList<OrderbyClause.OrderModifier >();
+ List<OrderbyClause.OrderModifier> modifierList = new ArrayList<OrderbyClause.OrderModifier>();
int numOfOrderby = 0;
}
{
<ORDER>
{
+ startToken = token;
String hint = getHint(token);
if (hint != null) {
if (hint.startsWith(INMEMORY_HINT)) {
@@ -2985,12 +3107,14 @@
{
oc.setModifierList(modifierList);
oc.setOrderbyList(orderbyList);
+ setSourceLocation(oc, startToken);
return oc;
}
}
GroupbyClause GroupbyClause()throws ParseException :
{
+ Token startToken = null;
GroupbyClause gbc = new GroupbyClause();
List<GbyVariableExpressionPair> vePairList = new ArrayList<GbyVariableExpressionPair>();
VariableExpr var = null;
@@ -3008,6 +3132,7 @@
}
<GROUP>
{
+ startToken = token;
String hint = getHint(token);
if (hint != null && hint.equals(HASH_GROUP_BY_HINT)) {
gbc.setHashGroupByHint(true);
@@ -3068,6 +3193,7 @@
gbc.setWithVarMap(new HashMap<Expression, VariableExpr>());
gbc.setGroupVar(groupVar);
gbc.setGroupFieldList(groupFieldList);
+ setSourceLocation(gbc, startToken);
replaceCurrentScope(newScope);
return gbc;
}
@@ -3075,26 +3201,31 @@
HavingClause HavingClause() throws ParseException:
{
+ Token startToken = null;
Expression filterExpr = null;
}
{
- <HAVING> filterExpr = Expression()
+ <HAVING> { startToken = token; } filterExpr = Expression()
{
- return new HavingClause(filterExpr);
+ HavingClause havingClause = new HavingClause(filterExpr);
+ setSourceLocation(havingClause, startToken);
+ return havingClause;
}
}
LimitClause LimitClause() throws ParseException:
{
+ Token startToken = null;
LimitClause lc = new LimitClause();
Expression expr;
pushForbiddenScope(getCurrentScope());
}
{
- <LIMIT> expr = Expression() { lc.setLimitExpr(expr); }
- (<OFFSET> expr = Expression() { lc.setOffset(expr); })?
+ <LIMIT> { startToken = token; } expr = Expression() { lc.setLimitExpr(expr); }
+ (<OFFSET> expr = Expression() { lc.setOffset(expr); })?
{
+ setSourceLocation(lc, startToken);
popForbiddenScope();
return lc;
}
@@ -3102,6 +3233,7 @@
QuantifiedExpression QuantifiedExpression()throws ParseException:
{
+ Token startToken = null;
QuantifiedExpression qc = new QuantifiedExpression();
List<QuantifiedPair> quantifiedList = new ArrayList<QuantifiedPair>();
Expression satisfiesExpr;
@@ -3114,8 +3246,8 @@
createNewScope();
}
- ( ((<ANY>|<SOME>) { qc.setQuantifier(QuantifiedExpression.Quantifier.SOME); })
- | (<EVERY> { qc.setQuantifier(QuantifiedExpression.Quantifier.EVERY); }))
+ ( ((<ANY>|<SOME>) { startToken = token; qc.setQuantifier(QuantifiedExpression.Quantifier.SOME); })
+ | (<EVERY> { startToken = token; qc.setQuantifier(QuantifiedExpression.Quantifier.EVERY); }))
var = Variable() <IN> inExpr = Expression()
{
pair = new QuantifiedPair(var, inExpr);
@@ -3132,6 +3264,7 @@
{
qc.setSatisfiesExpr(satisfiesExpr);
qc.setQuantifiedList(quantifiedList);
+ setSourceLocation(qc, startToken);
removeCurrentScope();
return qc;
}
@@ -3139,7 +3272,6 @@
LetClause LetElement() throws ParseException:
{
- LetClause lc = new LetClause();
VariableExpr varExp;
Expression beExp;
extendCurrentScope();
@@ -3147,15 +3279,14 @@
{
varExp = Variable() <EQ> beExp = Expression()
{
- lc.setVarExpr(varExp);
- lc.setBindingExpr(beExp);
+ LetClause lc = new LetClause(varExp, beExp);
+ lc.setSourceLocation(varExp.getSourceLocation());
return lc;
}
}
LetClause WithElement() throws ParseException:
{
- LetClause lc = new LetClause();
VariableExpr varExp;
Expression beExp;
extendCurrentScope();
@@ -3163,8 +3294,8 @@
{
varExp = Variable() <AS> beExp = Expression()
{
- lc.setVarExpr(varExp);
- lc.setBindingExpr(beExp);
+ LetClause lc = new LetClause(varExp, beExp);
+ lc.setSourceLocation(varExp.getSourceLocation());
return lc;
}
}
diff --git a/asterixdb/asterix-maven-plugins/asterix-grammar-extension-maven-plugin/src/test/java/org/apache/asterix/lang/extension/EchoStatement.java b/asterixdb/asterix-maven-plugins/asterix-grammar-extension-maven-plugin/src/test/java/org/apache/asterix/lang/extension/EchoStatement.java
index 8ed9d50..f5d32ac 100644
--- a/asterixdb/asterix-maven-plugins/asterix-grammar-extension-maven-plugin/src/test/java/org/apache/asterix/lang/extension/EchoStatement.java
+++ b/asterixdb/asterix-maven-plugins/asterix-grammar-extension-maven-plugin/src/test/java/org/apache/asterix/lang/extension/EchoStatement.java
@@ -19,10 +19,10 @@
package org.apache.asterix.lang.extension;
import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.base.AbstractStatement;
import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-public class EchoStatement implements Statement {
+public class EchoStatement extends AbstractStatement {
private final String arg;
diff --git a/asterixdb/asterix-metadata/pom.xml b/asterixdb/asterix-metadata/pom.xml
index 94c2668..da564d1 100644
--- a/asterixdb/asterix-metadata/pom.xml
+++ b/asterixdb/asterix-metadata/pom.xml
@@ -105,6 +105,10 @@
</dependency>
<dependency>
<groupId>org.apache.hyracks</groupId>
+ <artifactId>hyracks-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hyracks</groupId>
<artifactId>algebricks-core</artifactId>
</dependency>
<dependency>
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
index 2975972..bcd05ee 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entities/Dataset.java
@@ -98,6 +98,7 @@
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.io.FileSplit;
import org.apache.hyracks.api.job.JobSpecification;
import org.apache.hyracks.storage.am.common.api.IModificationOperationCallbackFactory;
@@ -337,12 +338,14 @@
* a mutable progress state used for error handling during the drop operation
* @param hcc
* a client connection to hyracks master for job execution
+ * @param sourceLoc
* @throws Exception
* if an error occur during the drop process or if the dataset can't be dropped for any reason
*/
public void drop(MetadataProvider metadataProvider, MutableObject<MetadataTransactionContext> mdTxnCtx,
List<JobSpecification> jobsToExecute, MutableBoolean bActiveTxn, MutableObject<ProgressState> progress,
- IHyracksClientConnection hcc, boolean dropCorrespondingNodeGroup) throws Exception {
+ IHyracksClientConnection hcc, boolean dropCorrespondingNodeGroup, SourceLocation sourceLoc)
+ throws Exception {
Map<FeedConnectionId, Pair<JobSpecification, Boolean>> disconnectJobList = new HashMap<>();
if (getDatasetType() == DatasetType.INTERNAL) {
// prepare job spec(s) that would disconnect any active feeds involving the dataset.
@@ -361,7 +364,8 @@
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx.getValue(), dataverseName, datasetName);
for (int j = 0; j < indexes.size(); j++) {
if (indexes.get(j).isSecondaryIndex()) {
- jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(indexes.get(j), metadataProvider, this));
+ jobsToExecute
+ .add(IndexUtil.buildDropIndexJobSpec(indexes.get(j), metadataProvider, this, sourceLoc));
}
}
jobsToExecute.add(DatasetUtil.dropDatasetJobSpec(this, metadataProvider));
@@ -398,7 +402,8 @@
MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx.getValue(), dataverseName, datasetName);
for (int j = 0; j < indexes.size(); j++) {
if (ExternalIndexingOperations.isFileIndex(indexes.get(j))) {
- jobsToExecute.add(IndexUtil.buildDropIndexJobSpec(indexes.get(j), metadataProvider, this));
+ jobsToExecute
+ .add(IndexUtil.buildDropIndexJobSpec(indexes.get(j), metadataProvider, this, sourceLoc));
} else {
jobsToExecute.add(DatasetUtil.buildDropFilesIndexJobSpec(metadataProvider, this));
}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
index a3c3842..418bc50 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/ExternalIndexingOperations.java
@@ -63,6 +63,7 @@
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.job.JobSpecification;
import org.apache.hyracks.dataflow.std.file.IFileSplitProvider;
import org.apache.hyracks.storage.am.common.api.IIndexBuilderFactory;
@@ -241,6 +242,7 @@
* @param dataset
* @param files
* @param indexerDesc
+ * @param sourceLoc
* @return
* @throws AlgebricksException
* @throws HyracksDataException
@@ -248,23 +250,27 @@
*/
private static Pair<ExternalScanOperatorDescriptor, AlgebricksPartitionConstraint> getIndexingOperator(
MetadataProvider metadataProvider, JobSpecification jobSpec, IAType itemType, Dataset dataset,
- List<ExternalFile> files, RecordDescriptor indexerDesc) throws HyracksDataException, AlgebricksException {
+ List<ExternalFile> files, RecordDescriptor indexerDesc, SourceLocation sourceLoc)
+ throws HyracksDataException, AlgebricksException {
ExternalDatasetDetails externalDatasetDetails = (ExternalDatasetDetails) dataset.getDatasetDetails();
Map<String, String> configuration = externalDatasetDetails.getProperties();
IAdapterFactory adapterFactory = AdapterFactoryProvider.getIndexingAdapterFactory(
metadataProvider.getApplicationContext().getServiceContext(), externalDatasetDetails.getAdapter(),
configuration, (ARecordType) itemType, files, true, null);
- return new Pair<>(new ExternalScanOperatorDescriptor(jobSpec, indexerDesc, adapterFactory),
- adapterFactory.getPartitionConstraint());
+ ExternalScanOperatorDescriptor scanOp =
+ new ExternalScanOperatorDescriptor(jobSpec, indexerDesc, adapterFactory);
+ scanOp.setSourceLocation(sourceLoc);
+ return new Pair<>(scanOp, adapterFactory.getPartitionConstraint());
}
public static Pair<ExternalScanOperatorDescriptor, AlgebricksPartitionConstraint> createExternalIndexingOp(
JobSpecification spec, MetadataProvider metadataProvider, Dataset dataset, ARecordType itemType,
- RecordDescriptor indexerDesc, List<ExternalFile> files) throws HyracksDataException, AlgebricksException {
+ RecordDescriptor indexerDesc, List<ExternalFile> files, SourceLocation sourceLoc)
+ throws HyracksDataException, AlgebricksException {
return getIndexingOperator(metadataProvider, spec, itemType, dataset,
files == null ? MetadataManager.INSTANCE
.getDatasetExternalFiles(metadataProvider.getMetadataTxnContext(), dataset) : files,
- indexerDesc);
+ indexerDesc, sourceLoc);
}
/**
@@ -420,8 +426,8 @@
}
public static JobSpecification buildIndexUpdateOp(Dataset ds, Index index, List<ExternalFile> metadataFiles,
- List<ExternalFile> addedFiles, List<ExternalFile> appendedFiles, MetadataProvider metadataProvider)
- throws AlgebricksException {
+ List<ExternalFile> addedFiles, List<ExternalFile> appendedFiles, MetadataProvider metadataProvider,
+ SourceLocation sourceLoc) throws AlgebricksException {
// Create files list
ArrayList<ExternalFile> files = new ArrayList<>();
@@ -441,7 +447,7 @@
for (ExternalFile file : appendedFiles) {
files.add(file);
}
- return IndexUtil.buildSecondaryIndexLoadingJobSpec(ds, index, metadataProvider, files);
+ return IndexUtil.buildSecondaryIndexLoadingJobSpec(ds, index, metadataProvider, files, sourceLoc);
}
public static JobSpecification buildCommitJob(Dataset ds, List<Index> indexes, MetadataProvider metadataProvider)
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
index eb14bae..c29279b 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/IndexUtil.java
@@ -38,6 +38,7 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.job.IJobletEventListenerFactory;
import org.apache.hyracks.api.job.JobSpecification;
@@ -103,40 +104,41 @@
}
public static JobSpecification buildDropIndexJobSpec(Index index, MetadataProvider metadataProvider,
- Dataset dataset) throws AlgebricksException {
+ Dataset dataset, SourceLocation sourceLoc) throws AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper = SecondaryIndexOperationsHelper
- .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig);
+ .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig, sourceLoc);
return secondaryIndexHelper.buildDropJobSpec(EnumSet.noneOf(DropOption.class));
}
public static JobSpecification buildDropIndexJobSpec(Index index, MetadataProvider metadataProvider,
- Dataset dataset, Set<DropOption> options) throws AlgebricksException {
+ Dataset dataset, Set<DropOption> options, SourceLocation sourceLoc) throws AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper = SecondaryIndexOperationsHelper
- .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig);
+ .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig, sourceLoc);
return secondaryIndexHelper.buildDropJobSpec(options);
}
public static JobSpecification buildSecondaryIndexCreationJobSpec(Dataset dataset, Index index,
- MetadataProvider metadataProvider) throws AlgebricksException {
+ MetadataProvider metadataProvider, SourceLocation sourceLoc) throws AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper = SecondaryIndexOperationsHelper
- .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig);
+ .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig, sourceLoc);
return secondaryIndexHelper.buildCreationJobSpec();
}
public static JobSpecification buildSecondaryIndexLoadingJobSpec(Dataset dataset, Index index,
- MetadataProvider metadataProvider) throws AlgebricksException {
- return buildSecondaryIndexLoadingJobSpec(dataset, index, metadataProvider, null);
+ MetadataProvider metadataProvider, SourceLocation sourceLoc) throws AlgebricksException {
+ return buildSecondaryIndexLoadingJobSpec(dataset, index, metadataProvider, null, sourceLoc);
}
public static JobSpecification buildSecondaryIndexLoadingJobSpec(Dataset dataset, Index index,
- MetadataProvider metadataProvider, List<ExternalFile> files) throws AlgebricksException {
+ MetadataProvider metadataProvider, List<ExternalFile> files, SourceLocation sourceLoc)
+ throws AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper;
if (dataset.isCorrelated()) {
secondaryIndexHelper = SecondaryCorrelatedTreeIndexOperationsHelper.createIndexOperationsHelper(dataset,
- index, metadataProvider, physicalOptimizationConfig);
+ index, metadataProvider, physicalOptimizationConfig, sourceLoc);
} else {
secondaryIndexHelper = SecondaryTreeIndexOperationsHelper.createIndexOperationsHelper(dataset, index,
- metadataProvider, physicalOptimizationConfig);
+ metadataProvider, physicalOptimizationConfig, sourceLoc);
}
if (files != null) {
secondaryIndexHelper.setExternalFiles(files);
@@ -145,9 +147,9 @@
}
public static JobSpecification buildSecondaryIndexCompactJobSpec(Dataset dataset, Index index,
- MetadataProvider metadataProvider) throws AlgebricksException {
+ MetadataProvider metadataProvider, SourceLocation sourceLoc) throws AlgebricksException {
SecondaryIndexOperationsHelper secondaryIndexHelper = SecondaryIndexOperationsHelper
- .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig);
+ .createIndexOperationsHelper(dataset, index, metadataProvider, physicalOptimizationConfig, sourceLoc);
return secondaryIndexHelper.buildCompactJobSpec();
}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java
index cf6338a..56e967e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryBTreeOperationsHelper.java
@@ -53,7 +53,6 @@
import org.apache.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
import org.apache.hyracks.storage.am.common.dataflow.IIndexDataflowHelperFactory;
import org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory;
-import org.apache.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
public class SecondaryBTreeOperationsHelper extends SecondaryTreeIndexOperationsHelper {
@@ -108,9 +107,11 @@
secondaryBulkLoadOp = createExternalIndexBulkLoadOp(spec, fieldPermutation, dataflowHelperFactory,
GlobalConfig.DEFAULT_TREE_FILL_FACTOR);
}
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() },
- new RecordDescriptor[] { secondaryRecDesc });
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] { secondaryRecDesc });
+ metaOp.setSourceLocation(sourceLoc);
spec.connect(new OneToOneConnectorDescriptor(spec), secondaryBulkLoadOp, 0, metaOp, 0);
root = metaOp;
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0);
@@ -170,9 +171,10 @@
// bulk load op ----> sink op
sourceOp = targetOp;
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
targetOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() },
- new RecordDescriptor[] { secondaryRecDesc });
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] { secondaryRecDesc });
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, targetOp, 0);
spec.addRoot(targetOp);
@@ -236,7 +238,7 @@
}
secondaryFieldAccessEvalFactories[i] = metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
metadataProvider.getFunctionManager(), isOverridingKeyFieldTypes ? enforcedItemType : sourceType,
- index.getKeyFieldNames().get(i), sourceColumn);
+ index.getKeyFieldNames().get(i), sourceColumn, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(i),
index.getKeyFieldNames().get(i), sourceType);
IAType keyType = keyTypePair.first;
@@ -274,9 +276,9 @@
}
if (numFilterFields > 0) {
- secondaryFieldAccessEvalFactories[numSecondaryKeys] =
- metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
- metadataProvider.getFunctionManager(), itemType, filterFieldName, numPrimaryKeys);
+ secondaryFieldAccessEvalFactories[numSecondaryKeys] = metadataProvider.getDataFormat()
+ .getFieldAccessEvaluatorFactory(metadataProvider.getFunctionManager(), itemType, filterFieldName,
+ numPrimaryKeys, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableKeyFieldType(filterFieldName, itemType);
IAType type = keyTypePair.first;
ISerializerDeserializer serde = serdeProvider.getSerializerDeserializer(type);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedBTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedBTreeOperationsHelper.java
index 7791cad..12e21f6 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedBTreeOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedBTreeOperationsHelper.java
@@ -102,9 +102,11 @@
createTreeIndexBulkLoadOp(spec, metadataProvider, taggedSecondaryRecDesc,
createFieldPermutationForBulkLoadOp(), getNumSecondaryKeys(), numPrimaryKeys, false);
- AlgebricksMetaOperatorDescriptor metaOp =
- new AlgebricksMetaOperatorDescriptor(spec, 1, 0, new IPushRuntimeFactory[] { new SinkRuntimeFactory() },
- new RecordDescriptor[] { taggedSecondaryRecDesc });
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
+ AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] { taggedSecondaryRecDesc });
+ metaOp.setSourceLocation(sourceLoc);
// Connect the operators.
spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0);
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0);
@@ -155,7 +157,7 @@
}
secondaryFieldAccessEvalFactories[i] = metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
metadataProvider.getFunctionManager(), isOverridingKeyTypes ? enforcedItemType : sourceType,
- index.getKeyFieldNames().get(i), sourceColumn);
+ index.getKeyFieldNames().get(i), sourceColumn, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(i),
index.getKeyFieldNames().get(i), sourceType);
IAType keyType = keyTypePair.first;
@@ -185,7 +187,7 @@
if (numFilterFields > 0) {
secondaryFieldAccessEvalFactories[numSecondaryKeys] =
metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
- metadataProvider.getFunctionManager(), itemType, filterFieldName, recordColumn);
+ metadataProvider.getFunctionManager(), itemType, filterFieldName, recordColumn, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableKeyFieldType(filterFieldName, itemType);
IAType type = keyTypePair.first;
ISerializerDeserializer serde = serdeProvider.getSerializerDeserializer(type);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java
index b91d65f..c6e4322 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedInvertedIndexOperationsHelper.java
@@ -85,11 +85,12 @@
// Sanity checks.
if (numPrimaryKeys > 1) {
throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_FOR_DATASET_WITH_COMPOSITE_PRIMARY_INDEX,
- indexType, RecordUtil.toFullyQualifiedName(dataset.getDataverseName(), dataset.getDatasetName()));
+ sourceLoc, indexType,
+ RecordUtil.toFullyQualifiedName(dataset.getDataverseName(), dataset.getDatasetName()));
}
if (numSecondaryKeys > 1) {
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_NUM_OF_FIELD, numSecondaryKeys,
- indexType, 1);
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_NUM_OF_FIELD, sourceLoc,
+ numSecondaryKeys, indexType, 1);
}
if (indexType == IndexType.LENGTH_PARTITIONED_WORD_INVIX
|| indexType == IndexType.LENGTH_PARTITIONED_NGRAM_INVIX) {
@@ -111,7 +112,7 @@
if (numSecondaryKeys > 0) {
secondaryFieldAccessEvalFactories[0] = metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
metadataProvider.getFunctionManager(), isOverridingKeyFieldTypes ? enforcedItemType : itemType,
- index.getKeyFieldNames().get(0), recordColumn);
+ index.getKeyFieldNames().get(0), recordColumn, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(0),
index.getKeyFieldNames().get(0), itemType);
secondaryKeyType = keyTypePair.first;
@@ -123,7 +124,7 @@
if (numFilterFields > 0) {
secondaryFieldAccessEvalFactories[numSecondaryKeys] =
metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
- metadataProvider.getFunctionManager(), itemType, filterFieldName, recordColumn);
+ metadataProvider.getFunctionManager(), itemType, filterFieldName, recordColumn, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableKeyFieldType(filterFieldName, itemType);
IAType type = keyTypePair.first;
ISerializerDeserializer serde = serdeProvider.getSerializerDeserializer(type);
@@ -244,8 +245,11 @@
createTreeIndexBulkLoadOp(spec, metadataProvider, taggedTokenKeyPairRecDesc,
createFieldPermutationForBulkLoadOp(), getNumSecondaryKeys(), numPrimaryKeys, true);
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() }, new RecordDescriptor[] {});
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] {});
+ metaOp.setSourceLocation(sourceLoc);
// Connect the operators.
spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0);
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedRTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedRTreeOperationsHelper.java
index bf5178c..7a855d5 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedRTreeOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedRTreeOperationsHelper.java
@@ -77,7 +77,8 @@
int numSecondaryKeys = secondaryKeyFields.size();
boolean isOverridingKeyFieldTypes = index.isOverridingKeyFieldTypes();
if (numSecondaryKeys != 1) {
- throw AsterixException.create(ErrorCode.INDEX_RTREE_MULTIPLE_FIELDS_NOT_ALLOWED, numSecondaryKeys);
+ throw AsterixException.create(ErrorCode.INDEX_RTREE_MULTIPLE_FIELDS_NOT_ALLOWED, sourceLoc,
+ numSecondaryKeys);
}
Pair<IAType, Boolean> spatialTypePair =
Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(0), secondaryKeyFields.get(0), itemType);
@@ -89,7 +90,7 @@
int recordColumn = NUM_TAG_FIELDS + numPrimaryKeys;
secondaryFieldAccessEvalFactories = metadataProvider.getDataFormat().createMBRFactory(
metadataProvider.getFunctionManager(), isOverridingKeyFieldTypes ? enforcedItemType : itemType,
- secondaryKeyFields.get(0), recordColumn, numDimensions, filterFieldName, isPointMBR);
+ secondaryKeyFields.get(0), recordColumn, numDimensions, filterFieldName, isPointMBR, sourceLoc);
secondaryComparatorFactories = new IBinaryComparatorFactory[numNestedSecondaryKeyFields];
valueProviderFactories = new IPrimitiveValueProviderFactory[numNestedSecondaryKeyFields];
ISerializerDeserializer[] secondaryRecFields =
@@ -212,8 +213,11 @@
metadataProvider, secondaryRecDescConsideringPointMBR, createFieldPermutationForBulkLoadOp(),
numNestedSecondaryKeFieldsConsideringPointMBR, numPrimaryKeys, false);
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() }, new RecordDescriptor[] {});
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] {});
+ metaOp.setSourceLocation(sourceLoc);
// Connect the operators.
spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java
index 48982c0..f863589 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryCorrelatedTreeIndexOperationsHelper.java
@@ -47,6 +47,7 @@
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.job.JobSpecification;
import org.apache.hyracks.data.std.primitive.BooleanPointable;
import org.apache.hyracks.data.std.primitive.IntegerPointable;
@@ -177,6 +178,7 @@
IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[1];
sefs[0] = createCastFunction(strictCast).createEvaluatorFactory(castEvalFact);
AssignRuntimeFactory castAssign = new AssignRuntimeFactory(outColumns, sefs, projectionList);
+ castAssign.setSourceLocation(sourceLoc);
return new AlgebricksMetaOperatorDescriptor(spec, 1, 1, new IPushRuntimeFactory[] { castAssign },
new RecordDescriptor[] { getTaggedRecordDescriptor(enforcedRecDesc) });
}
@@ -219,8 +221,10 @@
sefs[i] = secondaryFieldAccessEvalFactories[i];
}
AssignRuntimeFactory assign = new AssignRuntimeFactory(outColumns, sefs, projectionList);
+ assign.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor asterixAssignOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
new IPushRuntimeFactory[] { assign }, new RecordDescriptor[] { secondaryRecDesc });
+ asterixAssignOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, asterixAssignOp,
primaryPartitionConstraint);
return asterixAssignOp;
@@ -231,6 +235,7 @@
IOperatorDescriptor op = new LSMSecondaryIndexCreationTupleProcessorOperatorDescriptor(spec,
taggedSecondaryRecDesc, MissingWriterFactory.INSTANCE, NUM_TAG_FIELDS, numSecondaryKeyFields,
numPrimaryKeyFields, hasBuddyBTree);
+ op.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, op, primaryPartitionConstraint);
return op;
}
@@ -248,6 +253,7 @@
ExternalSortOperatorDescriptor sortOp =
new ExternalSortOperatorDescriptor(spec, physOptConf.getMaxFramesExternalSort(), taggedSortFields,
taggedSecondaryComparatorFactories, taggedSecondaryRecDesc);
+ sortOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, sortOp, primaryPartitionConstraint);
return sortOp;
}
@@ -265,6 +271,7 @@
new LSMSecondaryIndexBulkLoadOperatorDescriptor(spec, taggedSecondaryRecDesc, primaryIndexHelperFactory,
secondaryIndexHelperFactory, fieldPermutation, NUM_TAG_FIELDS, numSecondaryKeys, numPrimaryKeys,
hasBuddyBtree);
+ treeIndexBulkLoadOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, treeIndexBulkLoadOp,
secondaryPartitionConstraint);
return treeIndexBulkLoadOp;
@@ -280,15 +287,17 @@
metadataProvider.getStorageComponentProvider().getStorageManager(), primaryFileSplitProvider);
LSMBTreeDiskComponentScanOperatorDescriptor primaryScanOp = new LSMBTreeDiskComponentScanOperatorDescriptor(
spec, outRecDesc, indexHelperFactory, searchCallbackFactory);
+ primaryScanOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, primaryScanOp,
primaryPartitionConstraint);
return primaryScanOp;
}
public static SecondaryIndexOperationsHelper createIndexOperationsHelper(Dataset dataset, Index index,
- MetadataProvider metadataProvider, PhysicalOptimizationConfig physOptConf) throws AlgebricksException {
+ MetadataProvider metadataProvider, PhysicalOptimizationConfig physOptConf, SourceLocation sourceLoc)
+ throws AlgebricksException {
- SecondaryIndexOperationsHelper indexOperationsHelper = null;
+ SecondaryIndexOperationsHelper indexOperationsHelper;
switch (index.getIndexType()) {
case BTREE:
indexOperationsHelper =
@@ -306,8 +315,10 @@
physOptConf, metadataProvider);
break;
default:
- throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_INDEX_TYPE, index.getIndexType());
+ throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_INDEX_TYPE, sourceLoc,
+ index.getIndexType());
}
+ indexOperationsHelper.setSourceLocation(sourceLoc);
indexOperationsHelper.init();
return indexOperationsHelper;
}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
index 065eb72..5f9e6ef 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryIndexOperationsHelper.java
@@ -67,6 +67,7 @@
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.dataflow.value.ITypeTraits;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.job.JobSpecification;
import org.apache.hyracks.dataflow.std.file.IFileSplitProvider;
import org.apache.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
@@ -118,6 +119,7 @@
protected int[] secondaryBTreeFields;
protected List<ExternalFile> externalFiles;
protected int numPrimaryKeys;
+ protected SourceLocation sourceLoc;
// Prevent public construction. Should be created via createIndexCreator().
protected SecondaryIndexOperationsHelper(Dataset dataset, Index index, PhysicalOptimizationConfig physOptConf,
@@ -142,7 +144,8 @@
}
public static SecondaryIndexOperationsHelper createIndexOperationsHelper(Dataset dataset, Index index,
- MetadataProvider metadataProvider, PhysicalOptimizationConfig physOptConf) throws AlgebricksException {
+ MetadataProvider metadataProvider, PhysicalOptimizationConfig physOptConf, SourceLocation sourceLoc)
+ throws AlgebricksException {
SecondaryIndexOperationsHelper indexOperationsHelper;
switch (index.getIndexType()) {
@@ -162,8 +165,10 @@
new SecondaryInvertedIndexOperationsHelper(dataset, index, physOptConf, metadataProvider);
break;
default:
- throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_INDEX_TYPE, index.getIndexType());
+ throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_INDEX_TYPE, sourceLoc,
+ index.getIndexType());
}
+ indexOperationsHelper.setSourceLocation(sourceLoc);
indexOperationsHelper.init();
return indexOperationsHelper;
}
@@ -176,6 +181,10 @@
public abstract JobSpecification buildDropJobSpec(Set<DropOption> options) throws AlgebricksException;
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
+
protected void init() throws AlgebricksException {
payloadSerde = SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(itemType);
metaSerde =
@@ -288,8 +297,10 @@
sefs[i] = secondaryFieldAccessEvalFactories[i];
}
AssignRuntimeFactory assign = new AssignRuntimeFactory(outColumns, sefs, projectionList);
+ assign.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor asterixAssignOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
new IPushRuntimeFactory[] { assign }, new RecordDescriptor[] { secondaryRecDesc });
+ asterixAssignOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, asterixAssignOp,
primaryPartitionConstraint);
return asterixAssignOp;
@@ -319,6 +330,7 @@
IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[1];
sefs[0] = createCastFunction(strictCast).createEvaluatorFactory(castEvalFact);
AssignRuntimeFactory castAssign = new AssignRuntimeFactory(outColumns, sefs, projectionList);
+ castAssign.setSourceLocation(sourceLoc);
return new AlgebricksMetaOperatorDescriptor(spec, 1, 1, new IPushRuntimeFactory[] { castAssign },
new RecordDescriptor[] { enforcedRecDesc });
}
@@ -326,6 +338,7 @@
protected IFunctionDescriptor createCastFunction(boolean strictCast) throws AlgebricksException {
IFunctionDescriptor castFuncDesc = metadataProvider.getFunctionManager()
.lookupFunction(strictCast ? BuiltinFunctions.CAST_TYPE : BuiltinFunctions.CAST_TYPE_LAX);
+ castFuncDesc.setSourceLocation(sourceLoc);
castFuncDesc.setImmutableStates(enforcedItemType, itemType);
return castFuncDesc;
}
@@ -338,6 +351,7 @@
}
ExternalSortOperatorDescriptor sortOp = new ExternalSortOperatorDescriptor(spec,
physOptConf.getMaxFramesExternalSort(), sortFields, secondaryComparatorFactories, secondaryRecDesc);
+ sortOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, sortOp, primaryPartitionConstraint);
return sortOp;
}
@@ -351,6 +365,7 @@
LSMIndexBulkLoadOperatorDescriptor treeIndexBulkLoadOp = new LSMIndexBulkLoadOperatorDescriptor(spec,
secondaryRecDesc, fieldPermutation, fillFactor, false, numElementsHint, false, dataflowHelperFactory,
primaryIndexDataflowHelperFactory, BulkLoadUsage.CREATE_INDEX, dataset.getDatasetId());
+ treeIndexBulkLoadOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, treeIndexBulkLoadOp,
secondaryPartitionConstraint);
return treeIndexBulkLoadOp;
@@ -362,6 +377,7 @@
ExternalIndexBulkLoadOperatorDescriptor treeIndexBulkLoadOp = new ExternalIndexBulkLoadOperatorDescriptor(spec,
secondaryRecDesc, fieldPermutation, fillFactor, false, numElementsHint, false, dataflowHelperFactory,
ExternalDatasetsRegistry.INSTANCE.getAndLockDatasetVersion(dataset, metadataProvider));
+ treeIndexBulkLoadOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, treeIndexBulkLoadOp,
secondaryPartitionConstraint);
return treeIndexBulkLoadOp;
@@ -371,7 +387,9 @@
RecordDescriptor secondaryRecDesc) throws AlgebricksException {
IScalarEvaluatorFactory[] andArgsEvalFactories = new IScalarEvaluatorFactory[numSecondaryKeyFields];
NotDescriptor notDesc = new NotDescriptor();
+ notDesc.setSourceLocation(sourceLoc);
IsUnknownDescriptor isUnknownDesc = new IsUnknownDescriptor();
+ isUnknownDesc.setSourceLocation(sourceLoc);
for (int i = 0; i < numSecondaryKeyFields; i++) {
// Access column i, and apply 'is not null'.
ColumnAccessEvalFactory columnAccessEvalFactory = new ColumnAccessEvalFactory(i);
@@ -386,14 +404,17 @@
// Create conjunctive condition where all secondary index keys must
// satisfy 'is not null'.
AndDescriptor andDesc = new AndDescriptor();
+ andDesc.setSourceLocation(sourceLoc);
selectCond = andDesc.createEvaluatorFactory(andArgsEvalFactories);
} else {
selectCond = andArgsEvalFactories[0];
}
StreamSelectRuntimeFactory select =
new StreamSelectRuntimeFactory(selectCond, null, BinaryBooleanInspector.FACTORY, false, -1, null);
+ select.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor asterixSelectOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
new IPushRuntimeFactory[] { select }, new RecordDescriptor[] { secondaryRecDesc });
+ asterixSelectOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, asterixSelectOp,
primaryPartitionConstraint);
return asterixSelectOp;
@@ -420,7 +441,7 @@
Pair<ExternalScanOperatorDescriptor, AlgebricksPartitionConstraint> indexingOpAndConstraints;
try {
indexingOpAndConstraints = ExternalIndexingOperations.createExternalIndexingOp(spec, metadataProvider,
- dataset, itemType, indexerDesc, externalFiles);
+ dataset, itemType, indexerDesc, externalFiles, sourceLoc);
} catch (Exception e) {
throw new AlgebricksException(e);
}
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java
index d31ca3b..878aab6 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryInvertedIndexOperationsHelper.java
@@ -88,11 +88,12 @@
// Sanity checks.
if (numPrimaryKeys > 1) {
throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_FOR_DATASET_WITH_COMPOSITE_PRIMARY_INDEX,
- indexType, RecordUtil.toFullyQualifiedName(dataset.getDataverseName(), dataset.getDatasetName()));
+ sourceLoc, indexType,
+ RecordUtil.toFullyQualifiedName(dataset.getDataverseName(), dataset.getDatasetName()));
}
if (numSecondaryKeys > 1) {
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_NUM_OF_FIELD, numSecondaryKeys,
- indexType, 1);
+ throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_INDEX_NUM_OF_FIELD, sourceLoc,
+ numSecondaryKeys, indexType, 1);
}
if (indexType == IndexType.LENGTH_PARTITIONED_WORD_INVIX
|| indexType == IndexType.LENGTH_PARTITIONED_NGRAM_INVIX) {
@@ -113,7 +114,7 @@
if (numSecondaryKeys > 0) {
secondaryFieldAccessEvalFactories[0] = metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
metadataProvider.getFunctionManager(), isOverridingKeyFieldTypes ? enforcedItemType : itemType,
- index.getKeyFieldNames().get(0), numPrimaryKeys);
+ index.getKeyFieldNames().get(0), numPrimaryKeys, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableOpenFieldType(index.getKeyFieldTypes().get(0),
index.getKeyFieldNames().get(0), itemType);
secondaryKeyType = keyTypePair.first;
@@ -123,9 +124,9 @@
secondaryTypeTraits[0] = typeTraitProvider.getTypeTrait(secondaryKeyType);
}
if (numFilterFields > 0) {
- secondaryFieldAccessEvalFactories[numSecondaryKeys] =
- metadataProvider.getDataFormat().getFieldAccessEvaluatorFactory(
- metadataProvider.getFunctionManager(), itemType, filterFieldName, numPrimaryKeys);
+ secondaryFieldAccessEvalFactories[numSecondaryKeys] = metadataProvider.getDataFormat()
+ .getFieldAccessEvaluatorFactory(metadataProvider.getFunctionManager(), itemType, filterFieldName,
+ numPrimaryKeys, sourceLoc);
Pair<IAType, Boolean> keyTypePair = Index.getNonNullableKeyFieldType(filterFieldName, itemType);
IAType type = keyTypePair.first;
ISerializerDeserializer serde = serdeProvider.getSerializerDeserializer(type);
@@ -242,8 +243,11 @@
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, invIndexBulkLoadOp,
secondaryPartitionConstraint);
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() }, new RecordDescriptor[] {});
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] {});
+ metaOp.setSourceLocation(sourceLoc);
// Connect the operators.
spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0);
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0);
@@ -271,6 +275,7 @@
BinaryTokenizerOperatorDescriptor tokenizerOp =
new BinaryTokenizerOperatorDescriptor(spec, tokenKeyPairRecDesc, tokenizerFactory, docField,
primaryKeyFields, isPartitioned, false, false, MissingWriterFactory.INSTANCE);
+ tokenizerOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, tokenizerOp,
primaryPartitionConstraint);
return tokenizerOp;
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java
index 8e6e0e9..1d6677e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryRTreeOperationsHelper.java
@@ -99,7 +99,7 @@
int recordColumn = dataset.getDatasetType() == DatasetType.INTERNAL ? numPrimaryKeys : 0;
secondaryFieldAccessEvalFactories = metadataProvider.getDataFormat().createMBRFactory(
metadataProvider.getFunctionManager(), isOverridingKeyFieldTypes ? enforcedItemType : itemType,
- secondaryKeyFields.get(0), recordColumn, numDimensions, filterFieldName, isPointMBR);
+ secondaryKeyFields.get(0), recordColumn, numDimensions, filterFieldName, isPointMBR, sourceLoc);
secondaryComparatorFactories = new IBinaryComparatorFactory[numNestedSecondaryKeyFields];
valueProviderFactories = new IPrimitiveValueProviderFactory[numNestedSecondaryKeyFields];
ISerializerDeserializer[] secondaryRecFields =
@@ -228,8 +228,11 @@
// Create secondary RTree bulk load op.
TreeIndexBulkLoadOperatorDescriptor secondaryBulkLoadOp = createTreeIndexBulkLoadOp(spec, fieldPermutation,
indexDataflowHelperFactory, GlobalConfig.DEFAULT_TREE_FILL_FACTOR);
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() }, new RecordDescriptor[] {});
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] {});
+ metaOp.setSourceLocation(sourceLoc);
// Connect the operators.
spec.connect(new OneToOneConnectorDescriptor(spec), keyProviderOp, 0, primaryScanOp, 0);
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0);
@@ -285,9 +288,11 @@
secondaryBulkLoadOp = createExternalIndexBulkLoadOp(spec, fieldPermutation, indexDataflowHelperFactory,
GlobalConfig.DEFAULT_TREE_FILL_FACTOR);
}
+ SinkRuntimeFactory sinkRuntimeFactory = new SinkRuntimeFactory();
+ sinkRuntimeFactory.setSourceLocation(sourceLoc);
AlgebricksMetaOperatorDescriptor metaOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 0,
- new IPushRuntimeFactory[] { new SinkRuntimeFactory() },
- new RecordDescriptor[] { secondaryRecDesc });
+ new IPushRuntimeFactory[] { sinkRuntimeFactory }, new RecordDescriptor[] { secondaryRecDesc });
+ metaOp.setSourceLocation(sourceLoc);
spec.connect(new OneToOneConnectorDescriptor(spec), secondaryBulkLoadOp, 0, metaOp, 0);
root = metaOp;
spec.connect(new OneToOneConnectorDescriptor(spec), sourceOp, 0, asterixAssignOp, 0);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
index 185cf8c..d78e80c 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/utils/SecondaryTreeIndexOperationsHelper.java
@@ -62,6 +62,7 @@
secondaryFileSplitProvider, resourceFactory, true);
IndexCreateOperatorDescriptor secondaryIndexCreateOp =
new IndexCreateOperatorDescriptor(spec, indexBuilderFactory);
+ secondaryIndexCreateOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, secondaryIndexCreateOp,
secondaryPartitionConstraint);
spec.addRoot(secondaryIndexCreateOp);
@@ -78,6 +79,7 @@
metadataProvider.getStorageComponentProvider().getStorageManager(), splitsAndConstraint.first);
// The index drop operation should be persistent regardless of temp datasets or permanent dataset.
IndexDropOperatorDescriptor btreeDrop = new IndexDropOperatorDescriptor(spec, dataflowHelperFactory, options);
+ btreeDrop.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, btreeDrop,
splitsAndConstraint.second);
spec.addRoot(btreeDrop);
@@ -93,6 +95,7 @@
metadataProvider.getStorageComponentProvider().getStorageManager(), splitsAndConstraint.first);
LSMTreeIndexCompactOperatorDescriptor compactOp =
new LSMTreeIndexCompactOperatorDescriptor(spec, dataflowHelperFactory);
+ compactOp.setSourceLocation(sourceLoc);
AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, compactOp,
secondaryPartitionConstraint);
spec.addRoot(compactOp);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/ExpressionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/ExpressionTypeComputer.java
index e4cf000..1dcf6a6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/ExpressionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/ExpressionTypeComputer.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.dataflow.data.common;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.functions.FunctionSignature;
import org.apache.asterix.om.constants.AsterixConstantValue;
import org.apache.asterix.om.functions.BuiltinFunctions;
@@ -55,8 +57,10 @@
try {
return env.getVarType(((VariableReferenceExpression) expr).getVariableReference());
} catch (Exception e) {
- throw new AlgebricksException("Could not resolve type for " + expr.toString() + ","
- + "please check whether the used variable has been defined!", e);
+ throw new CompilationException(ErrorCode.COMPILATION_ERROR, expr.getSourceLocation(),
+ "Could not resolve type for " + expr.toString() + ","
+ + "please check whether the used variable has been defined!",
+ e);
}
default:
throw new IllegalStateException();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/MergeAggregationExpressionFactory.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/MergeAggregationExpressionFactory.java
index dfb1251..33bef5d 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/MergeAggregationExpressionFactory.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/common/MergeAggregationExpressionFactory.java
@@ -42,6 +42,7 @@
AggregateFunctionCallExpression agg = (AggregateFunctionCallExpression) expr;
FunctionIdentifier fid = agg.getFunctionIdentifier();
VariableReferenceExpression tempVarExpr = new VariableReferenceExpression(originalProducedVar);
+ tempVarExpr.setSourceLocation(agg.getSourceLocation());
List<Mutable<ILogicalExpression>> arguments = new ArrayList<Mutable<ILogicalExpression>>();
Mutable<ILogicalExpression> mutableExpression = new MutableObject<ILogicalExpression>(tempVarExpr);
arguments.add(mutableExpression);
@@ -56,6 +57,9 @@
*/
return null;
}
- return BuiltinFunctions.makeAggregateFunctionExpression(mergeFid, arguments);
+ AggregateFunctionCallExpression mergeExpr =
+ BuiltinFunctions.makeAggregateFunctionExpression(mergeFid, arguments);
+ mergeExpr.setSourceLocation(agg.getSourceLocation());
+ return mergeExpr;
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java
index 678a864..6906ae4 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/base/IDataFormat.java
@@ -40,6 +40,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.IMissingWriterFactory;
import org.apache.hyracks.api.dataflow.value.IPredicateEvaluatorFactoryProvider;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public interface IDataFormat {
public ISerializerDeserializerProvider getSerdeProvider();
@@ -66,16 +67,17 @@
public IMissingWriterFactory getMissingWriterFactory();
public Triple<IScalarEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioningEvaluatorFactory(
- IFunctionManager functionManager, ARecordType recType, List<String> fldName) throws AlgebricksException;
+ IFunctionManager functionManager, ARecordType recType, List<String> fldName, SourceLocation sourceLoc)
+ throws AlgebricksException;
public IScalarEvaluatorFactory getFieldAccessEvaluatorFactory(IFunctionManager functionManager, ARecordType recType,
- List<String> fldName, int recordColumn) throws AlgebricksException;
+ List<String> fldName, int recordColumn, SourceLocation sourceLoc) throws AlgebricksException;
public IScalarEvaluatorFactory getConstantEvalFactory(IAlgebricksConstantValue value) throws AlgebricksException;
public IScalarEvaluatorFactory[] createMBRFactory(IFunctionManager functionManager, ARecordType recType,
- List<String> fldName, int recordColumn, int dimension, List<String> filterFieldName, boolean isPointMBR)
- throws AlgebricksException;
+ List<String> fldName, int recordColumn, int dimension, List<String> filterFieldName, boolean isPointMBR,
+ SourceLocation sourceLoc) throws AlgebricksException;
public IExpressionEvalSizeComputer getExpressionEvalSizeComputer();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/IncompatibleTypeException.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/IncompatibleTypeException.java
index 71a5649..1a5d5c6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/IncompatibleTypeException.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/IncompatibleTypeException.java
@@ -23,6 +23,7 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class IncompatibleTypeException extends CompilationException {
@@ -32,7 +33,19 @@
}
// Incompatible input parameters, e.g., "1.0" > 1.0
+ public IncompatibleTypeException(SourceLocation sourceLoc, FunctionIdentifier fid, ATypeTag typeTagLeft,
+ ATypeTag typeTagRight) {
+ super(ErrorCode.COMPILATION_TYPE_INCOMPATIBLE, sourceLoc, fid.getName(), typeTagLeft, typeTagRight);
+ }
+
+ // Incompatible input parameters, e.g., "1.0" > 1.0
public IncompatibleTypeException(String functionName, ATypeTag typeTagLeft, ATypeTag typeTagRight) {
super(ErrorCode.COMPILATION_TYPE_INCOMPATIBLE, functionName, typeTagLeft, typeTagRight);
}
+
+ // Incompatible input parameters, e.g., "1.0" > 1.0
+ public IncompatibleTypeException(SourceLocation sourceLoc, String functionName, ATypeTag typeTagLeft,
+ ATypeTag typeTagRight) {
+ super(ErrorCode.COMPILATION_TYPE_INCOMPATIBLE, sourceLoc, functionName, typeTagLeft, typeTagRight);
+ }
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/InvalidExpressionException.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/InvalidExpressionException.java
index 699629b..099930f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/InvalidExpressionException.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/InvalidExpressionException.java
@@ -27,6 +27,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class InvalidExpressionException extends CompilationException {
@@ -36,9 +37,21 @@
toExpectedTypeString(exprKinds));
}
+ public InvalidExpressionException(SourceLocation sourceLoc, FunctionIdentifier fid, int index,
+ ILogicalExpression actualExpr, LogicalExpressionTag... exprKinds) {
+ super(ErrorCode.COMPILATION_INVALID_EXPRESSION, sourceLoc, fid.getName(), indexToPosition(index),
+ actualExpr.toString(), toExpectedTypeString(exprKinds));
+ }
+
public InvalidExpressionException(String functionName, int index, ILogicalExpression actualExpr,
LogicalExpressionTag... exprKinds) {
super(ErrorCode.COMPILATION_INVALID_EXPRESSION, functionName, indexToPosition(index), actualExpr.toString(),
toExpectedTypeString(exprKinds));
}
+
+ public InvalidExpressionException(SourceLocation sourceLoc, String functionName, int index,
+ ILogicalExpression actualExpr, LogicalExpressionTag... exprKinds) {
+ super(ErrorCode.COMPILATION_INVALID_EXPRESSION, sourceLoc, functionName, indexToPosition(index),
+ actualExpr.toString(), toExpectedTypeString(exprKinds));
+ }
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java
index 7218a3a..9dab8ac 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java
@@ -26,6 +26,7 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class TypeMismatchException extends CompilationException {
@@ -37,9 +38,22 @@
}
// Parameter type mistmatch.
+ public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, Integer i, ATypeTag actualTypeTag,
+ ATypeTag... expectedTypeTags) {
+ super(ErrorCode.COMPILATION_TYPE_MISMATCH, sourceLoc, fid.getName(), indexToPosition(i),
+ toExpectedTypeString(expectedTypeTags), actualTypeTag);
+ }
+
+ // Parameter type mistmatch.
public TypeMismatchException(String functionName, Integer i, ATypeTag actualTypeTag, ATypeTag... expectedTypeTags) {
super(ErrorCode.COMPILATION_TYPE_MISMATCH, functionName, indexToPosition(i),
toExpectedTypeString(expectedTypeTags), actualTypeTag);
}
+ // Parameter type mistmatch.
+ public TypeMismatchException(SourceLocation sourceLoc, String functionName, Integer i, ATypeTag actualTypeTag,
+ ATypeTag... expectedTypeTags) {
+ super(ErrorCode.COMPILATION_TYPE_MISMATCH, sourceLoc, functionName, indexToPosition(i),
+ toExpectedTypeString(expectedTypeTags), actualTypeTag);
+ }
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedItemTypeException.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedItemTypeException.java
index 0393887..06491f6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedItemTypeException.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedItemTypeException.java
@@ -23,6 +23,7 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnsupportedItemTypeException extends CompilationException {
@@ -32,7 +33,17 @@
}
// Unsupported item type.
+ public UnsupportedItemTypeException(SourceLocation sourceLoc, FunctionIdentifier fid, ATypeTag itemTypeTag) {
+ super(ErrorCode.COMPILATION_TYPE_ITEM, sourceLoc, fid.getName(), itemTypeTag);
+ }
+
+ // Unsupported item type.
public UnsupportedItemTypeException(String functionName, ATypeTag itemTypeTag) {
super(ErrorCode.COMPILATION_TYPE_ITEM, functionName, itemTypeTag);
}
+
+ // Unsupported item type.
+ public UnsupportedItemTypeException(SourceLocation sourceLoc, String functionName, ATypeTag itemTypeTag) {
+ super(ErrorCode.COMPILATION_TYPE_ITEM, sourceLoc, functionName, itemTypeTag);
+ }
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedTypeException.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedTypeException.java
index bc69a48..5441cf4 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedTypeException.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/UnsupportedTypeException.java
@@ -23,6 +23,7 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnsupportedTypeException extends CompilationException {
@@ -32,7 +33,17 @@
}
// Unsupported input type.
+ public UnsupportedTypeException(SourceLocation sourceLoc, FunctionIdentifier fid, ATypeTag actualTypeTag) {
+ super(ErrorCode.COMPILATION_TYPE_UNSUPPORTED, sourceLoc, fid.getName(), actualTypeTag);
+ }
+
+ // Unsupported input type.
public UnsupportedTypeException(String funcName, ATypeTag actualTypeTag) {
super(ErrorCode.COMPILATION_TYPE_UNSUPPORTED, funcName, actualTypeTag);
}
+
+ // Unsupported input type.
+ public UnsupportedTypeException(SourceLocation sourceLoc, String funcName, ATypeTag actualTypeTag) {
+ super(ErrorCode.COMPILATION_TYPE_UNSUPPORTED, sourceLoc, funcName, actualTypeTag);
+ }
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
index 35440e4..3aea6dc 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AbstractFunctionDescriptor.java
@@ -18,25 +18,29 @@
*/
package org.apache.asterix.om.functions;
-import org.apache.asterix.common.functions.FunctionDescriptorTag;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
-import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractFunctionDescriptor implements IFunctionDescriptor {
private static final long serialVersionUID = 1L;
- @Override
- public abstract FunctionIdentifier getIdentifier();
+ protected SourceLocation sourceLoc;
@Override
- public abstract FunctionDescriptorTag getFunctionDescriptorTag();
+ public void setImmutableStates(Object... states) {
+ }
+
+ @Override
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) throws AlgebricksException {
@@ -66,5 +70,4 @@
throws AlgebricksException {
throw new NotImplementedException("Not Implemented: " + getIdentifier());
}
-
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
index d9bb73a..1fc9ef9 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/IFunctionDescriptor.java
@@ -28,11 +28,13 @@
import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public interface IFunctionDescriptor extends Serializable {
- default void setImmutableStates(Object... states) {
- }
+ void setImmutableStates(Object... states);
+
+ void setSourceLocation(SourceLocation sourceLoc);
FunctionIdentifier getIdentifier();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/AbstractResultTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/AbstractResultTypeComputer.java
index 4d6b7e6..ae7c996 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/AbstractResultTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/AbstractResultTypeComputer.java
@@ -25,6 +25,7 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* This abstract class takes care of the handling of optional types.
@@ -39,23 +40,26 @@
IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
AbstractFunctionCallExpression functionCallExpression = (AbstractFunctionCallExpression) expression;
String funcName = functionCallExpression.getFunctionIdentifier().getName();
- return TypeComputeUtils.resolveResultType(expression, env, (index, type) -> checkArgType(funcName, index, type),
- this::getResultType, propagateNullAndMissing());
+ return TypeComputeUtils.resolveResultType(expression, env,
+ (index, type, sourceLoc) -> checkArgType(funcName, index, type, sourceLoc), this::getResultType,
+ propagateNullAndMissing());
}
/**
* Checks whether an input type violates the requirement.
*
- * @param funcName
- * the function name.
* @param argIndex,
* the index of the argument to consider.
* @param type,
* the type of the input argument.
+ * @param funcName
+ * the function name.
+ * @param sourceLoc
+ * the source location
* @throws AlgebricksException
*/
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
-
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
}
/**
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/TypeCastUtils.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/TypeCastUtils.java
index 8c40903..7fa987f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/TypeCastUtils.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/TypeCastUtils.java
@@ -44,7 +44,7 @@
ATypeTag actualTypeTag = TypeComputeUtils.getActualType(inputType).getTypeTag();
if (!ATypeHierarchy.isCompatible(requiredTypeTag, actualTypeTag)) {
String funcName = expr.getFunctionIdentifier().getName();
- throw new IncompatibleTypeException(funcName, actualTypeTag, requiredTypeTag);
+ throw new IncompatibleTypeException(expr.getSourceLocation(), funcName, actualTypeTag, requiredTypeTag);
}
expr.setOpaqueParameters(opaqueParameters);
changed = true;
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractIfMissingOrNullTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractIfMissingOrNullTypeComputer.java
index 2626c6b..2ec54d1 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractIfMissingOrNullTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractIfMissingOrNullTypeComputer.java
@@ -96,7 +96,7 @@
return type.getActualType();
}
- private IAType createOutputType(IAType primeType, ATypeTag quantifier) throws AlgebricksException {
+ private IAType createOutputType(IAType primeType, ATypeTag quantifier) {
if (quantifier == null || primeType.getTypeTag() == ATypeTag.ANY) {
return primeType;
}
@@ -106,7 +106,7 @@
case NULL:
return AUnionType.createNullableType(primeType, null);
default:
- throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_STATE, String.valueOf(quantifier));
+ throw new IllegalStateException(String.valueOf(quantifier));
}
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractStringTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractStringTypeComputer.java
index 27f364a..08d2ca5 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractStringTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/AbstractStringTypeComputer.java
@@ -24,14 +24,16 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
abstract public class AbstractStringTypeComputer extends AbstractResultTypeComputer {
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
if (actualTypeTag != ATypeTag.STRING) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/BooleanFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/BooleanFunctionTypeComputer.java
index 80ac8ef..c6c744c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/BooleanFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/BooleanFunctionTypeComputer.java
@@ -41,8 +41,8 @@
AbstractFunctionCallExpression functionCallExpression = (AbstractFunctionCallExpression) expression;
String funcName = functionCallExpression.getFunctionIdentifier().getName();
// Boolean type computer doesn't follow the null/missing-in/out semantics.
- return TypeComputeUtils.resolveResultType(expression, env, (index, type) -> checkArgType(funcName, index, type),
- this::getResultType, false);
+ return TypeComputeUtils.resolveResultType(expression, env,
+ (index, type, sourceLoc) -> checkArgType(funcName, index, type, sourceLoc), this::getResultType, false);
}
@Override
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
index b328cf4..d5e576e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
@@ -71,7 +71,8 @@
fieldTypes[i] = e2Type;
fieldNames[i] = ConstantExpressionUtil.getStringConstant(e1);
if (fieldNames[i] == null) {
- throw new InvalidExpressionException(funcName, 2 * i, e1, LogicalExpressionTag.CONSTANT);
+ throw new InvalidExpressionException(f.getSourceLocation(), funcName, 2 * i, e1,
+ LogicalExpressionTag.CONSTANT);
}
i++;
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
index cc2f9b6..9e88438 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java
@@ -26,6 +26,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class CollectionMemberResultType extends AbstractResultTypeComputer {
public static final CollectionMemberResultType INSTANCE = new CollectionMemberResultType();
@@ -34,10 +35,12 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
if (type.getTypeTag() != ATypeTag.MULTISET && type.getTypeTag() != ATypeTag.ARRAY) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.MULTISET, ATypeTag.ARRAY);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.MULTISET,
+ ATypeTag.ARRAY);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
index 73c019c..71fa15c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FieldAccessByIndexResultType extends AbstractResultTypeComputer {
@@ -37,13 +38,14 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
}
if (argIndex == 1 && actualTypeTag != ATypeTag.INTEGER) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.INTEGER);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.INTEGER);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
index e9af1ab..948f8d1 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FieldAccessByNameResultType extends AbstractResultTypeComputer {
@@ -37,13 +38,14 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
}
if (argIndex == 1 && actualTypeTag != ATypeTag.STRING) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java
index 3eae173..20f51ec 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessNestedResultType.java
@@ -38,6 +38,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FieldAccessNestedResultType extends AbstractResultTypeComputer {
public static final FieldAccessNestedResultType INSTANCE = new FieldAccessNestedResultType();
@@ -46,29 +47,31 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
if (argIndex == 0 && actualTypeTag != ATypeTag.OBJECT) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.OBJECT);
}
if (argIndex == 1) {
switch (actualTypeTag) {
case STRING:
break;
case ARRAY:
- checkOrderedList(funcName, type);
+ checkOrderedList(funcName, type, sourceLoc);
break;
default:
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.ARRAY);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING,
+ ATypeTag.ARRAY);
}
}
}
- private void checkOrderedList(String funcName, IAType type) throws AlgebricksException {
+ private void checkOrderedList(String funcName, IAType type, SourceLocation sourceLoc) throws AlgebricksException {
AOrderedListType listType = (AOrderedListType) type;
ATypeTag itemTypeTag = listType.getItemType().getTypeTag();
if (itemTypeTag != ATypeTag.STRING && itemTypeTag != ATypeTag.ANY) {
- throw new UnsupportedItemTypeException(funcName, itemTypeTag);
+ throw new UnsupportedItemTypeException(sourceLoc, funcName, itemTypeTag);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java
index 0748745..606a68e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FullTextContainsResultTypeComputer extends AbstractResultTypeComputer {
@@ -34,24 +35,26 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
// Expression1 should be a string.
if (argIndex == 0 && actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.ANY) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING);
}
// Expression2 should be a string, or an (un)ordered list.
if (argIndex == 1 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.MULTISET
&& actualTypeTag != ATypeTag.ARRAY && actualTypeTag != ATypeTag.ANY)) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.MULTISET,
- ATypeTag.ARRAY);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING,
+ ATypeTag.MULTISET, ATypeTag.ARRAY);
}
// Each option name should be a string if it is already processed by FullTextContainsParameterCheckRule.
// Before, the third argument should be a record if exists.
// The structure is: arg2 = optionName1, arg3 = optionValue1, arg4 = optionName1, arg5 = optionValue2, ...
if (argIndex > 1 && argIndex % 2 == 0 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.OBJECT
&& actualTypeTag != ATypeTag.ANY)) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.OBJECT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING,
+ ATypeTag.OBJECT);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java
index cc19ac4..51fd6fc 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java
@@ -24,12 +24,13 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* The first argument of INJECT_FAILURE can be any data model instance and will be passed verbatim to the
* caller. The second argument is a boolean that determines if the invocation throws an exception.
*
- * Consequently {@link #checkArgType(String, int, IAType)} validates that the second argument is a
+ * Consequently {@link AbstractResultTypeComputer#checkArgType(String, int, IAType, SourceLocation)} validates that the second argument is a
* boolean and {@link #getResultType(ILogicalExpression, IAType...)} returns the type of the first
* argument.
*/
@@ -38,9 +39,10 @@
public static final InjectFailureTypeComputer INSTANCE = new InjectFailureTypeComputer();
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
if (argIndex == 1 && type.getTypeTag() != ATypeTag.BOOLEAN) {
- throw new TypeMismatchException(funcName, argIndex, type.getTypeTag(), ATypeTag.BOOLEAN);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, type.getTypeTag(), ATypeTag.BOOLEAN);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java
index 0526e7d..abdff7e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/MinMaxAggTypeComputer.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class MinMaxAggTypeComputer extends AbstractResultTypeComputer {
@@ -34,7 +35,8 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
switch (tag) {
case DOUBLE:
@@ -52,7 +54,7 @@
case ANY:
return;
default:
- throw new UnsupportedTypeException(funcName, tag);
+ throw new UnsupportedTypeException(sourceLoc, funcName, tag);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
index 575ec52..e896ae7 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
@@ -28,6 +28,7 @@
import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class NonTaggedGetItemResultType extends AbstractResultTypeComputer {
@@ -37,15 +38,17 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag actualTypeTag = type.getTypeTag();
if (argIndex == 0) {
if (type.getTypeTag() != ATypeTag.MULTISET && type.getTypeTag() != ATypeTag.ARRAY) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.ARRAY);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.STRING,
+ ATypeTag.ARRAY);
}
} else {
if (!ATypeHierarchy.isCompatible(type.getTypeTag(), ATypeTag.INTEGER)) {
- throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.INTEGER);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, actualTypeTag, ATypeTag.INTEGER);
}
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java
index 034309b..b311b6e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java
@@ -36,8 +36,8 @@
@Override
protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
- AbstractFunctionCallExpression functionCallExpression = (AbstractFunctionCallExpression) expr;
- String funcName = functionCallExpression.getFunctionIdentifier().getName();
+ AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+ String funcName = funcExpr.getFunctionIdentifier().getName();
IAType t1 = strippedInputTypes[0];
IAType t2 = strippedInputTypes[1];
ATypeTag tag1 = t1.getTypeTag();
@@ -59,7 +59,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case FLOAT:
@@ -78,7 +78,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case BIGINT:
@@ -99,7 +99,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case INTEGER:
@@ -122,7 +122,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case SMALLINT:
@@ -147,7 +147,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case TINYINT:
@@ -174,7 +174,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case ANY:
@@ -189,7 +189,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DATE:
@@ -206,7 +206,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case TIME:
@@ -223,7 +223,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DATETIME:
@@ -237,7 +237,7 @@
type = BuiltinType.ADATETIME;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DURATION:
@@ -255,7 +255,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case YEARMONTHDURATION:
@@ -276,7 +276,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DAYTIMEDURATION:
@@ -297,11 +297,11 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
return type;
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java
index ec9c59f..32a6487 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java
@@ -26,6 +26,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class NumericAggTypeComputer extends AbstractResultTypeComputer {
public static final NumericAggTypeComputer INSTANCE = new NumericAggTypeComputer();
@@ -34,7 +35,8 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
switch (tag) {
case DOUBLE:
@@ -46,7 +48,7 @@
case ANY:
break;
default:
- throw new UnsupportedTypeException(funcName, tag);
+ throw new UnsupportedTypeException(sourceLoc, funcName, tag);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDivideTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDivideTypeComputer.java
index 92d3bd5..5e2ebae 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDivideTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDivideTypeComputer.java
@@ -39,8 +39,8 @@
@Override
protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException {
- AbstractFunctionCallExpression functionCallExpression = (AbstractFunctionCallExpression) expr;
- String funcName = functionCallExpression.getFunctionIdentifier().getName();
+ AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+ String funcName = funcExpr.getFunctionIdentifier().getName();
IAType t1 = strippedInputTypes[0];
IAType t2 = strippedInputTypes[1];
ATypeTag tag1 = t1.getTypeTag();
@@ -62,7 +62,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case FLOAT:
@@ -81,7 +81,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case BIGINT:
@@ -103,7 +103,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case ANY:
@@ -118,7 +118,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DATE:
@@ -135,7 +135,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case TIME:
@@ -152,7 +152,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DATETIME:
@@ -166,7 +166,7 @@
type = BuiltinType.ADATETIME;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DURATION:
@@ -184,7 +184,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case YEARMONTHDURATION:
@@ -205,7 +205,7 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
case DAYTIMEDURATION:
@@ -226,11 +226,11 @@
type = BuiltinType.ANY;
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
break;
default:
- throw new IncompatibleTypeException(funcName, tag1, tag2);
+ throw new IncompatibleTypeException(funcExpr.getSourceLocation(), funcName, tag1, tag2);
}
return type;
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java
index 1e9678a..54e1bcd 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericDoubleOutputFunctionTypeComputer.java
@@ -26,6 +26,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class NumericDoubleOutputFunctionTypeComputer extends AbstractResultTypeComputer {
@@ -36,7 +37,8 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
switch (tag) {
case TINYINT:
@@ -47,7 +49,7 @@
case DOUBLE:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java
index 2081b9b..8d84ce0 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericInt8OutputFunctionTypeComputer.java
@@ -26,6 +26,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class NumericInt8OutputFunctionTypeComputer extends AbstractResultTypeComputer {
@@ -35,7 +36,8 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
switch (tag) {
case TINYINT:
@@ -46,7 +48,7 @@
case DOUBLE:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java
index dbec30e..b537ffc 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRound2TypeComputer.java
@@ -29,6 +29,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class NumericRound2TypeComputer extends AbstractResultTypeComputer {
@@ -39,7 +40,8 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
if (argIndex == 0) {
switch (tag) {
@@ -51,8 +53,8 @@
case DOUBLE:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
- ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT,
+ ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
}
}
if (argIndex == 1) {
@@ -63,8 +65,8 @@
case BIGINT:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
- ATypeTag.INTEGER, ATypeTag.BIGINT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT,
+ ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT);
}
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java
index ea5c2bb..ef9791f 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericUnaryFunctionTypeComputer.java
@@ -29,6 +29,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class NumericUnaryFunctionTypeComputer extends AbstractResultTypeComputer {
public static final NumericUnaryFunctionTypeComputer INSTANCE = new NumericUnaryFunctionTypeComputer();
@@ -37,7 +38,8 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
switch (tag) {
case TINYINT:
@@ -49,7 +51,7 @@
case ANY:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java
index a1fb5b0..5c59af6 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java
@@ -63,7 +63,8 @@
IAType type0 = (IAType) env.getType(funcExpr.getArguments().get(0).getValue());
ARecordType inputRecordType = TypeComputeUtils.extractRecordType(type0);
if (inputRecordType == null) {
- throw new TypeMismatchException(funcName, 0, type0.getTypeTag(), ATypeTag.OBJECT);
+ throw new TypeMismatchException(funcExpr.getSourceLocation(), funcName, 0, type0.getTypeTag(),
+ ATypeTag.OBJECT);
}
ILogicalExpression arg1 = funcExpr.getArguments().get(1).getValue();
@@ -109,8 +110,8 @@
if (fn[j].equals(FIELD_NAME_NAME)) {
ILogicalExpression fieldNameExpr = recConsExpr.getArguments().get(j).getValue();
if (ConstantExpressionUtil.getStringConstant(fieldNameExpr) == null) {
- throw new InvalidExpressionException(funcName, 1, fieldNameExpr,
- LogicalExpressionTag.CONSTANT);
+ throw new InvalidExpressionException(funcExpr.getSourceLocation(), funcName, 1,
+ fieldNameExpr, LogicalExpressionTag.CONSTANT);
}
// Get the actual "field-name" string
fieldName = ConstantExpressionUtil.getStringArgument(recConsExpr, j + 1);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
index db4d1c4..98ec9e7 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordMergeTypeComputer.java
@@ -38,6 +38,7 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class RecordMergeTypeComputer implements IResultTypeComputer {
public static final RecordMergeTypeComputer INSTANCE = new RecordMergeTypeComputer();
@@ -56,12 +57,12 @@
boolean unknownable = TypeHelper.canBeUnknown(t0) || TypeHelper.canBeUnknown(t1);
ARecordType recType0 = TypeComputeUtils.extractRecordType(t0);
if (recType0 == null) {
- throw new TypeMismatchException(funcName, 0, t0.getTypeTag(), ATypeTag.OBJECT);
+ throw new TypeMismatchException(f.getSourceLocation(), funcName, 0, t0.getTypeTag(), ATypeTag.OBJECT);
}
ARecordType recType1 = TypeComputeUtils.extractRecordType(t1);
if (recType1 == null) {
- throw new TypeMismatchException(funcName, 1, t1.getTypeTag(), ATypeTag.OBJECT);
+ throw new TypeMismatchException(f.getSourceLocation(), funcName, 1, t1.getTypeTag(), ATypeTag.OBJECT);
}
List<String> resultFieldNames = new ArrayList<>();
@@ -90,11 +91,13 @@
if (pos >= 0) {
IAType resultFieldType = resultFieldTypes.get(pos);
if (resultFieldType.getTypeTag() != fieldTypes[i].getTypeTag()) {
- throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, fieldNames[i]);
+ throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, f.getSourceLocation(),
+ fieldNames[i]);
}
// Assuming fieldTypes[i].getTypeTag() = resultFieldType.getTypeTag()
if (fieldTypes[i].getTypeTag() == ATypeTag.OBJECT) {
- resultFieldTypes.set(pos, mergedNestedType(fieldNames[i], fieldTypes[i], resultFieldType));
+ resultFieldTypes.set(pos,
+ mergedNestedType(fieldNames[i], fieldTypes[i], resultFieldType, f.getSourceLocation()));
}
} else {
additionalFieldNames.add(fieldNames[i]);
@@ -116,9 +119,10 @@
return resultType;
}
- private IAType mergedNestedType(String fieldName, IAType fieldType1, IAType fieldType0) throws AlgebricksException {
+ private IAType mergedNestedType(String fieldName, IAType fieldType1, IAType fieldType0, SourceLocation sourceLoc)
+ throws AlgebricksException {
if (fieldType1.getTypeTag() != ATypeTag.OBJECT || fieldType0.getTypeTag() != ATypeTag.OBJECT) {
- throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, fieldName);
+ throw new CompilationException(ErrorCode.COMPILATION_DUPLICATE_FIELD_NAME, sourceLoc, fieldName);
}
ARecordType resultType = (ARecordType) fieldType0;
@@ -131,8 +135,8 @@
// If a sub-record do merge, else ignore and let the values decide what to do
if (fieldType1Copy.getFieldTypes()[i].getTypeTag() == ATypeTag.OBJECT) {
IAType[] oldTypes = resultType.getFieldTypes();
- oldTypes[pos] =
- mergedNestedType(fname, fieldType1Copy.getFieldTypes()[i], resultType.getFieldTypes()[pos]);
+ oldTypes[pos] = mergedNestedType(fname, fieldType1Copy.getFieldTypes()[i],
+ resultType.getFieldTypes()[pos], sourceLoc);
resultType = new ARecordType(resultType.getTypeName(), resultType.getFieldNames(), oldTypes,
resultType.isOpen());
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java
index ceba3fb..ae51c61 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordPairsTypeComputer.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class RecordPairsTypeComputer extends AbstractResultTypeComputer {
@@ -34,10 +35,11 @@
}
@Override
- protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ protected void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag typeTag = type.getTypeTag();
if (typeTag != ATypeTag.OBJECT) {
- throw new TypeMismatchException(funcName, argIndex, typeTag, ATypeTag.OBJECT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, typeTag, ATypeTag.OBJECT);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java
index e0b10d1..4e9a563 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordRemoveFieldsTypeComputer.java
@@ -51,6 +51,7 @@
import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Cases to support:
@@ -65,10 +66,10 @@
}
private void getPathFromConstantExpression(String funcName, ILogicalExpression expression, Set<String> fieldNameSet,
- List<List<String>> pathList) throws AlgebricksException {
+ List<List<String>> pathList, SourceLocation sourceLoc) throws AlgebricksException {
ConstantExpression ce = (ConstantExpression) expression;
if (!(ce.getValue() instanceof AsterixConstantValue)) {
- throw new InvalidExpressionException(funcName, 1, ce, LogicalExpressionTag.CONSTANT);
+ throw new InvalidExpressionException(sourceLoc, funcName, 1, ce, LogicalExpressionTag.CONSTANT);
}
IAObject item = ((AsterixConstantValue) ce.getValue()).getObject();
ATypeTag type = item.getType().getTypeTag();
@@ -89,11 +90,11 @@
pathList.add(path);
break;
default:
- throw new UnsupportedTypeException(funcName, type);
+ throw new UnsupportedTypeException(sourceLoc, funcName, type);
}
}
- private List<String> getListFromExpression(String funcName, ILogicalExpression expression)
+ private List<String> getListFromExpression(String funcName, ILogicalExpression expression, SourceLocation sourceLoc)
throws AlgebricksException {
AbstractFunctionCallExpression funcExp = (AbstractFunctionCallExpression) expression;
List<Mutable<ILogicalExpression>> args = funcExp.getArguments();
@@ -104,14 +105,14 @@
// Input list has only one level of nesting (list of list or list of strings)
ConstantExpression ce = (ConstantExpression) arg.getValue();
if (!(ce.getValue() instanceof AsterixConstantValue)) {
- throw new InvalidExpressionException(funcName, 1, ce, LogicalExpressionTag.CONSTANT);
+ throw new InvalidExpressionException(sourceLoc, funcName, 1, ce, LogicalExpressionTag.CONSTANT);
}
IAObject item = ((AsterixConstantValue) ce.getValue()).getObject();
ATypeTag type = item.getType().getTypeTag();
if (type == ATypeTag.STRING) {
list.add(((AString) item).getStringValue());
} else {
- throw new UnsupportedTypeException(funcName, type);
+ throw new UnsupportedTypeException(sourceLoc, funcName, type);
}
}
@@ -119,8 +120,8 @@
}
private void getPathFromFunctionExpression(String funcName, ILogicalExpression expression, Set<String> fieldNameSet,
- List<List<String>> pathList) throws AlgebricksException {
- List<String> path = getListFromExpression(funcName, expression);
+ List<List<String>> pathList, SourceLocation sourceLoc) throws AlgebricksException {
+ List<String> path = getListFromExpression(funcName, expression, sourceLoc);
// Add the path head to remove set
fieldNameSet.add(path.get(0));
pathList.add(path);
@@ -136,14 +137,14 @@
ILogicalExpression le = arg.getValue();
switch (le.getExpressionTag()) {
case CONSTANT:
- getPathFromConstantExpression(funcName, le, fieldNameSet, pathList);
+ getPathFromConstantExpression(funcName, le, fieldNameSet, pathList, funcExp.getSourceLocation());
break;
case FUNCTION_CALL:
- getPathFromFunctionExpression(funcName, le, fieldNameSet, pathList);
+ getPathFromFunctionExpression(funcName, le, fieldNameSet, pathList, funcExp.getSourceLocation());
break;
default:
- throw new InvalidExpressionException(funcName, 1, le, LogicalExpressionTag.CONSTANT,
- LogicalExpressionTag.FUNCTION_CALL);
+ throw new InvalidExpressionException(funcExp.getSourceLocation(), funcName, 1, le,
+ LogicalExpressionTag.CONSTANT, LogicalExpressionTag.FUNCTION_CALL);
}
}
}
@@ -159,7 +160,7 @@
Set<String> fieldNameSet = new HashSet<>();
Deque<String> fieldPathStack = new ArrayDeque<>();
- ARecordType inputRecordType = getRecordTypeFromType(funcName, type0);
+ ARecordType inputRecordType = getRecordTypeFromType(funcName, type0, funcExpr.getSourceLocation());
if (inputRecordType == null) {
return BuiltinType.ANY;
}
@@ -168,7 +169,8 @@
IAType inputListType = (IAType) env.getType(arg1);
AOrderedListType inputOrderedListType = TypeComputeUtils.extractOrderedListType(inputListType);
if (inputOrderedListType == null) {
- throw new TypeMismatchException(funcName, 1, inputListType.getTypeTag(), ATypeTag.ARRAY);
+ throw new TypeMismatchException(funcExpr.getSourceLocation(), funcName, 1, inputListType.getTypeTag(),
+ ATypeTag.ARRAY);
}
ATypeTag tt = inputOrderedListType.getItemType().getTypeTag();
@@ -319,7 +321,8 @@
destFieldTypes.toArray(new IAType[n]), isOpen);
}
- private static ARecordType getRecordTypeFromType(String funcName, IAType type0) throws AlgebricksException {
+ private static ARecordType getRecordTypeFromType(String funcName, IAType type0, SourceLocation sourceLoc)
+ throws AlgebricksException {
switch (type0.getTypeTag()) {
case OBJECT:
return (ARecordType) type0;
@@ -334,7 +337,7 @@
}
// Falls through for other cases.
default:
- throw new TypeMismatchException(funcName, 0, type0.getTypeTag(), ATypeTag.OBJECT);
+ throw new TypeMismatchException(sourceLoc, funcName, 0, type0.getTypeTag(), ATypeTag.OBJECT);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
index fae3d90..07c79ad 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
@@ -27,6 +27,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class ScalarVersionOfAggregateResultType extends AbstractResultTypeComputer {
@@ -36,10 +37,11 @@
}
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
if (tag != ATypeTag.ANY && tag != ATypeTag.ARRAY && tag != ATypeTag.MULTISET) {
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.ARRAY, ATypeTag.MULTISET);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.ARRAY, ATypeTag.MULTISET);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java
index b93f215..c05b085 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SleepTypeComputer.java
@@ -24,12 +24,14 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SleepTypeComputer extends AbstractResultTypeComputer {
public static final SleepTypeComputer INSTANCE = new SleepTypeComputer();
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
if (argIndex == 1) {
switch (type.getTypeTag()) {
case TINYINT:
@@ -38,7 +40,7 @@
case BIGINT:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, type.getTypeTag(), ATypeTag.TINYINT,
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, type.getTypeTag(), ATypeTag.TINYINT,
ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java
index e29b6ec..466ba4d 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/StringIntToStringTypeComputer.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class StringIntToStringTypeComputer extends AbstractResultTypeComputer {
public static final StringIntToStringTypeComputer INSTANCE = new StringIntToStringTypeComputer(1);
@@ -38,11 +39,12 @@
}
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
if (argIndex < stringArgCount) {
if (tag != ATypeTag.STRING) {
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.STRING);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.STRING);
}
} else {
switch (tag) {
@@ -52,8 +54,8 @@
case BIGINT:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
- ATypeTag.INTEGER, ATypeTag.BIGINT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT,
+ ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT);
}
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java
index 0ab49d0..5655454 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubsetCollectionTypeComputer.java
@@ -55,7 +55,8 @@
case UNION: {
AUnionType ut = (AUnionType) t;
if (!ut.isUnknownableType()) {
- throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.MULTISET, ATypeTag.ARRAY);
+ throw new TypeMismatchException(fun.getSourceLocation(), funcName, 0, actualTypeTag,
+ ATypeTag.MULTISET, ATypeTag.ARRAY);
}
IAType t2 = ut.getActualType();
ATypeTag tag2 = t2.getTypeTag();
@@ -63,12 +64,14 @@
AbstractCollectionType act = (AbstractCollectionType) t2;
return act.getItemType();
}
- throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.MULTISET, ATypeTag.ARRAY);
+ throw new TypeMismatchException(fun.getSourceLocation(), funcName, 0, actualTypeTag, ATypeTag.MULTISET,
+ ATypeTag.ARRAY);
}
case ANY:
return BuiltinType.ANY;
default:
- throw new TypeMismatchException(funcName, 0, actualTypeTag, ATypeTag.MULTISET, ATypeTag.ARRAY);
+ throw new TypeMismatchException(fun.getSourceLocation(), funcName, 0, actualTypeTag, ATypeTag.MULTISET,
+ ATypeTag.ARRAY);
}
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java
index 74a9530..a1d46f0 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SubstringTypeComputer.java
@@ -25,15 +25,17 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SubstringTypeComputer extends AbstractResultTypeComputer {
public static final SubstringTypeComputer INSTANCE = new SubstringTypeComputer();
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
if (argIndex == 0 && tag != ATypeTag.STRING) {
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.STRING);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.STRING);
}
if (argIndex > 0 && argIndex <= 2) {
switch (tag) {
@@ -43,8 +45,8 @@
case BIGINT:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
- ATypeTag.INTEGER, ATypeTag.BIGINT);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT,
+ ATypeTag.SMALLINT, ATypeTag.INTEGER, ATypeTag.BIGINT);
}
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SwitchCaseComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SwitchCaseComputer.java
index fa2bf5b..59bfddf 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SwitchCaseComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/SwitchCaseComputer.java
@@ -47,7 +47,8 @@
int argNumber = fce.getArguments().size();
if (argNumber < 3) {
- throw new CompilationException(ErrorCode.COMPILATION_INVALID_PARAMETER_NUMBER, funcName, argNumber);
+ throw new CompilationException(ErrorCode.COMPILATION_INVALID_PARAMETER_NUMBER, fce.getSourceLocation(),
+ funcName, argNumber);
}
int argSize = fce.getArguments().size();
List<IAType> types = new ArrayList<>();
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
index d6825e3..806235c 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java
@@ -18,6 +18,8 @@
*/
package org.apache.asterix.om.typecomputer.impl;
+import java.util.List;
+
import org.apache.asterix.om.types.AOrderedListType;
import org.apache.asterix.om.types.ARecordType;
import org.apache.asterix.om.types.ATypeTag;
@@ -30,6 +32,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class TypeComputeUtils {
@@ -40,13 +43,13 @@
private static final byte NULL = 16;
@FunctionalInterface
- public static interface ArgTypeChecker {
- public void checkArgTypes(int argIndex, IAType argType) throws AlgebricksException;
+ public interface ArgTypeChecker {
+ void checkArgTypes(int argIndex, IAType argType, SourceLocation argSrcLoc) throws AlgebricksException;
}
@FunctionalInterface
- public static interface ResultTypeGenerator {
- public IAType getResultType(ILogicalExpression expr, IAType... knownInputTypes) throws AlgebricksException;
+ public interface ResultTypeGenerator {
+ IAType getResultType(ILogicalExpression expr, IAType... knownInputTypes) throws AlgebricksException;
}
private TypeComputeUtils() {
@@ -73,9 +76,10 @@
throws AlgebricksException {
AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
- IAType[] inputTypes = new IAType[fce.getArguments().size()];
+ List<Mutable<ILogicalExpression>> arguments = fce.getArguments();
+ IAType[] inputTypes = new IAType[arguments.size()];
int index = 0;
- for (Mutable<ILogicalExpression> argRef : fce.getArguments()) {
+ for (Mutable<ILogicalExpression> argRef : arguments) {
ILogicalExpression arg = argRef.getValue();
inputTypes[index++] = (IAType) env.getType(arg);
}
@@ -89,7 +93,7 @@
|| argTypeTag == ATypeTag.MISSING) {
continue;
}
- checker.checkArgTypes(argIndex, knownInputTypes[argIndex]);
+ checker.checkArgTypes(argIndex, knownInputTypes[argIndex], fce.getSourceLocation());
}
// Computes the result type.
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryBinaryInt64TypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryBinaryInt64TypeComputer.java
index d52ac88..911e4d1 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryBinaryInt64TypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryBinaryInt64TypeComputer.java
@@ -26,6 +26,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnaryBinaryInt64TypeComputer extends AbstractResultTypeComputer {
public static final UnaryBinaryInt64TypeComputer INSTANCE = new UnaryBinaryInt64TypeComputer();
@@ -34,10 +35,11 @@
}
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
if (tag != ATypeTag.BINARY) {
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.BINARY);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.BINARY);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java
index f815f33..3066a22 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryMinusTypeComputer.java
@@ -24,6 +24,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnaryMinusTypeComputer extends AbstractResultTypeComputer {
@@ -33,7 +34,8 @@
}
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
switch (tag) {
case TINYINT:
@@ -44,7 +46,7 @@
case DOUBLE:
break;
default:
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.TINYINT, ATypeTag.SMALLINT,
ATypeTag.INTEGER, ATypeTag.BIGINT, ATypeTag.FLOAT, ATypeTag.DOUBLE);
}
}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryStringInt64TypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryStringInt64TypeComputer.java
index e744ef1..5535890 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryStringInt64TypeComputer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryStringInt64TypeComputer.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.types.IAType;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnaryStringInt64TypeComputer extends AbstractResultTypeComputer {
@@ -34,10 +35,11 @@
}
@Override
- public void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException {
+ public void checkArgType(String funcName, int argIndex, IAType type, SourceLocation sourceLoc)
+ throws AlgebricksException {
ATypeTag tag = type.getTypeTag();
if (tag != ATypeTag.STRING) {
- throw new TypeMismatchException(funcName, argIndex, tag, ATypeTag.STRING);
+ throw new TypeMismatchException(sourceLoc, funcName, argIndex, tag, ATypeTag.STRING);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java
index 34f961c..6566a04 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java
@@ -38,7 +38,7 @@
@Override
public IAggregateEvaluatorFactory createAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new FirstElementEvalFactory(args, false);
+ return new FirstElementEvalFactory(args, false, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java
index bea8d5f..86785e4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java
@@ -19,12 +19,14 @@
package org.apache.asterix.runtime.aggregates.collections;
import org.apache.asterix.om.types.ATypeTag;
+import org.apache.asterix.runtime.aggregates.std.AbstractAggregateFunction;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -35,15 +37,17 @@
private static final long serialVersionUID = 1L;
private final IScalarEvaluatorFactory[] args;
private final boolean isLocal;
+ private final SourceLocation sourceLoc;
- FirstElementEvalFactory(IScalarEvaluatorFactory[] args, boolean isLocal) {
+ FirstElementEvalFactory(IScalarEvaluatorFactory[] args, boolean isLocal, SourceLocation sourceLoc) {
this.args = args;
this.isLocal = isLocal;
+ this.sourceLoc = sourceLoc;
}
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new IAggregateEvaluator() {
+ return new AbstractAggregateFunction(sourceLoc) {
private boolean first = true;
// Needs to copy the bytes from inputVal to outputVal because the byte space of inputVal could be re-used
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java
index 4e35950..6cc119e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java
@@ -58,6 +58,6 @@
@Override
public IAggregateEvaluatorFactory createAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new ListifyAggregateFunctionEvalFactory(args, oltype);
+ return new ListifyAggregateFunctionEvalFactory(args, oltype, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java
index 2bb9eb3..e2e2859 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java
@@ -22,12 +22,14 @@
import org.apache.asterix.builders.OrderedListBuilder;
import org.apache.asterix.om.types.AOrderedListType;
+import org.apache.asterix.runtime.aggregates.std.AbstractAggregateFunction;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -38,15 +40,18 @@
private static final long serialVersionUID = 1L;
private IScalarEvaluatorFactory[] args;
private final AOrderedListType orderedlistType;
+ private final SourceLocation sourceLoc;
- public ListifyAggregateFunctionEvalFactory(IScalarEvaluatorFactory[] args, AOrderedListType type) {
+ public ListifyAggregateFunctionEvalFactory(IScalarEvaluatorFactory[] args, AOrderedListType type,
+ SourceLocation sourceLoc) {
this.args = args;
this.orderedlistType = type;
+ this.sourceLoc = sourceLoc;
}
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new IAggregateEvaluator() {
+ return new AbstractAggregateFunction(sourceLoc) {
private IPointable inputVal = new VoidPointable();
private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java
index 5c73390..baf89e0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java
@@ -37,7 +37,7 @@
@Override
public IAggregateEvaluatorFactory createAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new FirstElementEvalFactory(args, true);
+ return new FirstElementEvalFactory(args, true, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
index e929f0f..c8ebff6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
@@ -56,7 +56,7 @@
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
// Use ScanCollection to iterate over list items.
ScanCollectionUnnestingFunctionFactory scanCollectionFactory =
- new ScanCollectionUnnestingFunctionFactory(args[0]);
+ new ScanCollectionUnnestingFunctionFactory(args[0], sourceLoc);
return new GenericScalarAggregateFunction(aggFuncFactory.createAggregateEvaluator(ctx),
scanCollectionFactory, ctx);
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAggregateFunction.java
similarity index 63%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAggregateFunction.java
index 0660f23..3054323 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAggregateFunction.java
@@ -16,14 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.runtime.aggregates.serializable.std;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluator;
+import org.apache.hyracks.api.exceptions.SourceLocation;
- public TranslationException(String msg) {
- super(msg);
+public abstract class AbstractSerializableAggregateFunction implements ISerializedAggregateEvaluator {
+ protected final SourceLocation sourceLoc;
+
+ protected AbstractSerializableAggregateFunction(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java
index 9d4712b7..563ff00 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableAvgAggregateFunction.java
@@ -49,16 +49,16 @@
import org.apache.asterix.runtime.exceptions.UnsupportedItemTypeException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluator;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-public abstract class AbstractSerializableAvgAggregateFunction implements ISerializedAggregateEvaluator {
+public abstract class AbstractSerializableAvgAggregateFunction extends AbstractSerializableAggregateFunction {
private static final int SUM_FIELD_ID = 0;
private static final int COUNT_FIELD_ID = 1;
@@ -90,8 +90,9 @@
private ISerializerDeserializer<ANull> nullSerde =
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ANULL);
- public AbstractSerializableAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public AbstractSerializableAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
}
@@ -136,7 +137,7 @@
} else if (aggType == ATypeTag.SYSTEM_NULL) {
aggType = typeTag;
} else if (typeTag != ATypeTag.SYSTEM_NULL && !ATypeHierarchy.isCompatible(typeTag, aggType)) {
- throw new IncompatibleTypeException(BuiltinFunctions.AVG, bytes[offset], aggType.serialize());
+ throw new IncompatibleTypeException(sourceLoc, BuiltinFunctions.AVG, bytes[offset], aggType.serialize());
} else if (ATypeHierarchy.canPromote(aggType, typeTag)) {
aggType = typeTag;
}
@@ -173,7 +174,7 @@
break;
}
default:
- throw new UnsupportedItemTypeException(BuiltinFunctions.AVG, bytes[offset]);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.AVG, bytes[offset]);
}
BufferSerDeUtil.writeDouble(sum, state, start + SUM_OFFSET);
BufferSerDeUtil.writeLong(count, state, start + COUNT_OFFSET);
@@ -252,7 +253,7 @@
break;
}
default:
- throw new UnsupportedItemTypeException(BuiltinFunctions.AVG, serBytes[offset]);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.AVG, serBytes[offset]);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableCountAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableCountAggregateFunction.java
index a2a2d1f..c37a524 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableCountAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableCountAggregateFunction.java
@@ -31,9 +31,9 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluator;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -41,7 +41,7 @@
/**
* count(NULL) returns NULL.
*/
-public abstract class AbstractSerializableCountAggregateFunction implements ISerializedAggregateEvaluator {
+public abstract class AbstractSerializableCountAggregateFunction extends AbstractSerializableAggregateFunction {
private static final int MET_NULL_OFFSET = 0;
private static final int COUNT_OFFSET = 1;
@@ -55,8 +55,9 @@
private IPointable inputVal = new VoidPointable();
private IScalarEvaluator eval;
- public AbstractSerializableCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public AbstractSerializableCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java
index 8ba3a05..a4e1090 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/AbstractSerializableSumAggregateFunction.java
@@ -44,15 +44,15 @@
import org.apache.asterix.runtime.exceptions.UnsupportedItemTypeException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluator;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-public abstract class AbstractSerializableSumAggregateFunction implements ISerializedAggregateEvaluator {
+public abstract class AbstractSerializableSumAggregateFunction extends AbstractSerializableAggregateFunction {
protected static final int AGG_TYPE_OFFSET = 0;
private static final int SUM_OFFSET = 1;
@@ -67,8 +67,9 @@
@SuppressWarnings("rawtypes")
public ISerializerDeserializer serde;
- public AbstractSerializableSumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public AbstractSerializableSumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
}
@@ -100,7 +101,7 @@
} else if (aggType == ATypeTag.SYSTEM_NULL) {
aggType = typeTag;
} else if (typeTag != ATypeTag.SYSTEM_NULL && !ATypeHierarchy.isCompatible(typeTag, aggType)) {
- throw new IncompatibleTypeException(BuiltinFunctions.SUM, bytes[offset], aggType.serialize());
+ throw new IncompatibleTypeException(sourceLoc, BuiltinFunctions.SUM, bytes[offset], aggType.serialize());
}
if (ATypeHierarchy.canPromote(aggType, typeTag)) {
@@ -147,7 +148,7 @@
break;
}
default:
- throw new UnsupportedItemTypeException(BuiltinFunctions.SUM, bytes[offset]);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SUM, bytes[offset]);
}
state[start + AGG_TYPE_OFFSET] = aggType.serialize();
BufferSerDeUtil.writeDouble(sum, state, start + SUM_OFFSET);
@@ -206,7 +207,7 @@
break;
}
default:
- throw new UnsupportedItemTypeException(BuiltinFunctions.SUM, aggType.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SUM, aggType.serialize());
}
} catch (IOException e) {
throw HyracksDataException.create(e);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
index ab4aa63..6601243 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableAvgAggregateFunction(args, ctx);
+ return new SerializableAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateFunction.java
index 4c32fe0..611538f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateFunction.java
@@ -25,13 +25,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java
index ec86cf8..506a9f7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java
@@ -56,7 +56,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableCountAggregateFunction(args, ctx);
+ return new SerializableCountAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateFunction.java
index fb8d8d7..0815dfd 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateFunction.java
@@ -21,13 +21,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* count(NULL) returns NULL.
*/
public class SerializableCountAggregateFunction extends AbstractSerializableCountAggregateFunction {
- public SerializableCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
index 8f40f8a..f9a8834 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableGlobalAvgAggregateFunction(args, ctx);
+ return new SerializableGlobalAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateFunction.java
index a916355..9bb4312 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateFunction.java
@@ -26,13 +26,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableGlobalAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableGlobalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableGlobalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateDescriptor.java
index 19149d5..c67da27 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateDescriptor.java
@@ -55,7 +55,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableGlobalSqlAvgAggregateFunction(args, ctx);
+ return new SerializableGlobalSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateFunction.java
index 8ddccdc..5fe1d7b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableGlobalSqlAvgAggregateFunction.java
@@ -24,13 +24,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableGlobalSqlAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableGlobalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableGlobalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateDescriptor.java
index 28b3aff..676eabb 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateDescriptor.java
@@ -55,7 +55,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableIntermediateAvgAggregateFunction(args, ctx);
+ return new SerializableIntermediateAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateFunction.java
index 3d56133..d25f603 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateAvgAggregateFunction.java
@@ -26,13 +26,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableIntermediateAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableIntermediateAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableIntermediateAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateDescriptor.java
index 43e63cd..86bb15d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateDescriptor.java
@@ -55,7 +55,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableIntermediateSqlAvgAggregateFunction(args, ctx);
+ return new SerializableIntermediateSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateFunction.java
index f8449a5..d3f9fea 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableIntermediateSqlAvgAggregateFunction.java
@@ -24,13 +24,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableIntermediateSqlAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableIntermediateSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableIntermediateSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
index 9c94ad2..39ae425 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableLocalAvgAggregateFunction(args, ctx);
+ return new SerializableLocalAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateFunction.java
index 0e7ba07..f93bbd7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateFunction.java
@@ -26,13 +26,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableLocalAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableLocalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableLocalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateDescriptor.java
index d0819e0..c96eb2e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableLocalSqlAvgAggregateFunction(args, ctx);
+ return new SerializableLocalSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateFunction.java
index 8925c31..c6195aa 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlAvgAggregateFunction.java
@@ -24,13 +24,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableLocalSqlAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableLocalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableLocalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlSumAggregateDescriptor.java
index 2cd75f1..3798b49 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSqlSumAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableSqlSumAggregateFunction(args, true, ctx);
+ return new SerializableSqlSumAggregateFunction(args, true, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java
index 3e0546c..54d24f7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableSumAggregateFunction(args, true, ctx);
+ return new SerializableSumAggregateFunction(args, true, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateDescriptor.java
index af057ee..f34827a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableSqlAvgAggregateFunction(args, ctx);
+ return new SerializableSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateFunction.java
index 3ef7aeb..608f2a0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlAvgAggregateFunction.java
@@ -23,13 +23,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SerializableSqlAvgAggregateFunction extends AbstractSerializableAvgAggregateFunction {
- public SerializableSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateDescriptor.java
index 3beb59f..b44c114 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateDescriptor.java
@@ -56,7 +56,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableSqlCountAggregateFunction(args, ctx);
+ return new SerializableSqlCountAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateFunction.java
index 257735f..241180c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlCountAggregateFunction.java
@@ -21,14 +21,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* count(NULL) returns NULL.
*/
public class SerializableSqlCountAggregateFunction extends AbstractSerializableCountAggregateFunction {
- public SerializableSqlCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SerializableSqlCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateDescriptor.java
index 4e8d515..d51a6fc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableSqlSumAggregateFunction(args, false, ctx);
+ return new SerializableSqlSumAggregateFunction(args, false, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateFunction.java
index c42c350..38033f0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSqlSumAggregateFunction.java
@@ -30,13 +30,14 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SerializableSqlSumAggregateFunction extends AbstractSerializableSumAggregateFunction {
private final boolean isLocalAgg;
public SerializableSqlSumAggregateFunction(IScalarEvaluatorFactory[] args, boolean isLocalAgg,
- IHyracksTaskContext context) throws HyracksDataException {
- super(args, context);
+ IHyracksTaskContext context, SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
this.isLocalAgg = isLocalAgg;
}
@@ -50,7 +51,8 @@
// but if all input value are system null, then we should return
// null in finish().
if (isLocalAgg) {
- throw new UnsupportedItemTypeException(BuiltinFunctions.SQL_SUM, ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SQL_SUM,
+ ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
index 8d2bb6c..43eea5b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public ISerializedAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SerializableSumAggregateFunction(args, false, ctx);
+ return new SerializableSumAggregateFunction(args, false, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java
index 60e34fa..278914f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java
@@ -31,13 +31,14 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SerializableSumAggregateFunction extends AbstractSerializableSumAggregateFunction {
private final boolean isLocalAgg;
public SerializableSumAggregateFunction(IScalarEvaluatorFactory[] args, boolean isLocalAgg,
- IHyracksTaskContext context) throws HyracksDataException {
- super(args, context);
+ IHyracksTaskContext context, SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
this.isLocalAgg = isLocalAgg;
}
@@ -58,7 +59,8 @@
// but if all input value are system null, then we should return
// null in finish().
if (isLocalAgg) {
- throw new UnsupportedItemTypeException(BuiltinFunctions.SUM, ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SUM,
+ ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAggregateFunction.java
similarity index 66%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAggregateFunction.java
index 0660f23..1ea28cc 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAggregateFunction.java
@@ -16,14 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.asterix.runtime.aggregates.std;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
+import org.apache.hyracks.api.exceptions.SourceLocation;
- public TranslationException(String msg) {
- super(msg);
+public abstract class AbstractAggregateFunction implements IAggregateEvaluator {
+ protected final SourceLocation sourceLoc;
+
+ public AbstractAggregateFunction(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java
index 37cf766..1dde27b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractAvgAggregateFunction.java
@@ -47,19 +47,19 @@
import org.apache.asterix.runtime.evaluators.common.ClosedRecordConstructorEvalFactory.ClosedRecordConstructorEval;
import org.apache.asterix.runtime.exceptions.IncompatibleTypeException;
import org.apache.asterix.runtime.exceptions.UnsupportedItemTypeException;
-import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-public abstract class AbstractAvgAggregateFunction implements IAggregateEvaluator {
+public abstract class AbstractAvgAggregateFunction extends AbstractAggregateFunction {
private static final int SUM_FIELD_ID = 0;
private static final int COUNT_FIELD_ID = 1;
@@ -93,8 +93,9 @@
private ISerializerDeserializer<ANull> nullSerde =
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ANULL);
- public AbstractAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public AbstractAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
recType = new ARecordType(null, new String[] { "sum", "count" },
new IAType[] { BuiltinType.ADOUBLE, BuiltinType.AINT64 }, false);
@@ -134,7 +135,7 @@
} else if (aggType == ATypeTag.SYSTEM_NULL) {
aggType = typeTag;
} else if (typeTag != ATypeTag.SYSTEM_NULL && !ATypeHierarchy.isCompatible(typeTag, aggType)) {
- throw new IncompatibleTypeException(BuiltinFunctions.AVG, data[offset], aggType.serialize());
+ throw new IncompatibleTypeException(sourceLoc, BuiltinFunctions.AVG, data[offset], aggType.serialize());
} else if (ATypeHierarchy.canPromote(aggType, typeTag)) {
aggType = typeTag;
}
@@ -171,7 +172,7 @@
break;
}
default: {
- throw new UnsupportedItemTypeException(BuiltinFunctions.AVG, data[offset]);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.AVG, data[offset]);
}
}
}
@@ -234,7 +235,7 @@
break;
}
default: {
- throw new UnsupportedItemTypeException("intermediate/global-Avg", serBytes[offset]);
+ throw new UnsupportedItemTypeException(sourceLoc, "intermediate/global-Avg", serBytes[offset]);
}
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractCountAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractCountAggregateFunction.java
index 6dc4759..d156574 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractCountAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractCountAggregateFunction.java
@@ -27,11 +27,11 @@
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -40,7 +40,7 @@
/**
* COUNT returns the number of items in the given list. Note that COUNT(NULL) is not allowed.
*/
-public abstract class AbstractCountAggregateFunction implements IAggregateEvaluator {
+public abstract class AbstractCountAggregateFunction extends AbstractAggregateFunction {
private AMutableInt64 result = new AMutableInt64(-1);
@SuppressWarnings("unchecked")
private ISerializerDeserializer<AInt64> int64Serde =
@@ -51,8 +51,9 @@
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
- public AbstractCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public AbstractCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractMinMaxAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractMinMaxAggregateFunction.java
index 0ba7c71..1aa609f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractMinMaxAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractMinMaxAggregateFunction.java
@@ -26,19 +26,19 @@
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
import org.apache.asterix.om.types.hierachy.ITypeConvertComputer;
-import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-public abstract class AbstractMinMaxAggregateFunction implements IAggregateEvaluator {
+public abstract class AbstractMinMaxAggregateFunction extends AbstractAggregateFunction {
private IPointable inputVal = new VoidPointable();
private ArrayBackedValueStorage outputVal = new ArrayBackedValueStorage();
private ArrayBackedValueStorage tempValForCasting = new ArrayBackedValueStorage();
@@ -50,8 +50,9 @@
private ITypeConvertComputer tpc;
private final boolean isMin;
- public AbstractMinMaxAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isMin)
- throws HyracksDataException {
+ public AbstractMinMaxAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isMin,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
this.isMin = isMin;
}
@@ -87,7 +88,7 @@
// Initialize min value.
outputVal.assign(inputVal);
} else if (typeTag != ATypeTag.SYSTEM_NULL && !ATypeHierarchy.isCompatible(typeTag, aggType)) {
- throw new IncompatibleTypeException("min/max", typeTag.serialize(), aggType.serialize());
+ throw new IncompatibleTypeException(sourceLoc, "min/max", typeTag.serialize(), aggType.serialize());
} else {
// If a system_null is encountered locally, it would be an error; otherwise if it is seen
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java
index fd841e0..a8fa552 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AbstractSumAggregateFunction.java
@@ -41,18 +41,18 @@
import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
import org.apache.asterix.runtime.exceptions.IncompatibleTypeException;
import org.apache.asterix.runtime.exceptions.UnsupportedItemTypeException;
-import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-public abstract class AbstractSumAggregateFunction implements IAggregateEvaluator {
+public abstract class AbstractSumAggregateFunction extends AbstractAggregateFunction {
protected ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
private IPointable inputVal = new VoidPointable();
private IScalarEvaluator eval;
@@ -67,8 +67,9 @@
@SuppressWarnings("rawtypes")
protected ISerializerDeserializer serde;
- public AbstractSumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
+ public AbstractSumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(sourceLoc);
eval = args[0].createScalarEvaluator(context);
}
@@ -94,7 +95,8 @@
} else if (aggType == ATypeTag.SYSTEM_NULL) {
aggType = typeTag;
} else if (typeTag != ATypeTag.SYSTEM_NULL && !ATypeHierarchy.isCompatible(typeTag, aggType)) {
- throw new IncompatibleTypeException(BuiltinFunctions.SUM, typeTag.serialize(), aggType.serialize());
+ throw new IncompatibleTypeException(sourceLoc, BuiltinFunctions.SUM, typeTag.serialize(),
+ aggType.serialize());
}
if (ATypeHierarchy.canPromote(aggType, typeTag)) {
@@ -137,7 +139,7 @@
break;
}
default: {
- throw new UnsupportedItemTypeException(BuiltinFunctions.SUM, aggType.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SUM, aggType.serialize());
}
}
}
@@ -194,7 +196,7 @@
break;
}
default:
- throw new UnsupportedItemTypeException(BuiltinFunctions.SUM, aggType.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SUM, aggType.serialize());
}
} catch (IOException e) {
throw HyracksDataException.create(e);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
index 93023e8..46fe3e4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new AvgAggregateFunction(args, ctx);
+ return new AvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateFunction.java
index 6408e56..3572c4f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/AvgAggregateFunction.java
@@ -23,14 +23,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class AvgAggregateFunction extends AbstractAvgAggregateFunction {
- public AvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
+ public AvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, SourceLocation sourceLoc)
throws HyracksDataException {
- super(args, context);
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateDescriptor.java
index f981ece..9f64f19 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new CountAggregateFunction(args, ctx);
+ return new CountAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateFunction.java
index 94b653d..829e8ca 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/CountAggregateFunction.java
@@ -21,15 +21,16 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* COUNT returns the number of items in the given list. Note that COUNT(NULL) is not allowed.
*/
public class CountAggregateFunction extends AbstractCountAggregateFunction {
- public CountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
+ public CountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, SourceLocation sourceLoc)
throws HyracksDataException {
- super(args, context);
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
index 199e5e5..a624d97 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new GlobalAvgAggregateFunction(args, ctx);
+ return new GlobalAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateFunction.java
index 30a2746..425d928 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalAvgAggregateFunction.java
@@ -23,14 +23,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class GlobalAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public GlobalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public GlobalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateDescriptor.java
index 90124d1..4e3e8fc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new GlobalSqlAvgAggregateFunction(args, ctx);
+ return new GlobalSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateFunction.java
index 893613b..fb59615 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/GlobalSqlAvgAggregateFunction.java
@@ -22,14 +22,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class GlobalSqlAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public GlobalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public GlobalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateDescriptor.java
index 9faccd8..391a5cc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new IntermediateAvgAggregateFunction(args, ctx);
+ return new IntermediateAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateFunction.java
index ad64ef3..c182fcd 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateAvgAggregateFunction.java
@@ -23,14 +23,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class IntermediateAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public IntermediateAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public IntermediateAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateDescriptor.java
index 144614a..25ca512 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new IntermediateSqlAvgAggregateFunction(args, ctx);
+ return new IntermediateSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateFunction.java
index bc260e6..eee736d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/IntermediateSqlAvgAggregateFunction.java
@@ -22,14 +22,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class IntermediateSqlAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public IntermediateSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public IntermediateSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
index 2598da1..2e23c03 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new LocalAvgAggregateFunction(args, ctx);
+ return new LocalAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateFunction.java
index 685af83..0eab063 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalAvgAggregateFunction.java
@@ -23,14 +23,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class LocalAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public LocalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public LocalAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java
index b2fc3b2..ea9b2ae 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new MinMaxAggregateFunction(args, ctx, false, true);
+ return new MinMaxAggregateFunction(args, ctx, false, true, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java
index c29149d..d4355df 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new MinMaxAggregateFunction(args, ctx, true, true);
+ return new MinMaxAggregateFunction(args, ctx, true, true, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateDescriptor.java
index dc8fbc5..777d50f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new LocalSqlAvgAggregateFunction(args, ctx);
+ return new LocalSqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateFunction.java
index 8c80c42..66a75e0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlAvgAggregateFunction.java
@@ -22,14 +22,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class LocalSqlAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public LocalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public LocalSqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMaxAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMaxAggregateDescriptor.java
index ab999d0..57da62b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMaxAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMaxAggregateDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlMinMaxAggregateFunction(args, ctx, false, true);
+ return new SqlMinMaxAggregateFunction(args, ctx, false, true, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMinAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMinAggregateDescriptor.java
index ee45d48..ca2f65d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMinAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlMinAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlMinMaxAggregateFunction(args, ctx, true, true);
+ return new SqlMinMaxAggregateFunction(args, ctx, true, true, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlSumAggregateDescriptor.java
index aac1927..f626d8d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSqlSumAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlSumAggregateFunction(args, ctx, true);
+ return new SqlSumAggregateFunction(args, ctx, true, sourceLoc);
};
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java
index dd6c974..0413db4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SumAggregateFunction(args, ctx, true);
+ return new SumAggregateFunction(args, ctx, true, sourceLoc);
};
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
index 3afa4fb..2575440 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new MinMaxAggregateFunction(args, ctx, false, false);
+ return new MinMaxAggregateFunction(args, ctx, false, false, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
index 4328618..dfff5f7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new MinMaxAggregateFunction(args, ctx, true, false);
+ return new MinMaxAggregateFunction(args, ctx, true, false, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java
index 5d28018..3aeb58a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java
@@ -25,13 +25,14 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class MinMaxAggregateFunction extends AbstractMinMaxAggregateFunction {
private final boolean isLocalAgg;
public MinMaxAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isMin,
- boolean isLocalAgg) throws HyracksDataException {
- super(args, context, isMin);
+ boolean isLocalAgg, SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, isMin, sourceLoc);
this.isLocalAgg = isLocalAgg;
}
@@ -48,7 +49,7 @@
@Override
protected void processSystemNull() throws HyracksDataException {
if (isLocalAgg) {
- throw new UnsupportedItemTypeException("min/max", ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, "min/max", ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateDescriptor.java
index 0cc1b90..5f9cc46 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlAvgAggregateFunction(args, ctx);
+ return new SqlAvgAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateFunction.java
index e6c1233..8e8f60c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlAvgAggregateFunction.java
@@ -22,14 +22,15 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class SqlAvgAggregateFunction extends AbstractAvgAggregateFunction {
- public SqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SqlAvgAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateDescriptor.java
index a825df4..91d31c3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateDescriptor.java
@@ -55,7 +55,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new SqlCountAggregateFunction(args, ctx);
+ return new SqlCountAggregateFunction(args, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateFunction.java
index 7396d39..68cb37b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlCountAggregateFunction.java
@@ -21,15 +21,16 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* COUNT returns the number of non-null items in the given list. Note that COUNT(NULL) is not allowed.
*/
public class SqlCountAggregateFunction extends AbstractCountAggregateFunction {
- public SqlCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
- throws HyracksDataException {
- super(args, context);
+ public SqlCountAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMaxAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMaxAggregateDescriptor.java
index d670a66..d5b86f9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMaxAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMaxAggregateDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlMinMaxAggregateFunction(args, ctx, false, false);
+ return new SqlMinMaxAggregateFunction(args, ctx, false, false, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinAggregateDescriptor.java
index 648dd2d..3abaa2c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinAggregateDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlMinMaxAggregateFunction(args, ctx, true, false);
+ return new SqlMinMaxAggregateFunction(args, ctx, true, false, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinMaxAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinMaxAggregateFunction.java
index 2ad0e55..f6415d6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinMaxAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlMinMaxAggregateFunction.java
@@ -25,13 +25,14 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SqlMinMaxAggregateFunction extends AbstractMinMaxAggregateFunction {
private final boolean isLocalAgg;
public SqlMinMaxAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isMin,
- boolean isLocalAgg) throws HyracksDataException {
- super(args, context, isMin);
+ boolean isLocalAgg, SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, isMin, sourceLoc);
this.isLocalAgg = isLocalAgg;
}
@@ -42,7 +43,7 @@
@Override
protected void processSystemNull() throws HyracksDataException {
if (isLocalAgg) {
- throw new UnsupportedItemTypeException("min/max", ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, "min/max", ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateDescriptor.java
index e3b0187..a0d7708 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SqlSumAggregateFunction(args, ctx, false);
+ return new SqlSumAggregateFunction(args, ctx, false, sourceLoc);
};
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java
index 663ed69..8b4bf7c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java
@@ -29,13 +29,14 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SqlSumAggregateFunction extends AbstractSumAggregateFunction {
private final boolean isLocalAgg;
- public SqlSumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isLocalAgg)
- throws HyracksDataException {
- super(args, context);
+ public SqlSumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isLocalAgg,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
this.isLocalAgg = isLocalAgg;
}
@@ -49,7 +50,8 @@
// but if all input value are system null, then we should return
// null in finish().
if (isLocalAgg) {
- throw new UnsupportedItemTypeException(BuiltinFunctions.SQL_SUM, ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SQL_SUM,
+ ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
index 34014a1..57175b9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new SumAggregateFunction(args, ctx, false);
+ return new SumAggregateFunction(args, ctx, false, sourceLoc);
};
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java
index 2b3beef..abcac77 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java
@@ -29,13 +29,14 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class SumAggregateFunction extends AbstractSumAggregateFunction {
private final boolean isLocalAgg;
- public SumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isLocalAgg)
- throws HyracksDataException {
- super(args, context);
+ public SumAggregateFunction(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, boolean isLocalAgg,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(args, context, sourceLoc);
this.isLocalAgg = isLocalAgg;
}
@@ -55,7 +56,8 @@
// but if all input value are system null, then we should return
// null in finish().
if (isLocalAgg) {
- throw new UnsupportedItemTypeException(BuiltinFunctions.SUM, ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.SUM,
+ ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java
index dc2b355..fd7ccea 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.aggregates.base.AbstractAggregateFunctionDynamicDescriptor;
+import org.apache.asterix.runtime.aggregates.std.AbstractAggregateFunction;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
@@ -58,7 +59,7 @@
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new IAggregateEvaluator() {
+ return new AbstractAggregateFunction(sourceLoc) {
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
@SuppressWarnings("rawtypes")
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java
index e9330d3..def848d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.aggregates.base.AbstractAggregateFunctionDynamicDescriptor;
+import org.apache.asterix.runtime.aggregates.std.AbstractAggregateFunction;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
@@ -56,7 +57,7 @@
public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx)
throws HyracksDataException {
- return new IAggregateEvaluator() {
+ return new AbstractAggregateFunction(sourceLoc) {
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
@SuppressWarnings("rawtypes")
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java
index 98943a4..23581e9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java
@@ -93,7 +93,7 @@
aPoint.setValue(cX, cY);
pointSerde.serialize(aPoint, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java
index e7a3f02..222ae76 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java
@@ -88,7 +88,7 @@
aDouble.setValue(radius);
doubleSerde.serialize(aDouble, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java
index d3069ee..60ee118 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java
@@ -137,7 +137,7 @@
startOffset + APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints < 3) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
listBuilder.reset(pointListType);
@@ -153,7 +153,7 @@
}
listBuilder.write(out, true);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_LINE_TYPE_TAG, ATypeTag.SERIALIZED_RECTANGLE_TYPE_TAG,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java
index ad9dcda..487a632 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java
@@ -88,7 +88,7 @@
aDouble.setValue(x);
doubleSerde.serialize(aDouble, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java
index 6b96ddd..9409837 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java
@@ -92,7 +92,7 @@
aDouble.setValue(y);
doubleSerde.serialize(aDouble, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
index e9d7339..50f8f68 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
@@ -113,7 +113,7 @@
} else if (bytes[startOffset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, startOffset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
index d18864b..aa684bb 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
@@ -114,7 +114,7 @@
} else if (bytes[startOffset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, startOffset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_TIME_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
index c5ce56b..98d6a9d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
@@ -109,11 +109,11 @@
aDateTime.setValue(endTime);
datetimeSerde.serialize(aDateTime, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
index 777eb76..909b657 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDateAccessor.java
@@ -91,11 +91,11 @@
aDate.setValue((int) (endTime));
dateSerde.serialize(aDate, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
index 34161da..a62a8a8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndDatetimeAccessor.java
@@ -93,11 +93,11 @@
aDateTime.setValue(endTime);
datetimeSerde.serialize(aDateTime, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
index 10a3612..4d545e8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalEndTimeAccessor.java
@@ -90,11 +90,11 @@
aTime.setValue((int) (endTime));
timeSerde.serialize(aTime, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
index e858c68..b209139 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
@@ -110,11 +110,11 @@
aDateTime.setValue(startTime);
datetimeSerde.serialize(aDateTime, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
index 84ed55f..901d685 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDateAccessor.java
@@ -94,11 +94,11 @@
aDate.setValue((int) (startTime));
dateSerde.serialize(aDate, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
index d847b52..63cd481 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartDatetimeAccessor.java
@@ -91,11 +91,11 @@
aDateTime.setValue(startTime);
datetimeSerde.serialize(aDateTime, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
index e59a3d2..9a1b86f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalIntervalStartTimeAccessor.java
@@ -92,11 +92,11 @@
aTime.setValue((int) (startTime));
timeSerde.serialize(aTime, out);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
} catch (IOException e) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
index fcfbed3..a5101b5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
@@ -112,7 +112,7 @@
} else if (bytes[startOffset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, startOffset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_TIME_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
index 2a84320..6b9e573 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
@@ -115,7 +115,7 @@
} else if (bytes[startOffset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, startOffset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_TIME_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
index 4709171..3b93969 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
@@ -113,7 +113,7 @@
} else if (bytes[startOffset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, startOffset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
index fe2bb39..e757e12 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
@@ -113,7 +113,7 @@
} else if (bytes[startOffset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, startOffset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_TIME_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
index 21dcc67..6327a36 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
@@ -132,7 +132,7 @@
result.set(resultStorage);
return;
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG,
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
index b8c5f19..4a29e01 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
@@ -25,6 +25,7 @@
import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.TaggedValuePointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -43,11 +44,15 @@
protected final IPointable outRight = VoidPointable.FACTORY.createPointable();
protected final IScalarEvaluator evalLeft;
protected final IScalarEvaluator evalRight;
- private final ComparisonHelper ch = new ComparisonHelper();
+ protected final SourceLocation sourceLoc;
+ private final ComparisonHelper ch;
- public AbstractComparisonEvaluator(IScalarEvaluator evalLeft, IScalarEvaluator evalRight) {
+ public AbstractComparisonEvaluator(IScalarEvaluator evalLeft, IScalarEvaluator evalRight,
+ SourceLocation sourceLoc) {
this.evalLeft = evalLeft;
this.evalRight = evalRight;
+ this.sourceLoc = sourceLoc;
+ ch = new ComparisonHelper(sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
index c267bab..e157c0a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractIfEqualsEvaluator.java
@@ -21,12 +21,13 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
public abstract class AbstractIfEqualsEvaluator extends AbstractComparisonEvaluator {
- AbstractIfEqualsEvaluator(IScalarEvaluator evalLeft, IScalarEvaluator evalRight) {
- super(evalLeft, evalRight);
+ AbstractIfEqualsEvaluator(IScalarEvaluator evalLeft, IScalarEvaluator evalRight, SourceLocation sourceLoc) {
+ super(evalLeft, evalRight, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
index 446fed7..14b35f0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractValueComparisonEvaluator.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
public abstract class AbstractValueComparisonEvaluator extends AbstractComparisonEvaluator {
@@ -39,8 +40,9 @@
protected ISerializerDeserializer<ANull> nullSerde =
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ANULL);
- public AbstractValueComparisonEvaluator(IScalarEvaluator evalLeft, IScalarEvaluator evalRight) {
- super(evalLeft, evalRight);
+ public AbstractValueComparisonEvaluator(IScalarEvaluator evalLeft, IScalarEvaluator evalRight,
+ SourceLocation sourceLoc) {
+ super(evalLeft, evalRight, sourceLoc);
}
@Override
@@ -84,7 +86,7 @@
case POLYGON:
case CIRCLE:
case RECTANGLE:
- throw new UnsupportedTypeException(ComparisonHelper.COMPARISON, argLeft.getTag());
+ throw new UnsupportedTypeException(sourceLoc, ComparisonHelper.COMPARISON, argLeft.getTag());
default:
return;
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java
index 163bd9f..a0b5677 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/ComparisonHelper.java
@@ -41,6 +41,7 @@
import org.apache.asterix.runtime.exceptions.UnsupportedTypeException;
import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
@@ -74,6 +75,12 @@
private final IBinaryComparator byteArrayComparator =
new PointableBinaryComparatorFactory(ByteArrayPointable.FACTORY).createBinaryComparator();
+ private final SourceLocation sourceLoc;
+
+ public ComparisonHelper(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
+
public int compare(ATypeTag typeTag1, ATypeTag typeTag2, IPointable arg1, IPointable arg2)
throws HyracksDataException {
switch (typeTag1) {
@@ -101,7 +108,8 @@
private int compareStrongTypedWithArg(ATypeTag expectedTypeTag, ATypeTag actualTypeTag, IPointable arg1,
IPointable arg2) throws HyracksDataException {
if (expectedTypeTag != actualTypeTag) {
- throw new IncompatibleTypeException(COMPARISON, actualTypeTag.serialize(), expectedTypeTag.serialize());
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, actualTypeTag.serialize(),
+ expectedTypeTag.serialize());
}
int result;
byte[] leftBytes = arg1.getByteArray();
@@ -160,7 +168,7 @@
rightLen);
break;
default:
- throw new UnsupportedTypeException(COMPARISON, actualTypeTag.serialize());
+ throw new UnsupportedTypeException(sourceLoc, COMPARISON, actualTypeTag.serialize());
}
return result;
}
@@ -171,7 +179,8 @@
byte b1 = arg2.getByteArray()[arg2.getStartOffset()];
return compareByte(b0, b1);
}
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG, typeTag2.serialize());
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG,
+ typeTag2.serialize());
}
private int compareStringWithArg(ATypeTag typeTag2, IPointable arg1, IPointable arg2) throws HyracksDataException {
@@ -179,7 +188,8 @@
return strBinaryComp.compare(arg1.getByteArray(), arg1.getStartOffset(), arg1.getLength() - 1,
arg2.getByteArray(), arg2.getStartOffset(), arg2.getLength() - 1);
}
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_STRING_TYPE_TAG, typeTag2.serialize());
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_STRING_TYPE_TAG,
+ typeTag2.serialize());
}
private int compareDoubleWithArg(ATypeTag typeTag2, IPointable arg1, IPointable arg2) throws HyracksDataException {
@@ -203,7 +213,7 @@
case DOUBLE:
return compareDouble(s, ADoubleSerializerDeserializer.getDouble(rightBytes, rightOffset));
default: {
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG,
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG,
typeTag2.serialize());
}
}
@@ -230,7 +240,7 @@
case DOUBLE:
return compareDouble(s, ADoubleSerializerDeserializer.getDouble(rightBytes, rightOffset));
default:
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_FLOAT_TYPE_TAG,
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_FLOAT_TYPE_TAG,
typeTag2.serialize());
}
}
@@ -256,7 +266,7 @@
case DOUBLE:
return compareDouble(s, ADoubleSerializerDeserializer.getDouble(rightBytes, rightOffset));
default:
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
typeTag2.serialize());
}
}
@@ -294,7 +304,7 @@
return compareDouble(s, v2);
}
default:
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_INT32_TYPE_TAG,
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_INT32_TYPE_TAG,
typeTag2.serialize());
}
}
@@ -332,7 +342,7 @@
return compareDouble(s, v2);
}
default: {
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
typeTag2.serialize());
}
}
@@ -359,7 +369,7 @@
case DOUBLE:
return compareDouble(s, ADoubleSerializerDeserializer.getDouble(rightBytes, rightStart));
default:
- throw new IncompatibleTypeException(COMPARISON, ATypeTag.SERIALIZED_INT8_TYPE_TAG,
+ throw new IncompatibleTypeException(sourceLoc, COMPARISON, ATypeTag.SERIALIZED_INT8_TYPE_TAG,
typeTag2.serialize());
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/EqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/EqualsDescriptor.java
index c4fafa1..80d186d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/EqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/EqualsDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractValueComparisonEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected boolean getComparisonResult(int r) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanDescriptor.java
index 6a41104..d1fac52 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractValueComparisonEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected boolean getComparisonResult(int r) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanOrEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanOrEqualsDescriptor.java
index c468aac..6ff0d68 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanOrEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/GreaterThanOrEqualsDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractValueComparisonEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected boolean getComparisonResult(int r) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanDescriptor.java
index 4eac444..77280e5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractValueComparisonEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected boolean getComparisonResult(int r) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanOrEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanOrEqualsDescriptor.java
index ad365d6..58ac40e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanOrEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/LessThanOrEqualsDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractValueComparisonEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected boolean getComparisonResult(int r) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/MissingIfEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/MissingIfEqualsDescriptor.java
index 5b4f5e6..62d9957 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/MissingIfEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/MissingIfEqualsDescriptor.java
@@ -55,7 +55,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractIfEqualsEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@SuppressWarnings("unchecked")
final ISerializerDeserializer<AMissing> missingSerde =
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NanIfEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NanIfEqualsDescriptor.java
index 7c6b5b2..bacf9e4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NanIfEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NanIfEqualsDescriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractIfEqualsEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
final AMutableDouble equalsResult = new AMutableDouble(Double.NaN);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NegInfIfEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NegInfIfEqualsDescriptor.java
index 1c40357..b161ce0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NegInfIfEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NegInfIfEqualsDescriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractIfEqualsEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
final AMutableDouble equalsResult = new AMutableDouble(Double.NEGATIVE_INFINITY);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NotEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NotEqualsDescriptor.java
index 17515af..b997a80 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NotEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NotEqualsDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractValueComparisonEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected boolean getComparisonResult(int r) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NullIfEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NullIfEqualsDescriptor.java
index c09a75c..40f262a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NullIfEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/NullIfEqualsDescriptor.java
@@ -55,7 +55,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractIfEqualsEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
@SuppressWarnings("unchecked")
final ISerializerDeserializer<ANull> nullSerde =
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/PosInfIfEqualsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/PosInfIfEqualsDescriptor.java
index 6a969b2..b02c3e5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/PosInfIfEqualsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/PosInfIfEqualsDescriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractIfEqualsEvaluator(args[0].createScalarEvaluator(ctx),
- args[1].createScalarEvaluator(ctx)) {
+ args[1].createScalarEvaluator(ctx), sourceLoc) {
final AMutableDouble equalsResult = new AMutableDouble(Double.POSITIVE_INFINITY);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryBase64StringConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryBase64StringConstructorDescriptor.java
index e5e19ca..4337f28 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryBase64StringConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryBase64StringConstructorDescriptor.java
@@ -46,7 +46,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new ABinaryHexStringConstructorDescriptor.ABinaryConstructorEvaluator(args[0],
- ByteArrayBase64ParserFactory.INSTANCE, ctx);
+ ByteArrayBase64ParserFactory.INSTANCE, ctx, sourceLoc);
}
};
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryHexStringConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryHexStringConstructorDescriptor.java
index 720e9bc..9f9a5f1 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryHexStringConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABinaryHexStringConstructorDescriptor.java
@@ -34,6 +34,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -59,7 +60,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new ABinaryConstructorEvaluator(args[0], ByteArrayHexParserFactory.INSTANCE, ctx);
+ return new ABinaryConstructorEvaluator(args[0], ByteArrayHexParserFactory.INSTANCE, ctx, sourceLoc);
}
};
}
@@ -70,6 +71,7 @@
}
static class ABinaryConstructorEvaluator implements IScalarEvaluator {
+ private final SourceLocation sourceLoc;
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
private final DataOutput out = resultStorage.getDataOutput();
private final IPointable inputArg = new VoidPointable();
@@ -78,7 +80,9 @@
private UTF8StringPointable utf8Ptr = new UTF8StringPointable();
public ABinaryConstructorEvaluator(IScalarEvaluatorFactory copyEvaluatorFactory,
- IValueParserFactory valueParserFactory, IHyracksTaskContext context) throws HyracksDataException {
+ IValueParserFactory valueParserFactory, IHyracksTaskContext context, SourceLocation sourceLoc)
+ throws HyracksDataException {
+ this.sourceLoc = sourceLoc;
eval = copyEvaluatorFactory.createScalarEvaluator(context);
byteArrayParser = valueParserFactory.createValueParser();
}
@@ -102,11 +106,11 @@
byteArrayParser.parse(buffer, 0, buffer.length, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(BuiltinFunctions.BINARY_HEX_CONSTRUCTOR, 0, tt,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.BINARY_HEX_CONSTRUCTOR, 0, tt,
ATypeTag.SERIALIZED_BINARY_TYPE_TAG, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(BuiltinFunctions.BINARY_HEX_CONSTRUCTOR, e,
+ throw new InvalidDataFormatException(sourceLoc, BuiltinFunctions.BINARY_HEX_CONSTRUCTOR, e,
ATypeTag.SERIALIZED_BINARY_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
index 2f981b9..7ddb7e4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
@@ -44,7 +44,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBooleanConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractBooleanConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected FunctionIdentifier getIdentifier() {
return ABooleanConstructorDescriptor.this.getIdentifier();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
index 5b0d250..0649fc8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
@@ -98,11 +98,11 @@
circleSerde.serialize(aCircle, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
index eb9b40f..9849cef 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
@@ -93,7 +93,7 @@
// the string to be parsed should be at least 8 characters: YYYYMMDD
if (stringLength < 8) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
@@ -117,11 +117,12 @@
dateSerde.serialize(aDate, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_DATE_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
}
};
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
index f202dbe..9b71d4b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
@@ -91,7 +91,7 @@
int startOffset = utf8Ptr.getCharStartOffset();
// the string to be parsed should be at least 14 characters: YYYYMMDDhhmmss
if (stringLength < 14) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
// +1 if it is negative (-)
@@ -102,7 +102,7 @@
if (serString[startOffset + timeOffset] != 'T') {
timeOffset += 2;
if (serString[startOffset + timeOffset] != 'T') {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
}
@@ -117,11 +117,11 @@
datetimeSerde.serialize(aDateTime, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
index 0e7cc34..f6c6f09 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
@@ -99,11 +99,11 @@
dayTimeDurationSerde.serialize(aDayTimeDuration, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (Exception e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
index 87df400..f9991db 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
@@ -44,7 +44,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractDoubleConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractDoubleConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected FunctionIdentifier getIdentifier() {
return ADoubleConstructorDescriptor.this.getIdentifier();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
index df39306..f3d1ba8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
@@ -93,11 +93,11 @@
durationSerde.serialize(aDuration, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
index b6f045e..09f2594 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
@@ -100,11 +100,11 @@
floatSerde.serialize(aFloat, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
index 9413cb4..ae91c46 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
@@ -112,17 +112,17 @@
&& serString[offset + 2] == '6' && offset + 3 == end) {
break;
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT16_TYPE_TAG);
}
if (value < limit + digit) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT16_TYPE_TAG);
}
value = (short) (value - digit);
}
if (value > 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT16_TYPE_TAG);
}
if (value < 0 && positive) {
@@ -133,11 +133,11 @@
int16Serde.serialize(aInt16, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INT16_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
index 985d966..b4f1ae8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
@@ -111,17 +111,17 @@
&& serString[offset + 2] == '2' && offset + 3 == end) {
break;
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
if (value < limit + digit) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
value -= digit;
}
if (value > 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
if (value < 0 && positive) {
@@ -132,11 +132,11 @@
int32Serde.serialize(aInt32, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
index 61a35b6..a41ec77 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
@@ -44,7 +44,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractInt64ConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractInt64ConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
public FunctionIdentifier getIdentifier() {
return AInt64ConstructorDescriptor.this.getIdentifier();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
index e4a9d32..3132640 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
@@ -112,17 +112,17 @@
&& offset + 2 == end) {
break;
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT8_TYPE_TAG);
}
if (value < limit + digit) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT8_TYPE_TAG);
}
value = (byte) (value - digit);
}
if (value > 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INT8_TYPE_TAG);
}
if (value < 0 && positive) {
@@ -133,11 +133,11 @@
int8Serde.serialize(aInt8, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e1) {
- throw new InvalidDataFormatException(getIdentifier(), e1,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e1,
ATypeTag.SERIALIZED_INT8_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
index 9309591..f103192 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
@@ -90,7 +90,8 @@
try {
if (bytes0[offset0] != bytes1[offset1]) {
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0], bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), bytes0[offset0],
+ bytes1[offset1]);
}
long intervalStart, intervalEnd;
@@ -110,18 +111,18 @@
intervalEnd = ADateTimeSerializerDeserializer.getChronon(bytes1, offset1 + 1);
break;
default:
- throw new UnsupportedItemTypeException(getIdentifier(), bytes0[offset0]);
+ throw new UnsupportedItemTypeException(sourceLoc, getIdentifier(), bytes0[offset0]);
}
if (intervalEnd < intervalStart) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
aInterval.setValue(intervalStart, intervalEnd, intervalType.serialize());
intervalSerde.serialize(aInterval, out);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
index e2a3614..b1a6d0e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
@@ -114,7 +114,7 @@
int startOffset = utf8Ptr.getCharStartOffset();
intervalStart = ADateParserFactory.parseDatePart(bytes0, startOffset, stringLength);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -139,7 +139,7 @@
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
aDuration.getMonths(), aDuration.getMilliseconds(), false);
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -147,14 +147,14 @@
intervalEnd = cal.getChrononInDays(intervalEnd);
if (intervalEnd < intervalStart) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
aInterval.setValue(intervalStart, intervalEnd, ATypeTag.SERIALIZED_DATE_TYPE_TAG);
intervalSerde.serialize(aInterval, out);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
index 3e61405..8d15bff 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
@@ -116,7 +116,7 @@
if (bytes0[startOffset + timeOffset] != 'T') {
timeOffset += 2;
if (argPtr0.getByteArray()[startOffset + timeOffset] != 'T') {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
}
@@ -125,7 +125,7 @@
intervalStart += ATimeParserFactory.parseTimePart(bytes0, startOffset + timeOffset + 1,
stringLength - timeOffset - 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -149,19 +149,19 @@
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
aDuration.getMonths(), aDuration.getMilliseconds(), false);
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (intervalEnd < intervalStart) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
aInterval.setValue(intervalStart, intervalEnd, ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
intervalSerde.serialize(aInterval, out);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
index fa402bd..e74e77a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
@@ -111,7 +111,7 @@
intervalStart = ATimeParserFactory.parseTimePart(bytes0, utf8Ptr.getCharStartOffset(),
stringLength);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_TIME_TYPE_TAG, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -121,7 +121,7 @@
if (bytes1[offset1] == ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
if (ADurationSerializerDeserializer.getYearMonth(bytes1, offset1 + 1) != 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
@@ -137,14 +137,14 @@
ADurationParserFactory.parseDuration(bytes1, utf8Ptr.getCharStartOffset(), stringLength,
aDuration, ADurationParseOption.All);
if (aDuration.getMonths() != 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart, 0,
aDuration.getMilliseconds(), false);
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
@@ -155,14 +155,14 @@
}
if (intervalEnd < intervalStart) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
aInterval.setValue(intervalStart, intervalEnd, ATypeTag.SERIALIZED_TIME_TYPE_TAG);
intervalSerde.serialize(aInterval, out);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
index 0ef585c..39bb515 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
@@ -101,11 +101,11 @@
lineSerde.serialize(aLine, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
index 3415f38..4b8b0bf 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
@@ -96,11 +96,11 @@
point3DSerde.serialize(aPoint3D, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_POINT3D_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
index 24045b9..0a7c381 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
@@ -92,11 +92,11 @@
pointSerde.serialize(aPoint, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
index eb139b0..f88713c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
@@ -86,7 +86,7 @@
String s = utf8Ptr.toString();
String[] points = WS.split(s.trim());
if (points.length <= 2) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
out.writeByte(ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
@@ -98,11 +98,11 @@
}
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
index ccaf7b8..69cd147 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
@@ -101,17 +101,17 @@
} else if (aPoint[0].getX() < aPoint[1].getX() && aPoint[0].getY() < aPoint[1].getY()) {
aRectangle.setValue(aPoint[0], aPoint[1]);
} else {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_RECTANGLE_TYPE_TAG);
}
rectangle2DSerde.serialize(aRectangle, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_RECTANGLE_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
index 00b5475..8f0182c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
@@ -45,7 +45,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractStringConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractStringConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected FunctionIdentifier getIdentifier() {
return AStringConstructorDescriptor.this.getIdentifier();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
index c338a35..38d8e05 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
@@ -93,7 +93,7 @@
// the string to be parsed should be at least 6 characters: hhmmss
if (stringLength < 6) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
@@ -108,11 +108,11 @@
timeSerde.serialize(aTime, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
index 64b9278..53c36bc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
@@ -99,11 +99,12 @@
uuidSerde.serialize(uuid, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_UUID_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
+ ATypeTag.SERIALIZED_UUID_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
index b95d512..60344fc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
@@ -96,11 +96,11 @@
yearMonthDurationSerde.serialize(aYearMonthDuration, out);
result.set(resultStorage);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt,
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e,
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e,
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractBooleanConstructorEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractBooleanConstructorEvaluator.java
index 9b9bf71..b78eb54 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractBooleanConstructorEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractBooleanConstructorEvaluator.java
@@ -34,6 +34,7 @@
import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -52,12 +53,14 @@
protected static final byte[] FALSE = UTF8StringUtil.writeStringToBytes("false");
protected final IScalarEvaluator inputEval;
+ protected final SourceLocation sourceLoc;
protected final IPointable inputArg;
protected final ArrayBackedValueStorage resultStorage;
protected final DataOutput out;
- protected AbstractBooleanConstructorEvaluator(IScalarEvaluator inputEval) {
+ protected AbstractBooleanConstructorEvaluator(IScalarEvaluator inputEval, SourceLocation sourceLoc) {
this.inputEval = inputEval;
+ this.sourceLoc = sourceLoc;
inputArg = new VoidPointable();
resultStorage = new ArrayBackedValueStorage();
out = resultStorage.getDataOutput();
@@ -70,7 +73,7 @@
resultStorage.reset();
evaluateImpl(result);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e, ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
}
}
@@ -87,10 +90,10 @@
} else if (UTF8_BINARY_CMP.compare(bytes, startOffset + 1, len - 1, FALSE, 0, FALSE.length) == 0) {
setBoolean(result, false);
} else {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDoubleConstructorEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDoubleConstructorEvaluator.java
index 456735f..5354fc0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDoubleConstructorEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractDoubleConstructorEvaluator.java
@@ -34,6 +34,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -46,14 +47,16 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ADOUBLE);
protected final IScalarEvaluator inputEval;
+ protected final SourceLocation sourceLoc;
protected final ArrayBackedValueStorage resultStorage;
protected final DataOutput out;
protected final IPointable inputArg;
protected final AMutableDouble aDouble;
protected final UTF8StringPointable utf8Ptr;
- protected AbstractDoubleConstructorEvaluator(IScalarEvaluator inputEval) {
+ protected AbstractDoubleConstructorEvaluator(IScalarEvaluator inputEval, SourceLocation sourceLoc) {
this.inputEval = inputEval;
+ this.sourceLoc = sourceLoc;
resultStorage = new ArrayBackedValueStorage();
out = resultStorage.getDataOutput();
inputArg = new VoidPointable();
@@ -68,7 +71,7 @@
resultStorage.reset();
evaluateImpl(result);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
}
@@ -87,12 +90,12 @@
handleUparseableString(result);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
}
protected void handleUparseableString(IPointable result) throws HyracksDataException {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
protected abstract FunctionIdentifier getIdentifier();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractInt64ConstructorEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractInt64ConstructorEvaluator.java
index 2f9470d..a49c1ee 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractInt64ConstructorEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractInt64ConstructorEvaluator.java
@@ -34,6 +34,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -46,14 +47,16 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT64);
protected final IScalarEvaluator inputEval;
+ protected final SourceLocation sourceLoc;
protected final IPointable inputArg;
protected final ArrayBackedValueStorage resultStorage;
protected final DataOutput out;
protected final AMutableInt64 aInt64;
protected final UTF8StringPointable utf8Ptr;
- protected AbstractInt64ConstructorEvaluator(IScalarEvaluator inputEval) {
+ protected AbstractInt64ConstructorEvaluator(IScalarEvaluator inputEval, SourceLocation sourceLoc) {
this.inputEval = inputEval;
+ this.sourceLoc = sourceLoc;
inputArg = new VoidPointable();
resultStorage = new ArrayBackedValueStorage();
out = resultStorage.getDataOutput();
@@ -68,7 +71,7 @@
resultStorage.reset();
evaluateImpl(result);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
}
@@ -88,12 +91,12 @@
handleUnparseableString(result);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
}
protected void handleUnparseableString(IPointable result) throws HyracksDataException {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_INT64_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
protected abstract FunctionIdentifier getIdentifier();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractStringConstructorEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractStringConstructorEvaluator.java
index 52d3bf6..9f2dc2d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractStringConstructorEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AbstractStringConstructorEvaluator.java
@@ -36,6 +36,7 @@
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -46,17 +47,19 @@
public abstract class AbstractStringConstructorEvaluator implements IScalarEvaluator {
protected final IScalarEvaluator inputEval;
+ protected final SourceLocation sourceLoc;
protected final IPointable inputArg;
protected final ArrayBackedValueStorage resultStorage;
protected final DataOutput out;
protected final UTF8StringBuilder builder;
protected final GrowableArray baaos;
- protected AbstractStringConstructorEvaluator(IScalarEvaluator inputEval) {
+ protected AbstractStringConstructorEvaluator(IScalarEvaluator inputEval, SourceLocation sourceLoc) {
+ this.inputEval = inputEval;
+ this.sourceLoc = sourceLoc;
resultStorage = new ArrayBackedValueStorage();
out = resultStorage.getDataOutput();
inputArg = new VoidPointable();
- this.inputEval = inputEval;
builder = new UTF8StringBuilder();
baaos = new GrowableArray();
}
@@ -68,7 +71,7 @@
resultStorage.reset();
evaluateImpl(result);
} catch (IOException e) {
- throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), e, ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
}
@@ -156,7 +159,7 @@
case MULTISET:
case UUID:
default:
- throw new UnsupportedTypeException(getIdentifier(), serString[offset]);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), serString[offset]);
}
builder.finish();
out.write(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
index 9c38fbc..07dae0e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -39,8 +40,9 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ABOOLEAN);
public AbstractBinaryStringBoolEval(IHyracksTaskContext context, IScalarEvaluatorFactory evalLeftFactory,
- IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID) throws HyracksDataException {
- super(context, evalLeftFactory, evalRightFactory, funcID);
+ IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID, SourceLocation sourceLoc)
+ throws HyracksDataException {
+ super(context, evalLeftFactory, evalRightFactory, funcID, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringEval.java
index af0a819..2181aa6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringEval.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -53,9 +54,12 @@
// Function ID, for error reporting.
private final FunctionIdentifier funcID;
+ private final SourceLocation sourceLoc;
public AbstractBinaryStringEval(IHyracksTaskContext context, IScalarEvaluatorFactory evalLeftFactory,
- IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID) throws HyracksDataException {
+ IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID, SourceLocation sourceLoc)
+ throws HyracksDataException {
+ this.sourceLoc = sourceLoc;
this.evalLeft = evalLeftFactory.createScalarEvaluator(context);
this.evalRight = evalRightFactory.createScalarEvaluator(context);
this.funcID = funcID;
@@ -80,10 +84,10 @@
// Type check.
if (bytes0[offset0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 0, bytes0[offset0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 0, bytes0[offset0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 1, bytes1[offset1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 1, bytes1[offset1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
// Sets StringUTF8Pointables.
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringIntEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringIntEval.java
index ebe1273..a562a05 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringIntEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringIntEval.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -41,8 +42,9 @@
private AMutableInt32 resultValue = new AMutableInt32(0);
public AbstractBinaryStringIntEval(IHyracksTaskContext context, IScalarEvaluatorFactory evalLeftFactory,
- IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID) throws HyracksDataException {
- super(context, evalLeftFactory, evalRightFactory, funcID);
+ IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID, SourceLocation sourceLoc)
+ throws HyracksDataException {
+ super(context, evalLeftFactory, evalRightFactory, funcID, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringStringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringStringEval.java
index 7cdf673..04a0349 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringStringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringStringEval.java
@@ -26,6 +26,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.GrowableArray;
@@ -39,8 +40,9 @@
protected final UTF8StringBuilder resultBuilder = new UTF8StringBuilder();
public AbstractBinaryStringStringEval(IHyracksTaskContext context, IScalarEvaluatorFactory evalLeftFactory,
- IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID) throws HyracksDataException {
- super(context, evalLeftFactory, evalRightFactory, funcID);
+ IScalarEvaluatorFactory evalRightFactory, FunctionIdentifier funcID, SourceLocation sourceLoc)
+ throws HyracksDataException {
+ super(context, evalLeftFactory, evalRightFactory, funcID, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
index b06c13a..b6cec11 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
@@ -210,7 +210,7 @@
result.set(resultStorage);
return;
default:
- throw new TypeMismatchException(getIdentifier(), i, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), i, bytes[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG,
@@ -234,10 +234,10 @@
case TINYINT:
lres = evaluateInteger(operandsInteger[0], operandsInteger[1]);
if (lres > Byte.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
if (lres < Byte.MIN_VALUE) {
- throw new UnderflowException(getIdentifier());
+ throw new UnderflowException(sourceLoc, getIdentifier());
}
aInt8.setValue((byte) lres);
int8Serde.serialize(aInt8, out);
@@ -245,10 +245,10 @@
case SMALLINT:
lres = evaluateInteger(operandsInteger[0], operandsInteger[1]);
if (lres > Short.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
if (lres < Short.MIN_VALUE) {
- throw new UnderflowException(getIdentifier());
+ throw new UnderflowException(sourceLoc, getIdentifier());
}
aInt16.setValue((short) lres);
int16Serde.serialize(aInt16, out);
@@ -256,10 +256,10 @@
case INTEGER:
lres = evaluateInteger(operandsInteger[0], operandsInteger[1]);
if (lres > Integer.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
if (lres < Integer.MIN_VALUE) {
- throw new UnderflowException(getIdentifier());
+ throw new UnderflowException(sourceLoc, getIdentifier());
}
aInt32.setValue((int) lres);
int32Serde.serialize(aInt32, out);
@@ -272,10 +272,10 @@
case FLOAT:
dres = evaluateDouble(operandsFloating[0], operandsFloating[1]);
if (dres > Float.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
if (dres < -Float.MAX_VALUE) {
- throw new UnderflowException(getIdentifier());
+ throw new UnderflowException(sourceLoc, getIdentifier());
}
aFloat.setValue((float) dres);
floatSerde.serialize(aFloat, out);
@@ -330,7 +330,7 @@
ADayTimeDurationSerializerDeserializer.getDayTime(bytes1, offset1 + 1);
break;
default:
- throw new UnsupportedTypeException(getIdentifier(), bytes1[offset1]);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), bytes1[offset1]);
}
dayTime = evaluateTimeInstanceArithmetic(leftChronon, rightChronon);
@@ -363,8 +363,8 @@
ADurationSerializerDeserializer.getYearMonth(bytes1, offset1 + 1);
break;
default:
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0],
- bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(),
+ bytes0[offset0], bytes1[offset1]);
}
break;
case DATE:
@@ -393,8 +393,8 @@
offset1 + 1);
break;
default:
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0],
- bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(),
+ bytes0[offset0], bytes1[offset1]);
}
break;
case YEARMONTHDURATION:
@@ -413,8 +413,8 @@
* GregorianCalendarSystem.CHRONON_OF_DAY;
break;
default:
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0],
- bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(),
+ bytes0[offset0], bytes1[offset1]);
}
break;
case DURATION:
@@ -446,12 +446,12 @@
break;
}
default:
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0],
- bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(),
+ bytes0[offset0], bytes1[offset1]);
}
break;
default:
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0],
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), bytes0[offset0],
bytes1[offset1]);
}
@@ -476,7 +476,7 @@
serde.serialize(aDatetime, out);
break;
default:
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0],
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), bytes0[offset0],
bytes1[offset1]);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
index 47c8d34..5de007b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
@@ -36,6 +36,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -56,6 +57,7 @@
private IScalarEvaluator eval3;
private final FunctionIdentifier funcID;
+ protected final SourceLocation sourceLoc;
private AMutableString resultBuffer = new AMutableString("");
@SuppressWarnings("rawtypes")
@@ -69,12 +71,13 @@
public AbstractQuadStringStringEval(IHyracksTaskContext context, IScalarEvaluatorFactory eval0,
IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, IScalarEvaluatorFactory eval3,
- FunctionIdentifier funcID) throws HyracksDataException {
+ FunctionIdentifier funcID, SourceLocation sourceLoc) throws HyracksDataException {
this.eval0 = eval0.createScalarEvaluator(context);
this.eval1 = eval1.createScalarEvaluator(context);
this.eval2 = eval2.createScalarEvaluator(context);
this.eval3 = eval3.createScalarEvaluator(context);
this.funcID = funcID;
+ this.sourceLoc = sourceLoc;
}
@SuppressWarnings("unchecked")
@@ -103,16 +106,16 @@
resultStorage.reset();
// Type check.
if (bytes0[start0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 0, bytes0[start0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 0, bytes0[start0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[start1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 1, bytes1[start1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 1, bytes1[start1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes2[start2] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 2, bytes2[start2], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 2, bytes2[start2], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes3[start3] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 3, bytes1[start3], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 3, bytes1[start3], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
strPtr1st.set(bytes0, start0 + 1, len0);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringStringStringIntEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringStringStringIntEval.java
index 89bba67..c4bd804 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringStringStringIntEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringStringStringIntEval.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -57,10 +58,12 @@
// Function ID, for error reporting.
protected final FunctionIdentifier funcID;
+ protected final SourceLocation sourceLoc;
AbstractStringStringStringIntEval(IHyracksTaskContext context, IScalarEvaluatorFactory eval0,
IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, IScalarEvaluatorFactory eval3,
- FunctionIdentifier funcID) throws HyracksDataException {
+ FunctionIdentifier funcID, SourceLocation sourceLoc) throws HyracksDataException {
+ this.sourceLoc = sourceLoc;
this.eval0 = eval0.createScalarEvaluator(context);
this.eval1 = eval1.createScalarEvaluator(context);
this.eval2 = eval2.createScalarEvaluator(context);
@@ -96,18 +99,18 @@
// Type check.
if (bytes0[start0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 0, bytes0[start0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 0, bytes0[start0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[start1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 1, bytes1[start1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 1, bytes1[start1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes2[start2] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 2, bytes2[start2], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 2, bytes2[start2], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes3[start3] != ATypeTag.SERIALIZED_INT8_TYPE_TAG && bytes3[start3] != ATypeTag.SERIALIZED_INT16_TYPE_TAG
&& bytes3[start3] != ATypeTag.SERIALIZED_INT32_TYPE_TAG
&& bytes3[start3] != ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 3, bytes3[start3], ATypeTag.SERIALIZED_INT8_TYPE_TAG,
+ throw new TypeMismatchException(sourceLoc, funcID, 3, bytes3[start3], ATypeTag.SERIALIZED_INT8_TYPE_TAG,
ATypeTag.SERIALIZED_INT16_TYPE_TAG, ATypeTag.SERIALIZED_INT32_TYPE_TAG,
ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
index b2da86d..5624bcf 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
@@ -26,6 +26,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -36,9 +37,9 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ABOOLEAN);
public AbstractTripleStringBoolEval(IHyracksTaskContext context, IScalarEvaluatorFactory eval0,
- IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, FunctionIdentifier funcID)
- throws HyracksDataException {
- super(context, eval0, eval1, eval2, funcID);
+ IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, FunctionIdentifier funcID,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(context, eval0, eval1, eval2, funcID, sourceLoc);
}
@SuppressWarnings("unchecked")
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringEval.java
index 26563af..51d85f1 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringEval.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -55,13 +56,16 @@
// Function ID, for error reporting.
protected final FunctionIdentifier funcID;
+ protected final SourceLocation sourceLoc;
AbstractTripleStringEval(IHyracksTaskContext context, IScalarEvaluatorFactory eval0, IScalarEvaluatorFactory eval1,
- IScalarEvaluatorFactory eval2, FunctionIdentifier funcID) throws HyracksDataException {
+ IScalarEvaluatorFactory eval2, FunctionIdentifier funcID, SourceLocation sourceLoc)
+ throws HyracksDataException {
this.eval0 = eval0.createScalarEvaluator(context);
this.eval1 = eval1.createScalarEvaluator(context);
this.eval2 = eval2.createScalarEvaluator(context);
this.funcID = funcID;
+ this.sourceLoc = sourceLoc;
}
@SuppressWarnings("unchecked")
@@ -87,13 +91,13 @@
// Type check.
if (bytes0[start0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 0, bytes0[start0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 0, bytes0[start0], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[start1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 1, bytes1[start1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 1, bytes1[start1], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes2[start2] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 2, bytes2[start2], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 2, bytes2[start2], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
// Sets argument UTF8Pointables.
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringIntEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringIntEval.java
index 1ee6c8b..5636a3d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringIntEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringIntEval.java
@@ -27,6 +27,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -38,9 +39,9 @@
private final AMutableInt32 resultValue = new AMutableInt32(0);
public AbstractTripleStringIntEval(IHyracksTaskContext context, IScalarEvaluatorFactory eval0,
- IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, FunctionIdentifier funcID)
- throws HyracksDataException {
- super(context, eval0, eval1, eval2, funcID);
+ IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, FunctionIdentifier funcID,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(context, eval0, eval1, eval2, funcID, sourceLoc);
}
@SuppressWarnings("unchecked")
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
index 3c73b36..031be7d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
@@ -26,6 +26,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
@@ -37,9 +38,9 @@
private final AMutableString resultValue = new AMutableString("");
public AbstractTripleStringStringEval(IHyracksTaskContext context, IScalarEvaluatorFactory eval0,
- IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, FunctionIdentifier funcID)
- throws HyracksDataException {
- super(context, eval0, eval1, eval2, funcID);
+ IScalarEvaluatorFactory eval1, IScalarEvaluatorFactory eval2, FunctionIdentifier funcID,
+ SourceLocation sourceLoc) throws HyracksDataException {
+ super(context, eval0, eval1, eval2, funcID, sourceLoc);
}
@SuppressWarnings("unchecked")
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericDoubleFunctionEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericDoubleFunctionEval.java
index 241452a..00586d4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericDoubleFunctionEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericDoubleFunctionEval.java
@@ -23,6 +23,7 @@
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
/**
@@ -31,8 +32,8 @@
abstract class AbstractUnaryNumericDoubleFunctionEval extends AbstractUnaryNumericFunctionEval {
public AbstractUnaryNumericDoubleFunctionEval(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory,
- FunctionIdentifier funcID) throws HyracksDataException {
- super(context, argEvalFactory, funcID);
+ FunctionIdentifier funcID, SourceLocation sourceLoc) throws HyracksDataException {
+ super(context, argEvalFactory, funcID, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericFunctionEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericFunctionEval.java
index 61cd6f6..d2a4164 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericFunctionEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryNumericFunctionEval.java
@@ -45,6 +45,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -92,11 +93,13 @@
// The function identifier, used for error messages.
private final FunctionIdentifier funcID;
+ private final SourceLocation sourceLoc;
public AbstractUnaryNumericFunctionEval(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory,
- FunctionIdentifier funcID) throws HyracksDataException {
+ FunctionIdentifier funcID, SourceLocation sourceLoc) throws HyracksDataException {
this.argEval = argEvalFactory.createScalarEvaluator(context);
this.funcID = funcID;
+ this.sourceLoc = sourceLoc;
}
@SuppressWarnings("unchecked")
@@ -126,7 +129,7 @@
double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
processDouble(val, result);
} else {
- throw new TypeMismatchException(funcID, 0, data[offset], ATypeTag.SERIALIZED_INT8_TYPE_TAG,
+ throw new TypeMismatchException(sourceLoc, funcID, 0, data[offset], ATypeTag.SERIALIZED_INT8_TYPE_TAG,
ATypeTag.SERIALIZED_INT16_TYPE_TAG, ATypeTag.SERIALIZED_INT32_TYPE_TAG,
ATypeTag.SERIALIZED_INT64_TYPE_TAG, ATypeTag.SERIALIZED_FLOAT_TYPE_TAG,
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryStringStringEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryStringStringEval.java
index a8853f1..fca1068 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryStringStringEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractUnaryStringStringEval.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -50,11 +51,13 @@
private final ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
private final DataOutput dataOutput = resultStorage.getDataOutput();
private final FunctionIdentifier funcID;
+ protected final SourceLocation sourceLoc;
AbstractUnaryStringStringEval(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory,
- FunctionIdentifier funcID) throws HyracksDataException {
+ FunctionIdentifier funcID, SourceLocation sourceLoc) throws HyracksDataException {
this.argEval = argEvalFactory.createScalarEvaluator(context);
this.funcID = funcID;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -65,7 +68,8 @@
int offset = argPtr.getStartOffset();
byte inputTypeTag = argBytes[offset];
if (inputTypeTag != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(funcID, 0, argBytes[offset], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, funcID, 0, argBytes[offset],
+ ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
stringPtr.set(argBytes, offset + 1, argPtr.getLength() - 1);
resultArray.reset();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AndDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AndDescriptor.java
index e9f9c9e..e0d9bd3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AndDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AndDescriptor.java
@@ -107,7 +107,7 @@
continue;
}
if (bytes[offset] != ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), i, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), i, bytes[offset],
ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
}
boolean argResult = ABooleanSerializerDeserializer.getBoolean(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
index b78bc5c..1833fcc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
@@ -61,7 +61,7 @@
return BuiltinFunctions.ANY_COLLECTION_MEMBER;
}
- private static class AnyCollectionMemberEvalFactory implements IScalarEvaluatorFactory {
+ private class AnyCollectionMemberEvalFactory implements IScalarEvaluatorFactory {
private static final long serialVersionUID = 1L;
@@ -95,8 +95,9 @@
if (serList[offset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& serList[offset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.ANY_COLLECTION_MEMBER, 0, serList[offset],
- ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.ANY_COLLECTION_MEMBER, 0,
+ serList[offset], ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
+ ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
try {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CheckUnknownDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CheckUnknownDescriptor.java
index 1e65dc0..7f90973 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CheckUnknownDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CheckUnknownDescriptor.java
@@ -68,7 +68,7 @@
if (data[offset] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG
|| data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
- throw new UnsupportedTypeException(getIdentifier(), data[offset]);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), data[offset]);
}
result.set(inputArg);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
index a59d03d..dbe2e05 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
@@ -95,7 +95,8 @@
offset);
break;
default:
- throw new UnsupportedTypeException(getIdentifier(), serOrderedList[offset]);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(),
+ serOrderedList[offset]);
}
}
// calculate length first
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
index 132c99e..8d49ae8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
@@ -91,11 +91,11 @@
// Type check: (point, double)
if (bytes0[offset0] != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateLineDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
index 6f79f97..9d49466 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
@@ -90,11 +90,11 @@
// type-check: (point, point)
if (bytes0[offset0] != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePointDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
index d61d6f2..71901c5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
@@ -84,11 +84,11 @@
// type-check: (double, double)
if (bytes0[offset0] != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
index 74f8757..bdb8b94 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
@@ -89,7 +89,7 @@
if (listBytes[offset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& listBytes[offset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, listBytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, listBytes[offset],
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
@@ -107,16 +107,16 @@
missingSerde.serialize(AMissing.MISSING, out);
return;
}
- throw new UnsupportedItemTypeException(BuiltinFunctions.CREATE_POLYGON,
+ throw new UnsupportedItemTypeException(sourceLoc, BuiltinFunctions.CREATE_POLYGON,
itemType.serialize());
}
}
if (listAccessor.size() < 6) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
} else if (listAccessor.size() % 2 != 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
out.writeByte(ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
index ad874f5..b758845 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
@@ -90,11 +90,11 @@
resultStorage.reset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetItemDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetItemDescriptor.java
index 0c55ef1..aa641ff 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetItemDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetItemDescriptor.java
@@ -61,7 +61,7 @@
return BuiltinFunctions.GET_ITEM;
}
- private static class GetItemEvalFactory implements IScalarEvaluatorFactory {
+ private class GetItemEvalFactory implements IScalarEvaluatorFactory {
private static final long serialVersionUID = 1L;
private IScalarEvaluatorFactory listEvalFactory;
@@ -105,8 +105,8 @@
itemIndex = ATypeHierarchy.getIntegerValue(BuiltinFunctions.GET_ITEM.getName(), 0,
indexBytes, indexOffset);
} else {
- throw new TypeMismatchException(BuiltinFunctions.GET_ITEM, 0, serOrderedList[offset],
- ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.GET_ITEM, 0,
+ serOrderedList[offset], ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
if (itemIndex < 0 || itemIndex >= AOrderedListSerializerDeserializer
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetJobParameterByNameDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetJobParameterByNameDescriptor.java
index 17f7a96..f4ba646 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetJobParameterByNameDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/GetJobParameterByNameDescriptor.java
@@ -50,7 +50,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractUnaryStringStringEval(ctx, args[0],
- GetJobParameterByNameDescriptor.this.getIdentifier()) {
+ GetJobParameterByNameDescriptor.this.getIdentifier(), sourceLoc) {
private byte[] result;
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
index 25b6c5d9..df875a0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
@@ -82,7 +82,7 @@
argPtr.getStartOffset() + 1);
if (argResult) {
LOGGER.log(Level.ERROR, ctx.getTaskAttemptId() + " injecting failure");
- throw new RuntimeDataException(ErrorCode.INJECTED_FAILURE, getIdentifier());
+ throw new RuntimeDataException(ErrorCode.INJECTED_FAILURE, sourceLoc, getIdentifier());
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/LenDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/LenDescriptor.java
index 7bae18b..cbae79e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/LenDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/LenDescriptor.java
@@ -83,7 +83,7 @@
if (serList[offset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& serList[offset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, serList[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, serList[offset],
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NotDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NotDescriptor.java
index 13037a9..7c9736d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NotDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NotDescriptor.java
@@ -86,7 +86,7 @@
ABoolean aResult = argRes ? ABoolean.FALSE : ABoolean.TRUE;
booleanSerde.serialize(aResult, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
}
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericACosDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericACosDescriptor.java
index a7ba7b0..a0c9ae6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericACosDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericACosDescriptor.java
@@ -59,7 +59,7 @@
NumericACosEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericACosDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericACosDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericASinDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericASinDescriptor.java
index 02c5896..f20736c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericASinDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericASinDescriptor.java
@@ -60,7 +60,7 @@
NumericASinEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericASinDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericASinDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericATanDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericATanDescriptor.java
index d5a5c21..2939f49 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericATanDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericATanDescriptor.java
@@ -60,7 +60,7 @@
NumericATanEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericATanDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericATanDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
index d153a69..67d3e4d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
@@ -64,7 +64,7 @@
NumericAbsEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericAbsDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericAbsDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAddDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
index 3f52a47..f64b829 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
@@ -59,6 +59,6 @@
@Override
protected long evaluateTimeInstanceArithmetic(long chronon0, long chronon1) throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
index 5d0eebb..407eb4d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
@@ -60,7 +60,7 @@
NumericCeilingEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericCeilingDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericCeilingDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCosDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCosDescriptor.java
index 7ef6bd4..1122bbe 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCosDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCosDescriptor.java
@@ -60,7 +60,7 @@
NumericCosEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericCosDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericCosDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDegreesDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDegreesDescriptor.java
index dbb4737..6539e20 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDegreesDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDegreesDescriptor.java
@@ -46,7 +46,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryNumericDoubleFunctionEval(ctx, args[0], getIdentifier()) {
+ return new AbstractUnaryNumericDoubleFunctionEval(ctx, args[0], getIdentifier(), sourceLoc) {
@Override
protected void processDouble(double arg, IPointable resultPointable) throws HyracksDataException {
aDouble.setValue(Math.toDegrees(arg));
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivDescriptor.java
index 33edc7b..56d90f7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivDescriptor.java
@@ -56,7 +56,7 @@
throw new RuntimeDataException(ErrorCode.DIVISION_BY_ZERO);
}
if ((lhs == Long.MIN_VALUE) && (rhs == -1L)) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
return lhs / rhs;
}
@@ -68,6 +68,6 @@
@Override
protected long evaluateTimeInstanceArithmetic(long chronon0, long chronon1) throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
index 868f3b5..0c1a3eb 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
@@ -63,6 +63,6 @@
@Override
protected long evaluateTimeInstanceArithmetic(long chronon0, long chronon1) throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericExpDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericExpDescriptor.java
index c5aeaa1..3a51e48 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericExpDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericExpDescriptor.java
@@ -60,7 +60,7 @@
NumericExpEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericExpDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericExpDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
index fd001d8..7f1b9bc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
@@ -64,7 +64,7 @@
NumericFloorEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericFloorDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericFloorDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLnDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLnDescriptor.java
index 1e9d2be..8cc3327 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLnDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLnDescriptor.java
@@ -60,7 +60,7 @@
NumericLnEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericLnDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericLnDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLogDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLogDescriptor.java
index f5a35f6..8867ea7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLogDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericLogDescriptor.java
@@ -60,7 +60,7 @@
NumericLogEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericLogDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericLogDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
index 777e447..a967162 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
@@ -55,11 +55,11 @@
@Override
protected long evaluateTimeDurationArithmetic(long chronon, int yearMonth, long dayTime, boolean isTimeOnly)
throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
@Override
protected long evaluateTimeInstanceArithmetic(long chronon0, long chronon1) throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
index d907bf3..57de132 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
@@ -53,11 +53,11 @@
@Override
protected long evaluateTimeDurationArithmetic(long chronon, int yearMonth, long dayTime, boolean isTimeOnly)
throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
@Override
protected long evaluateTimeInstanceArithmetic(long chronon0, long chronon1) throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericPowerDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericPowerDescriptor.java
index ae7f019..a5312b9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericPowerDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericPowerDescriptor.java
@@ -45,7 +45,7 @@
@Override
protected long evaluateInteger(long lhs, long rhs) throws HyracksDataException {
if (rhs > Integer.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
return LongMath.checkedPow(lhs, (int) rhs);
}
@@ -69,12 +69,12 @@
@Override
protected long evaluateTimeDurationArithmetic(long chronon, int yearMonth, long dayTime, boolean isTimeOnly)
throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier().getName(), ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier().getName(), ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
@Override
protected long evaluateTimeInstanceArithmetic(long chronon0, long chronon1) throws HyracksDataException {
- throw new UnsupportedTypeException(getIdentifier().getName(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new UnsupportedTypeException(sourceLoc, getIdentifier().getName(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRadiansDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRadiansDescriptor.java
index 51352cb..a0c1a33 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRadiansDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRadiansDescriptor.java
@@ -46,7 +46,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryNumericDoubleFunctionEval(ctx, args[0], getIdentifier()) {
+ return new AbstractUnaryNumericDoubleFunctionEval(ctx, args[0], getIdentifier(), sourceLoc) {
@Override
protected void processDouble(double arg, IPointable resultPointable) throws HyracksDataException {
aDouble.setValue(Math.toRadians(arg));
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
index 0ad0dbe..e355a05 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
@@ -140,7 +140,7 @@
aDouble.setValue(val);
serde.serialize(aDouble, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
index 926ef49..00e7415 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
@@ -110,7 +110,7 @@
} else if (bytes[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
return (int) AInt64SerializerDeserializer.getLong(bytes, offset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
@@ -176,7 +176,7 @@
serde.serialize(aDouble, out);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
index 1d45b3c..ecb62e6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
@@ -138,7 +138,7 @@
aDouble.setValue(Math.rint(val));
serde.serialize(aDouble, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSignDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSignDescriptor.java
index 392dc0a..fcffdb8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSignDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSignDescriptor.java
@@ -60,7 +60,7 @@
NumericSignEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericSignDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericSignDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSinDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSinDescriptor.java
index 9b55844..08ddf71 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSinDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSinDescriptor.java
@@ -60,7 +60,7 @@
NumericSinEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericSinDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericSinDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSqrtDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSqrtDescriptor.java
index 2715639..cd48626 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSqrtDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSqrtDescriptor.java
@@ -60,7 +60,7 @@
NumericSqrtEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericSqrtDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericSqrtDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
index 427e6eb..10b97e9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
@@ -134,7 +134,7 @@
operands[i] = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
break;
default:
- throw new TypeMismatchException(getIdentifier(), i, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), i, data[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTanDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTanDescriptor.java
index 3b1772d..ade44a7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTanDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTanDescriptor.java
@@ -60,7 +60,7 @@
NumericTanEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericTanDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericTanDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTruncDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTruncDescriptor.java
index fb52641..2e52d1e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTruncDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericTruncDescriptor.java
@@ -118,9 +118,9 @@
} else if (bytes[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
return (int) AInt64SerializerDeserializer.getLong(bytes, offset + 1);
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes[offset], ATypeTag.SERIALIZED_INT8_TYPE_TAG,
- ATypeTag.SERIALIZED_INT16_TYPE_TAG, ATypeTag.SERIALIZED_INT32_TYPE_TAG,
- ATypeTag.SERIALIZED_INT64_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes[offset],
+ ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
+ ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
}
@@ -178,10 +178,10 @@
serde.serialize(aDouble, out);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, data[offset], ATypeTag.SERIALIZED_INT8_TYPE_TAG,
- ATypeTag.SERIALIZED_INT16_TYPE_TAG, ATypeTag.SERIALIZED_INT32_TYPE_TAG,
- ATypeTag.SERIALIZED_INT64_TYPE_TAG, ATypeTag.SERIALIZED_FLOAT_TYPE_TAG,
- ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, data[offset],
+ ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
+ ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
+ ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
result.set(resultStorage);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
index 7f0b962..f60df2a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
@@ -60,7 +60,7 @@
NumericUnaryMinusEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory argEvalFactory)
throws HyracksDataException {
- super(context, argEvalFactory, NumericUnaryMinusDescriptor.this.getIdentifier());
+ super(context, argEvalFactory, NumericUnaryMinusDescriptor.this.getIdentifier(), sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/OrDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/OrDescriptor.java
index 7aea25c..b828c25 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/OrDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/OrDescriptor.java
@@ -103,7 +103,7 @@
continue;
}
if (data[offset] != ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), i, data[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), i, data[offset],
ATypeTag.SERIALIZED_BOOLEAN_TYPE_TAG);
}
boolean argResult = ABooleanSerializerDeserializer.getBoolean(data, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
index f3d0bd8..1aec610 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
@@ -85,7 +85,7 @@
int numOfPoints = AInt16SerializerDeserializer.getShort(bytes, offset + 1);
if (numOfPoints < 3) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG);
}
area = Math.abs(SpatialUtils.polygonArea(bytes, offset, numOfPoints));
@@ -118,7 +118,7 @@
out.writeDouble(area);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_POLYGON_TYPE_TAG, ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG,
ATypeTag.SERIALIZED_RECTANGLE_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
index 9b47b92..ce9ab54 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
@@ -128,19 +128,19 @@
rectangleSerde.serialize(aRectangle, out);
} else {
if (tag0 != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, tag0,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, tag0,
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
if (tag1 != ATypeTag.SERIALIZED_POINT_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, tag1,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, tag1,
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
if (tag2 != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 2, tag2,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 2, tag2,
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
if (tag3 != ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 3, tag3,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 3, tag3,
ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
index ba47d3d..0fe73a7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
@@ -93,11 +93,11 @@
offset1 + APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y));
distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
} else {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_POINT_TYPE_TAG);
}
out.writeByte(ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringConcatDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
index 851e1a4..cb213ae 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
@@ -87,7 +87,7 @@
if (listBytes[listOffset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& listBytes[listOffset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, listBytes[listOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, listBytes[listOffset],
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
@@ -113,7 +113,8 @@
result.set(resultStorage);
return;
}
- throw new UnsupportedItemTypeException(getIdentifier(), itemType.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, getIdentifier(),
+ itemType.serialize());
}
utf8Len += UTF8StringUtil.getUTFLength(listBytes, itemOffset);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringContainsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringContainsDescriptor.java
index 46865cf..4f098fd 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringContainsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringContainsDescriptor.java
@@ -49,7 +49,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_CONTAINS) {
+ return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_CONTAINS,
+ sourceLoc) {
@Override
protected boolean compute(UTF8StringPointable left, UTF8StringPointable right) throws IOException {
return UTF8StringPointable.contains(left, right, false);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEndsWithDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEndsWithDescriptor.java
index 6422158..090c7d1 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEndsWithDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEndsWithDescriptor.java
@@ -49,7 +49,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_ENDS_WITH) {
+ return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_ENDS_WITH,
+ sourceLoc) {
@Override
protected boolean compute(UTF8StringPointable left, UTF8StringPointable right) throws IOException {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEqualDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEqualDescriptor.java
index 71a5742..1eb7a88 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEqualDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringEqualDescriptor.java
@@ -49,7 +49,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_EQUAL) {
+ return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_EQUAL,
+ sourceLoc) {
@Override
protected boolean compute(UTF8StringPointable left, UTF8StringPointable right) throws IOException {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringInitCapDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringInitCapDescriptor.java
index 10a67b6..2b3f43f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringInitCapDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringInitCapDescriptor.java
@@ -50,7 +50,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], StringInitCapDescriptor.this.getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], StringInitCapDescriptor.this.getIdentifier(),
+ sourceLoc) {
@Override
protected void process(UTF8StringPointable inputString, IPointable resultPointable)
throws IOException {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringJoinDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
index 70b3687..2c00ee5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
@@ -89,14 +89,14 @@
int listOffset = inputArgList.getStartOffset();
if (listBytes[listOffset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& listBytes[listOffset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, listBytes[listOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, listBytes[listOffset],
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
byte[] sepBytes = inputArgSep.getByteArray();
int sepOffset = inputArgSep.getStartOffset();
if (sepBytes[sepOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, sepBytes[sepOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, sepBytes[sepOffset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
int sepLen = UTF8StringUtil.getUTFLength(sepBytes, sepOffset + 1);
@@ -126,7 +126,8 @@
result.set(resultStorage);
return;
}
- throw new UnsupportedItemTypeException(getIdentifier(), itemType.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, getIdentifier(),
+ itemType.serialize());
}
int currentSize = UTF8StringUtil.getUTFLength(listBytes, itemOffset);
if (i != size - 1 && currentSize != 0) {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrim2Descriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrim2Descriptor.java
index bcf3d63..2595cd4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrim2Descriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrim2Descriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringStringEval(ctx, args[0], args[1],
- StringLTrim2Descriptor.this.getIdentifier()) {
+ StringLTrim2Descriptor.this.getIdentifier(), sourceLoc) {
private StringTrimmer stringTrimmer = new StringTrimmer(resultBuilder, resultArray);
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrimDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrimDescriptor.java
index 7ec5a40..de635ff 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrimDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLTrimDescriptor.java
@@ -56,7 +56,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], StringLTrimDescriptor.this.getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], StringLTrimDescriptor.this.getIdentifier(),
+ sourceLoc) {
private StringTrimmer stringTrimmer = new StringTrimmer(resultBuilder, resultArray, " ");
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLengthDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLengthDescriptor.java
index b435025..9fd173a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLengthDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLengthDescriptor.java
@@ -83,7 +83,7 @@
result.setValue(len);
int64Serde.serialize(result, out);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, serString[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, serString[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
resultPointable.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLikeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLikeDescriptor.java
index 4481328..fa1c0b1 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLikeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLikeDescriptor.java
@@ -61,7 +61,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringBoolEval(ctx, args[0], args[1],
- StringLikeDescriptor.this.getIdentifier()) {
+ StringLikeDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
private final RegExpMatcher.IRegExpPatternGenerator patternGenerator = new LikePatternGenerator();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java
index a9957f7..98c9a69 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java
@@ -49,7 +49,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], StringLowerCaseDescriptor.this.getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], StringLowerCaseDescriptor.this.getIdentifier(),
+ sourceLoc) {
@Override
protected void process(UTF8StringPointable inputString, IPointable resultPointable)
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringPositionDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringPositionDescriptor.java
index e9ec211..b4311ea 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringPositionDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringPositionDescriptor.java
@@ -58,7 +58,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringIntEval(ctx, args[0], args[1],
- StringPositionDescriptor.this.getIdentifier()) {
+ StringPositionDescriptor.this.getIdentifier(), sourceLoc) {
@Override
protected int compute(UTF8StringPointable left, UTF8StringPointable right) throws IOException {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrim2Descriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrim2Descriptor.java
index 5d32bca..7f886ff 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrim2Descriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrim2Descriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringStringEval(ctx, args[0], args[1],
- StringRTrim2Descriptor.this.getIdentifier()) {
+ StringRTrim2Descriptor.this.getIdentifier(), sourceLoc) {
private StringTrimmer stringTrimmer = new StringTrimmer(resultBuilder, resultArray);
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrimDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrimDescriptor.java
index 6ec708d..7c89832 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrimDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRTrimDescriptor.java
@@ -56,7 +56,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], StringRTrimDescriptor.this.getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], StringRTrimDescriptor.this.getIdentifier(),
+ sourceLoc) {
private StringTrimmer stringTrimmer = new StringTrimmer(resultBuilder, resultArray, " ");
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsDescriptor.java
index 7a23578..91e1ffa 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsDescriptor.java
@@ -50,7 +50,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringBoolEval(ctx, args[0], args[1],
- StringRegExpContainsDescriptor.this.getIdentifier()) {
+ StringRegExpContainsDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsWithFlagDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsWithFlagDescriptor.java
index a5a79d9..21d038a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsWithFlagDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpContainsWithFlagDescriptor.java
@@ -52,7 +52,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractTripleStringBoolEval(ctx, args[0], args[1], args[2],
- StringRegExpContainsWithFlagDescriptor.this.getIdentifier()) {
+ StringRegExpContainsWithFlagDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeDescriptor.java
index 77eded9..83a6f39 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeDescriptor.java
@@ -51,7 +51,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringBoolEval(ctx, args[0], args[1],
- StringRegExpLikeDescriptor.this.getIdentifier()) {
+ StringRegExpLikeDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeWithFlagDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeWithFlagDescriptor.java
index 635b4a6..317545a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeWithFlagDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpLikeWithFlagDescriptor.java
@@ -49,7 +49,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractTripleStringBoolEval(ctx, args[0], args[1], args[2],
- StringRegExpLikeWithFlagDescriptor.this.getIdentifier()) {
+ StringRegExpLikeWithFlagDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionDescriptor.java
index b39c473..62cf32d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionDescriptor.java
@@ -19,8 +19,6 @@
package org.apache.asterix.runtime.evaluators.functions;
-import java.io.IOException;
-
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.functions.IFunctionDescriptor;
import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
@@ -59,7 +57,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringIntEval(ctx, args[0], args[1],
- StringRegExpPositionDescriptor.this.getIdentifier()) {
+ StringRegExpPositionDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionWithFlagDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionWithFlagDescriptor.java
index 0d910be..c85bd3d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionWithFlagDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpPositionWithFlagDescriptor.java
@@ -57,7 +57,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractTripleStringIntEval(ctx, args[0], args[1], args[2],
- StringRegExpPositionWithFlagDescriptor.this.getIdentifier()) {
+ StringRegExpPositionWithFlagDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceDescriptor.java
index a1ea169..fc42f04 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceDescriptor.java
@@ -18,8 +18,6 @@
*/
package org.apache.asterix.runtime.evaluators.functions;
-import java.io.IOException;
-
import org.apache.asterix.om.functions.BuiltinFunctions;
import org.apache.asterix.om.functions.IFunctionDescriptor;
import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
@@ -50,7 +48,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractTripleStringStringEval(ctx, args[0], args[1], args[2],
- StringRegExpReplaceDescriptor.this.getIdentifier()) {
+ StringRegExpReplaceDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceWithFlagsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceWithFlagsDescriptor.java
index f938c24..d901a22 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceWithFlagsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRegExpReplaceWithFlagsDescriptor.java
@@ -50,7 +50,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractQuadStringStringEval(ctx, args[0], args[1], args[2], args[3],
- StringRegExpReplaceWithFlagsDescriptor.this.getIdentifier()) {
+ StringRegExpReplaceWithFlagsDescriptor.this.getIdentifier(), sourceLoc) {
private final RegExpMatcher matcher = new RegExpMatcher();
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRepeatDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRepeatDescriptor.java
index 4672c75..90f4e35 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRepeatDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringRepeatDescriptor.java
@@ -87,7 +87,7 @@
ATypeHierarchy.getIntegerValue(getIdentifier().getName(), 1, bytes, offset);
// Checks repeatingTimes. It should be a non-negative value.
if (repeatingTimes < 0) {
- throw new RuntimeDataException(ErrorCode.NEGATIVE_VALUE, getIdentifier(), 1,
+ throw new RuntimeDataException(ErrorCode.NEGATIVE_VALUE, sourceLoc, getIdentifier(), 1,
repeatingTimes);
}
@@ -96,7 +96,7 @@
offset = argString.getStartOffset();
// Checks the type of the string argument.
if (bytes[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java
index 098d98f..472cc25 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java
@@ -48,7 +48,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractTripleStringEval(ctx, args[0], args[1], args[2], getIdentifier()) {
+ return new AbstractTripleStringEval(ctx, args[0], args[1], args[2], getIdentifier(), sourceLoc) {
final StringReplacer replacer = new StringReplacer();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceWithLimitDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceWithLimitDescriptor.java
index fcd8218..489255e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceWithLimitDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReplaceWithLimitDescriptor.java
@@ -48,7 +48,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractStringStringStringIntEval(ctx, args[0], args[1], args[2], args[3], getIdentifier()) {
+ return new AbstractStringStringStringIntEval(ctx, args[0], args[1], args[2], args[3], getIdentifier(),
+ sourceLoc) {
final StringReplacer replacer = new StringReplacer();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReverseDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReverseDescriptor.java
index 0095291..bcb8161 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReverseDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringReverseDescriptor.java
@@ -49,7 +49,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], getIdentifier(), sourceLoc) {
@Override
void process(UTF8StringPointable inputString, IPointable resultPointable) throws IOException {
UTF8StringPointable.reverse(inputString, resultBuilder, resultArray);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringSplitDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringSplitDescriptor.java
index 4cfb92d..5bdcb54 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringSplitDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringSplitDescriptor.java
@@ -97,7 +97,7 @@
int srcLen = argString.getLength();
// Type check for the first argument.
if (srcString[srcOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, srcString[srcOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, srcString[srcOffset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -107,8 +107,8 @@
int patternLen = argPattern.getLength();
// Type check for the second argument.
if (patternString[patternOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, patternString[patternOffset],
- ATypeTag.SERIALIZED_STRING_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1,
+ patternString[patternOffset], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
// Sets the UTF8 String pointables.
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringStartsWithDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringStartsWithDescriptor.java
index aa43e66..360f156 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringStartsWithDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringStartsWithDescriptor.java
@@ -49,7 +49,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_STARTS_WITH) {
+ return new AbstractBinaryStringBoolEval(ctx, args[0], args[1], BuiltinFunctions.STRING_STARTS_WITH,
+ sourceLoc) {
@Override
protected boolean compute(UTF8StringPointable left, UTF8StringPointable right) throws IOException {
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
index 63d474d..8b0568b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
@@ -103,7 +103,7 @@
}
listBuilder.write(out, true);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, serString[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, serString[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrim2Descriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrim2Descriptor.java
index 0136994..941f11f 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrim2Descriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrim2Descriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
return new AbstractBinaryStringStringEval(ctx, args[0], args[1],
- StringTrim2Descriptor.this.getIdentifier()) {
+ StringTrim2Descriptor.this.getIdentifier(), sourceLoc) {
private StringTrimmer stringTrimmer = new StringTrimmer(resultBuilder, resultArray);
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrimDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrimDescriptor.java
index bc4d150..391c8ab 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrimDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringTrimDescriptor.java
@@ -56,7 +56,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], StringTrimDescriptor.this.getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], StringTrimDescriptor.this.getIdentifier(),
+ sourceLoc) {
private StringTrimmer stringTrimmer = new StringTrimmer(resultBuilder, resultArray, " ");
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringUpperCaseDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringUpperCaseDescriptor.java
index 53c7e1a..50f1d62 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringUpperCaseDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/StringUpperCaseDescriptor.java
@@ -49,7 +49,8 @@
@Override
public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractUnaryStringStringEval(ctx, args[0], StringUpperCaseDescriptor.this.getIdentifier()) {
+ return new AbstractUnaryStringStringEval(ctx, args[0], StringUpperCaseDescriptor.this.getIdentifier(),
+ sourceLoc) {
@Override
protected void process(UTF8StringPointable inputString, IPointable resultPointable)
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Descriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Descriptor.java
index 854eb8e..bda5b2c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Descriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/Substring2Descriptor.java
@@ -91,7 +91,7 @@
offset = argString.getStartOffset();
int len = argString.getLength();
if (bytes[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
string.set(bytes, offset + 1, len - 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java
index 92e0c52..eac2649 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java
@@ -81,11 +81,11 @@
int patternLen = array1.getLength();
if (src[srcOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, src[srcOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, src[srcOffset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (pattern[patternOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, pattern[patternOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, pattern[patternOffset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java
index fe6631c..5ed13bc 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java
@@ -83,11 +83,11 @@
int patternLen = array1.getLength();
if (src[srcOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, src[srcOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, src[srcOffset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (pattern[patternOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, pattern[patternOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, pattern[patternOffset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringDescriptor.java
index 526711c..dd1bd3d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/SubstringDescriptor.java
@@ -103,7 +103,7 @@
offset = argString.getStartOffset();
int length = argString.getLength();
if (bytes[offset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
string.set(bytes, offset + 1, length - 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBigIntDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBigIntDescriptor.java
index 2762d61..8101bb5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBigIntDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBigIntDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractInt64ConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractInt64ConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected void evaluateImpl(IPointable result) throws IOException {
byte[] bytes = inputArg.getByteArray();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBooleanDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBooleanDescriptor.java
index fccd6d1..4a1bb70 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBooleanDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToBooleanDescriptor.java
@@ -60,7 +60,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBooleanConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractBooleanConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected void evaluateImpl(IPointable result) throws HyracksDataException {
byte[] bytes = inputArg.getByteArray();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToDoubleDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToDoubleDescriptor.java
index 4fa33de..fecf528 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToDoubleDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToDoubleDescriptor.java
@@ -53,7 +53,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractDoubleConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractDoubleConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@Override
protected void evaluateImpl(IPointable result) throws IOException {
byte[] bytes = inputArg.getByteArray();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToNumberDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToNumberDescriptor.java
index d044744..770f200 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToNumberDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToNumberDescriptor.java
@@ -127,7 +127,7 @@
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes[startOffset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[startOffset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG,
ATypeTag.SERIALIZED_FLOAT_TYPE_TAG, ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG,
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToStringDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToStringDescriptor.java
index 9559da4..595bb05 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToStringDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ToStringDescriptor.java
@@ -54,7 +54,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractStringConstructorEvaluator(args[0].createScalarEvaluator(ctx)) {
+ return new AbstractStringConstructorEvaluator(args[0].createScalarEvaluator(ctx), sourceLoc) {
@SuppressWarnings("unchecked")
private final ISerializerDeserializer<ANull> nullSerde =
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ANULL);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractBinaryScalarEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractBinaryScalarEvaluator.java
index bcd8094..81a6adb 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractBinaryScalarEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractBinaryScalarEvaluator.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -38,37 +39,17 @@
protected DataOutput dataOutput = resultStorage.getDataOutput();
protected IPointable[] pointables;
protected IScalarEvaluator[] evaluators;
+ protected SourceLocation sourceLoc;
- public AbstractBinaryScalarEvaluator(final IHyracksTaskContext context,
- final IScalarEvaluatorFactory[] evaluatorFactories) throws HyracksDataException {
+ public AbstractBinaryScalarEvaluator(IHyracksTaskContext context,
+ final IScalarEvaluatorFactory[] evaluatorFactories, SourceLocation sourceLoc) throws HyracksDataException {
pointables = new IPointable[evaluatorFactories.length];
evaluators = new IScalarEvaluator[evaluatorFactories.length];
for (int i = 0; i < evaluators.length; ++i) {
pointables[i] = new VoidPointable();
evaluators[i] = evaluatorFactories[i].createScalarEvaluator(context);
}
- }
-
- private static final String FIRST = "1st";
- private static final String SECOND = "2nd";
- private static final String THIRD = "3rd";
- private static final String TH = "th";
-
- protected String rankToString(int i) {
- String prefix = "";
- if (i >= 10) {
- prefix = String.valueOf(i / 10);
- }
- switch (i % 10) {
- case 1:
- return prefix + FIRST;
- case 2:
- return prefix + SECOND;
- case 3:
- return prefix + THIRD;
- default:
- return String.valueOf(i) + TH;
- }
+ this.sourceLoc = sourceLoc;
}
protected void checkTypeMachingThrowsIfNot(String title, ATypeTag[] expected, ATypeTag... actual)
@@ -77,7 +58,8 @@
if (expected[i] != actual[i]) {
if (!ATypeHierarchy.canPromote(actual[i], expected[i])
&& !ATypeHierarchy.canPromote(expected[i], actual[i])) {
- throw new TypeMismatchException(title, i, actual[i].serialize(), expected[i].serialize());
+ throw new TypeMismatchException(sourceLoc, title, i, actual[i].serialize(),
+ expected[i].serialize());
}
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractFindBinaryEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractFindBinaryEvaluator.java
index c88fe25..1637130 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractFindBinaryEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractFindBinaryEvaluator.java
@@ -28,6 +28,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -46,8 +47,8 @@
SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AINT64);
public AbstractFindBinaryEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory[] copyEvaluatorFactories,
- int baseOffset, String functionName) throws HyracksDataException {
- super(context, copyEvaluatorFactories);
+ int baseOffset, String functionName, SourceLocation sourceLoc) throws HyracksDataException {
+ super(context, copyEvaluatorFactories, sourceLoc);
this.baseOffset = baseOffset;
this.functionName = functionName;
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java
index 6c84893..391df5e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java
@@ -27,6 +27,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.ByteArrayPointable;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -42,8 +43,8 @@
private static final ATypeTag[] EXPECTED_INPUT_TAGS = { ATypeTag.BINARY, ATypeTag.INTEGER };
public AbstractSubBinaryEvaluator(IHyracksTaskContext context, IScalarEvaluatorFactory[] copyEvaluatorFactories,
- int baseOffset, String functionName) throws HyracksDataException {
- super(context, copyEvaluatorFactories);
+ int baseOffset, String functionName, SourceLocation sourceLoc) throws HyracksDataException {
+ super(context, copyEvaluatorFactories, sourceLoc);
this.baseOffset = baseOffset;
this.functionName = functionName;
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryConcatDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryConcatDescriptor.java
index 907dfd3..59f3396 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryConcatDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryConcatDescriptor.java
@@ -66,7 +66,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryScalarEvaluator(ctx, args) {
+ return new AbstractBinaryScalarEvaluator(ctx, args, sourceLoc) {
private final ListAccessor listAccessor = new ListAccessor();
private final byte[] metaBuffer = new byte[5];
@@ -87,7 +87,7 @@
byte typeTag = data[offset];
if (typeTag != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG
&& typeTag != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, typeTag,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, typeTag,
ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG,
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
@@ -102,7 +102,8 @@
result.set(resultStorage);
return;
}
- throw new UnsupportedItemTypeException(getIdentifier(), itemType.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, getIdentifier(),
+ itemType.serialize());
}
concatLength += ByteArrayPointable.getContentLength(data, itemOffset);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryLengthDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryLengthDescriptor.java
index 2c53225..dc8edbe 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryLengthDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/BinaryLengthDescriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryScalarEvaluator(ctx, args) {
+ return new AbstractBinaryScalarEvaluator(ctx, args, sourceLoc) {
private AMutableInt64 result = new AMutableInt64(0);
@SuppressWarnings("unchecked")
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryDescriptor.java
index 307585d..f83f092 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryDescriptor.java
@@ -60,7 +60,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractFindBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName()) {
+ return new AbstractFindBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName(), sourceLoc) {
@Override
protected int getFromOffset(IFrameTupleReference tuple) {
return 0;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryFromDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryFromDescriptor.java
index 243d344..fff7ca5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryFromDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/FindBinaryFromDescriptor.java
@@ -62,7 +62,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractFindBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName()) {
+ return new AbstractFindBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName(), sourceLoc) {
@Override
protected int getFromOffset(IFrameTupleReference tuple) throws HyracksDataException {
return ATypeHierarchy.getIntegerValue(getIdentifier().getName(), 2,
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/ParseBinaryDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/ParseBinaryDescriptor.java
index 67d7b0f..35e7fba 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/ParseBinaryDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/ParseBinaryDescriptor.java
@@ -67,7 +67,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryScalarEvaluator(ctx, args) {
+ return new AbstractBinaryScalarEvaluator(ctx, args, sourceLoc) {
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ABinary> binarySerde =
@@ -108,7 +108,7 @@
aBinary.setValue(base64Parser.getByteArray(), 0, base64Parser.getLength());
} else {
- throw new UnsupportedItemTypeException(getIdentifier(), formatTag.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, getIdentifier(), formatTag.serialize());
}
binarySerde.serialize(aBinary, dataOutput);
result.set(resultStorage);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/PrintBinaryDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/PrintBinaryDescriptor.java
index 11b68d3..c141e88 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/PrintBinaryDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/PrintBinaryDescriptor.java
@@ -66,7 +66,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractBinaryScalarEvaluator(ctx, args) {
+ return new AbstractBinaryScalarEvaluator(ctx, args, sourceLoc) {
private StringBuilder stringBuilder = new StringBuilder();
private final ByteArrayPointable byteArrayPtr = new ByteArrayPointable();
@@ -101,7 +101,7 @@
Base64Printer.printBase64Binary(byteArrayPtr.getByteArray(),
byteArrayPtr.getContentStartOffset(), lengthBinary, stringBuilder);
} else {
- throw new UnsupportedItemTypeException(getIdentifier(), arg1Tag.serialize());
+ throw new UnsupportedItemTypeException(sourceLoc, getIdentifier(), arg1Tag.serialize());
}
dataOutput.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
writer.writeUTF8(stringBuilder.toString(), dataOutput);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromDescriptor.java
index 3b07c6c..c2fcdab 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromDescriptor.java
@@ -60,7 +60,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractSubBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName()) {
+ return new AbstractSubBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName(), sourceLoc) {
@Override
protected int getSubLength(IFrameTupleReference tuple) {
return Integer.MAX_VALUE;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromToDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromToDescriptor.java
index 961edbf..a9c4c46 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromToDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/SubBinaryFromToDescriptor.java
@@ -62,7 +62,7 @@
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
- return new AbstractSubBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName()) {
+ return new AbstractSubBinaryEvaluator(ctx, args, baseOffset, getIdentifier().getName(), sourceLoc) {
@Override
protected int getSubLength(IFrameTupleReference tuple) throws HyracksDataException {
return ATypeHierarchy.getIntegerValue(getIdentifier().getName(), 2,
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java
index d641ea9..d624133 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexDescriptor.java
@@ -57,6 +57,6 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) {
- return new FieldAccessByIndexEvalFactory(args[0], args[1], recType);
+ return new FieldAccessByIndexEvalFactory(args[0], args[1], recType, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexEvalFactory.java
index d5918cb..3454c2e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByIndexEvalFactory.java
@@ -35,6 +35,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.IntegerPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
@@ -49,13 +50,15 @@
private IScalarEvaluatorFactory fieldIndexEvalFactory;
private int nullBitmapSize;
private ARecordType recordType;
+ private final SourceLocation sourceLoc;
public FieldAccessByIndexEvalFactory(IScalarEvaluatorFactory recordEvalFactory,
- IScalarEvaluatorFactory fieldIndexEvalFactory, ARecordType recordType) {
+ IScalarEvaluatorFactory fieldIndexEvalFactory, ARecordType recordType, SourceLocation sourceLoc) {
this.recordEvalFactory = recordEvalFactory;
this.fieldIndexEvalFactory = fieldIndexEvalFactory;
this.recordType = recordType;
this.nullBitmapSize = RecordUtil.computeNullBitmapSize(recordType);
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -89,15 +92,15 @@
int offset = inputArg0.getStartOffset();
if (serRecord[offset] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.FIELD_ACCESS_BY_INDEX, 0, serRecord[offset],
- ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.FIELD_ACCESS_BY_INDEX, 0,
+ serRecord[offset], ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
eval1.evaluate(tuple, inputArg1);
byte[] indexBytes = inputArg1.getByteArray();
int indexOffset = inputArg1.getStartOffset();
if (indexBytes[indexOffset] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.FIELD_ACCESS_BY_INDEX, 1, indexBytes[offset],
- ATypeTag.SERIALIZED_INT32_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.FIELD_ACCESS_BY_INDEX, 1,
+ indexBytes[offset], ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
fieldIndex = IntegerPointable.getInteger(indexBytes, indexOffset + 1);
fieldValueType = recordType.getFieldTypes()[fieldIndex];
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java
index 4312cac..acd11c7 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameDescriptor.java
@@ -41,7 +41,7 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) {
- return new FieldAccessByNameEvalFactory(args[0], args[1]);
+ return new FieldAccessByNameEvalFactory(args[0], args[1], sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java
index 2078921..774b427 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessByNameEvalFactory.java
@@ -31,6 +31,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -42,11 +43,13 @@
private IScalarEvaluatorFactory recordEvalFactory;
private IScalarEvaluatorFactory fldNameEvalFactory;
+ private final SourceLocation sourceLoc;
public FieldAccessByNameEvalFactory(IScalarEvaluatorFactory recordEvalFactory,
- IScalarEvaluatorFactory fldNameEvalFactory) {
+ IScalarEvaluatorFactory fldNameEvalFactory, SourceLocation sourceLoc) {
this.recordEvalFactory = recordEvalFactory;
this.fldNameEvalFactory = fldNameEvalFactory;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -75,7 +78,7 @@
int serRecordLen = inputArg0.getLength();
if (serRecord[serRecordOffset] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.FIELD_ACCESS_BY_NAME, 0,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.FIELD_ACCESS_BY_NAME, 0,
serRecord[serRecordOffset], ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
byte[] serFldName = inputArg1.getByteArray();
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java
index 5dd3e19..91b36cf 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedDescriptor.java
@@ -61,6 +61,6 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) {
- return new FieldAccessNestedEvalFactory(args[0], recType, fldName);
+ return new FieldAccessNestedEvalFactory(args[0], recType, fldName, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java
index 067a458..8fee257 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/FieldAccessNestedEvalFactory.java
@@ -44,6 +44,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -54,16 +55,17 @@
private static final long serialVersionUID = 1L;
- private IScalarEvaluatorFactory recordEvalFactory;
- private ARecordType recordType;
- private List<String> fieldPath;
+ private final IScalarEvaluatorFactory recordEvalFactory;
+ private final ARecordType recordType;
+ private final List<String> fieldPath;
+ private final SourceLocation sourceLoc;
public FieldAccessNestedEvalFactory(IScalarEvaluatorFactory recordEvalFactory, ARecordType recordType,
- List<String> fldName) {
+ List<String> fldName, SourceLocation sourceLoc) {
this.recordEvalFactory = recordEvalFactory;
this.recordType = recordType;
this.fieldPath = fldName;
-
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -116,8 +118,8 @@
int len = inputArg0.getLength();
if (serRecord[start] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.FIELD_ACCESS_NESTED, 0, serRecord[start],
- ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.FIELD_ACCESS_NESTED, 0,
+ serRecord[start], ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
int subFieldIndex = -1;
@@ -139,8 +141,8 @@
subType = ((AUnionType) subType).getActualType();
byte serializedTypeTag = subType.getTypeTag().serialize();
if (serializedTypeTag != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new UnsupportedTypeException(BuiltinFunctions.FIELD_ACCESS_NESTED.getName(),
- serializedTypeTag);
+ throw new UnsupportedTypeException(sourceLoc,
+ BuiltinFunctions.FIELD_ACCESS_NESTED.getName(), serializedTypeTag);
}
if (subType.getTypeTag() == ATypeTag.OBJECT) {
recTypeInfos[pathIndex].reset((ARecordType) subType);
@@ -195,7 +197,8 @@
// type check
if (pathIndex < fieldPointables.length - 1
&& serRecord[start] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new UnsupportedTypeException(BuiltinFunctions.FIELD_ACCESS_NESTED, serRecord[start]);
+ throw new UnsupportedTypeException(sourceLoc, BuiltinFunctions.FIELD_ACCESS_NESTED,
+ serRecord[start]);
}
}
@@ -229,8 +232,8 @@
return;
}
if (serRecord[start] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new UnsupportedTypeException(BuiltinFunctions.FIELD_ACCESS_NESTED.getName(),
- serRecord[start]);
+ throw new UnsupportedTypeException(sourceLoc,
+ BuiltinFunctions.FIELD_ACCESS_NESTED.getName(), serRecord[start]);
}
}
// emit the final result.
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java
index 4c07e2d..b25ba1e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueDescriptor.java
@@ -57,6 +57,6 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) {
- return new GetRecordFieldValueEvalFactory(args[0], args[1], recType);
+ return new GetRecordFieldValueEvalFactory(args[0], args[1], recType, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEvalFactory.java
index 95fb91a..53dbaad 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldValueEvalFactory.java
@@ -34,6 +34,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -46,12 +47,14 @@
private IScalarEvaluatorFactory recordEvalFactory;
private IScalarEvaluatorFactory fldNameEvalFactory;
private final ARecordType recordType;
+ private final SourceLocation sourceLoc;
public GetRecordFieldValueEvalFactory(IScalarEvaluatorFactory recordEvalFactory,
- IScalarEvaluatorFactory fldNameEvalFactory, ARecordType recordType) {
+ IScalarEvaluatorFactory fldNameEvalFactory, ARecordType recordType, SourceLocation sourceLoc) {
this.recordEvalFactory = recordEvalFactory;
this.fldNameEvalFactory = fldNameEvalFactory;
this.recordType = recordType;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -86,7 +89,7 @@
int serRecordLen = inputArg0.getLength();
if (serRecord[serRecordOffset] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.GET_RECORD_FIELD_VALUE, 0,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.GET_RECORD_FIELD_VALUE, 0,
serRecord[serRecordOffset], ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java
index 57e98d0..03c26e3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsDescriptor.java
@@ -57,6 +57,6 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) {
- return new GetRecordFieldsEvalFactory(args[0], recType);
+ return new GetRecordFieldsEvalFactory(args[0], recType, sourceLoc);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsEvalFactory.java
index 69ea1bc..16e24b4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/GetRecordFieldsEvalFactory.java
@@ -30,6 +30,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -41,10 +42,13 @@
private IScalarEvaluatorFactory recordEvalFactory;
private final ARecordType recordType;
+ private final SourceLocation sourceLoc;
- public GetRecordFieldsEvalFactory(IScalarEvaluatorFactory recordEvalFactory, ARecordType recordType) {
+ public GetRecordFieldsEvalFactory(IScalarEvaluatorFactory recordEvalFactory, ARecordType recordType,
+ SourceLocation sourceLoc) {
this.recordEvalFactory = recordEvalFactory;
this.recordType = recordType;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -68,7 +72,7 @@
int len = inputArg0.getLength();
if (data[offset] != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.GET_RECORD_FIELDS, 0, data[offset],
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.GET_RECORD_FIELDS, 0, data[offset],
ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java
index 71a8291..0edd74b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordAddFieldsDescriptor.java
@@ -147,14 +147,14 @@
// Make sure we get a valid record
byte typeTag0 = argPtr0.getByteArray()[argPtr0.getStartOffset()];
if (typeTag0 != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, typeTag0,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, typeTag0,
ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
// Make sure we get a valid list
byte typeTag1 = argPtr1.getByteArray()[argPtr1.getStartOffset()];
if (typeTag1 != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, typeTag1,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, typeTag1,
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
@@ -229,7 +229,8 @@
}
if (namePointable == null || valuePointable == null) {
- throw new InvalidDataFormatException(getIdentifier(), "fields to be added");
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ "fields to be added");
}
// Check that the field being added is a valid field
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatDescriptor.java
index 0a3ba36..401335c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatDescriptor.java
@@ -57,7 +57,7 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new RecordConcatEvalFactory(args, argTypes, false);
+ return new RecordConcatEvalFactory(args, argTypes, false, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatEvalFactory.java
index 82cc876..989f217 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatEvalFactory.java
@@ -40,6 +40,7 @@
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -56,10 +57,14 @@
private final boolean failOnArgTypeMismatch;
- RecordConcatEvalFactory(IScalarEvaluatorFactory[] args, ARecordType[] argTypes, boolean failOnArgTypeMismatch) {
+ private final SourceLocation sourceLoc;
+
+ RecordConcatEvalFactory(IScalarEvaluatorFactory[] args, ARecordType[] argTypes, boolean failOnArgTypeMismatch,
+ SourceLocation sourceLoc) {
this.args = args;
this.argTypes = argTypes;
this.failOnArgTypeMismatch = failOnArgTypeMismatch;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -161,7 +166,7 @@
returnNull = true;
} else if (typeTag != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
if (failOnArgTypeMismatch) {
- throw new TypeMismatchException(BuiltinFunctions.RECORD_CONCAT, i, typeTag,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.RECORD_CONCAT, i, typeTag,
ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
} else {
returnNull = true;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatStrictDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatStrictDescriptor.java
index 77fe301..b51f66a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatStrictDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordConcatStrictDescriptor.java
@@ -56,7 +56,7 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new RecordConcatEvalFactory(args, argTypes, true);
+ return new RecordConcatEvalFactory(args, argTypes, true, sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java
index 6f8ba29..770f5bb 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordPairsDescriptor.java
@@ -120,7 +120,7 @@
argEvaluator.evaluate(tuple, argPtr);
byte inputTypeTag = argPtr.getByteArray()[argPtr.getStartOffset()];
if (inputTypeTag != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, inputTypeTag,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, inputTypeTag,
ATypeTag.SERIALIZED_RECORD_TYPE_TAG);
}
recordVisitablePointable.set(argPtr);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java
index 909c74b..54db1e4 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsDescriptor.java
@@ -60,7 +60,8 @@
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new RecordRemoveFieldsEvalFactory(args[0], args[1], outputRecordType, inputRecType, inputListType);
+ return new RecordRemoveFieldsEvalFactory(args[0], args[1], outputRecordType, inputRecType, inputListType,
+ sourceLoc);
}
@Override
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java
index aeee36f..2d372f3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/records/RecordRemoveFieldsEvalFactory.java
@@ -44,6 +44,7 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -56,16 +57,17 @@
private ARecordType requiredRecType;
private ARecordType inputRecType;
private AOrderedListType inputListType;
+ private final SourceLocation sourceLoc;
public RecordRemoveFieldsEvalFactory(IScalarEvaluatorFactory inputRecordEvalFactory,
IScalarEvaluatorFactory removeFieldPathsFactory, ARecordType requiredRecType, ARecordType inputRecType,
- AOrderedListType inputListType) {
+ AOrderedListType inputListType, SourceLocation sourceLoc) {
this.inputRecordEvalFactory = inputRecordEvalFactory;
this.removeFieldPathsFactory = removeFieldPathsFactory;
this.requiredRecType = requiredRecType;
this.inputRecType = inputRecType;
this.inputListType = inputListType;
-
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -98,13 +100,13 @@
byte inputTypeTag0 = inputArg0.getByteArray()[inputArg0.getStartOffset()];
if (inputTypeTag0 != ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.REMOVE_FIELDS, 0, inputTypeTag0,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.REMOVE_FIELDS, 0, inputTypeTag0,
ATypeTag.SERIALIZED_INT32_TYPE_TAG);
}
byte inputTypeTag1 = inputArg1.getByteArray()[inputArg1.getStartOffset()];
if (inputTypeTag1 != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.REMOVE_FIELDS, 1, inputTypeTag1,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.REMOVE_FIELDS, 1, inputTypeTag1,
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
index 0a1bcf5..6edfb48 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
@@ -51,7 +51,7 @@
return new IScalarEvaluator() {
- protected final IntervalLogic il = new IntervalLogic();
+ protected final IntervalLogic il = new IntervalLogic(sourceLoc);
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
private DataOutput out = resultStorage.getDataOutput();
private TaggedValuePointable argPtr0 =
@@ -78,12 +78,12 @@
byte typeTag0 = argPtr0.getTag();
if (typeTag0 != ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, typeTag0,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, typeTag0,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
byte typeTag1 = argPtr0.getTag();
if (typeTag1 != ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, typeTag1,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, typeTag1,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
@@ -91,7 +91,7 @@
argPtr1.getValue(interval1);
if (typeTag0 != typeTag1) {
- throw new IncompatibleTypeException(getIdentifier(), typeTag0, typeTag1);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), typeTag0, typeTag1);
}
ABoolean res = compareIntervals(il, interval0, interval1) ? ABoolean.TRUE : ABoolean.FALSE;
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
index 38d890c..89865ca 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
@@ -95,12 +95,12 @@
try {
if (bytes0[offset0] != ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -109,7 +109,7 @@
utf8Ptr.getCharStartOffset());
if (!calInstance.validateTimeZone(timezone)) {
- throw new InvalidDataFormatException(getIdentifier(), "timezone");
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), "timezone");
}
long chronon = ADateTimeSerializerDeserializer.getChronon(bytes0, offset0 + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
index 8c09e47..b57961a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
@@ -93,12 +93,12 @@
try {
if (bytes0[offset0] != ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -106,7 +106,7 @@
int timezone = ATimeParserFactory.parseTimezonePart(bytes1, utf8Ptr.getCharStartOffset());
if (!calInstance.validateTimeZone(timezone)) {
- throw new InvalidDataFormatException(getIdentifier(), "timezone");
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(), "timezone");
}
int chronon = ATimeSerializerDeserializer.getChronon(bytes0, offset0 + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
index 3dab641..6244087 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
@@ -94,12 +94,12 @@
int offset1 = argPtr1.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
index 867d030..5ee87fa 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
@@ -111,12 +111,12 @@
int offset1 = argPtr1.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java
index cfac2e9..cc449b6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java
@@ -84,7 +84,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
long datetimeChronon = ADateTimeSerializerDeserializer.getChronon(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java
index f70a6e2..43764ce 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java
@@ -93,11 +93,11 @@
int offset1 = argPtr1.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
index 87e83d7..9e16fc3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
@@ -104,7 +104,7 @@
aDatetime.setValue(AInt64SerializerDeserializer.getLong(bytes, offset + 1));
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
index abf4016..47705a2 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
@@ -105,7 +105,7 @@
aDatetime.setValue(AInt64SerializerDeserializer.getLong(bytes, offset + 1) * 1000l);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java
index 7bb4265..59006ce 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java
@@ -94,7 +94,7 @@
chronon = ADateSerializerDeserializer.getChronon(bytes, offset + 1)
* GregorianCalendarSystem.CHRONON_OF_DAY;
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG, ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
index cb26c58..172e2e9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
@@ -83,17 +83,17 @@
int offset1 = argPtr1.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
if ((ADurationSerializerDeserializer.getYearMonth(bytes0, offset0 + 1) != 0)
|| (ADurationSerializerDeserializer.getYearMonth(bytes1, offset1 + 1) != 0)) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
index 9b29ca8..8739fe5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
@@ -84,11 +84,11 @@
int offset1 = argPtr1.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
index d8be601..7761fb8 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
@@ -85,7 +85,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
long chrononStart = AIntervalSerializerDeserializer.getIntervalStart(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
index f1987ca..b81ae06 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
@@ -100,7 +100,7 @@
aDuration.setValue(0, AInt64SerializerDeserializer.getLong(bytes, offset + 1));
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_INT8_TYPE_TAG, ATypeTag.SERIALIZED_INT16_TYPE_TAG,
ATypeTag.SERIALIZED_INT32_TYPE_TAG, ATypeTag.SERIALIZED_INT64_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java
index 9410e6d..733c349 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java
@@ -84,7 +84,7 @@
int offset = argPtr0.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
index 4bd3ede..7a15151 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
@@ -62,7 +62,7 @@
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
return new IScalarEvaluator() {
- protected final IntervalLogic il = new IntervalLogic();
+ protected final IntervalLogic il = new IntervalLogic(sourceLoc);
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
private DataOutput out = resultStorage.getDataOutput();
private TaggedValuePointable argPtr0 =
@@ -100,7 +100,8 @@
byte intervalType1 = interval1.getType();
if (intervalType0 != intervalType1) {
- throw new IncompatibleTypeException(getIdentifier(), intervalType0, intervalType1);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), intervalType0,
+ intervalType1);
}
if (il.overlaps(interval0, interval1) || il.overlappedBy(interval0, interval1)
@@ -115,10 +116,10 @@
result.set(resultStorage);
return;
} else if (type0 != ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, type0,
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, type0,
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
} else {
- throw new IncompatibleTypeException(getIdentifier(), type0, type1);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), type0, type1);
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java
index fd58d6c..03faa96 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java
@@ -81,7 +81,7 @@
byte[] bytes0 = argPtr0.getByteArray();
int offset0 = argPtr0.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
aYearMonthDuration.setMonths(ADurationSerializerDeserializer.getYearMonth(bytes0, offset0 + 1));
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalBinDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalBinDescriptor.java
index 5694c27..ac2e06a 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalBinDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalBinDescriptor.java
@@ -117,7 +117,7 @@
chrononToBin = ADateTimeSerializerDeserializer.getChronon(bytes0, offset0 + 1);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_TIME_TYPE_TAG,
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
@@ -127,7 +127,8 @@
ATypeTag type1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]);
if (type0 != type1) {
- throw new IncompatibleTypeException(getIdentifier(), bytes0[offset0], bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), bytes0[offset0],
+ bytes1[offset1]);
}
long chrononToStart = 0;
@@ -143,7 +144,7 @@
chrononToStart = ADateTimeSerializerDeserializer.getChronon(bytes1, offset1 + 1);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_TIME_TYPE_TAG,
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
@@ -169,11 +170,11 @@
+ ((totalMonths < 0 && totalMonths % yearMonth != 0) ? -1 : 0);
if (binIndex > Integer.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
if (binIndex < Integer.MIN_VALUE) {
- throw new UnderflowException(getIdentifier());
+ throw new UnderflowException(sourceLoc, getIdentifier());
}
break;
@@ -209,7 +210,7 @@
break;
case TIME:
if (yearMonth != 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
binStartChronon = DurationArithmeticOperations.addDuration(chrononToStart,
@@ -224,7 +225,7 @@
yearMonth * ((int) binIndex + 1), dayTime * (binIndex + 1), false);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_TIME_TYPE_TAG,
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
index 8f447d0..db0046c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
@@ -23,18 +23,23 @@
import org.apache.asterix.om.pointables.nonvisitor.AIntervalPointable;
import org.apache.asterix.runtime.evaluators.comparisons.ComparisonHelper;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
public class IntervalLogic implements Serializable {
private static final long serialVersionUID = 1L;
- private final ComparisonHelper ch = new ComparisonHelper();
+ private final ComparisonHelper ch;
private final transient IPointable s1 = VoidPointable.FACTORY.createPointable();
private final transient IPointable e1 = VoidPointable.FACTORY.createPointable();
private final transient IPointable s2 = VoidPointable.FACTORY.createPointable();
private final transient IPointable e2 = VoidPointable.FACTORY.createPointable();
+ public IntervalLogic(SourceLocation sourceLoc) {
+ ch = new ComparisonHelper(sourceLoc);
+ }
+
public boolean validateInterval(AIntervalPointable ip1) throws HyracksDataException {
ip1.getStart(s1);
ip1.getEnd(e1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MillisecondsFromDayTimeDurationDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MillisecondsFromDayTimeDurationDescriptor.java
index c3bf58d..8e01e11 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MillisecondsFromDayTimeDurationDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MillisecondsFromDayTimeDurationDescriptor.java
@@ -80,7 +80,7 @@
byte[] bytes = argPtr0.getByteArray();
int offset = argPtr0.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG);
}
aInt64.setValue(ADayTimeDurationSerializerDeserializer.getDayTime(bytes, offset + 1));
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MonthsFromYearMonthDurationDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MonthsFromYearMonthDurationDescriptor.java
index 3d595c3..5bfd78e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MonthsFromYearMonthDurationDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/MonthsFromYearMonthDurationDescriptor.java
@@ -81,7 +81,7 @@
int offset = argPtr0.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG);
}
aInt64.setValue(AYearMonthDurationSerializerDeserializer.getYearMonth(bytes, offset + 1));
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
index 9710e3f..c8f73b9 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/OverlapBinsDescriptor.java
@@ -125,7 +125,7 @@
intervalStart = intervalStart * GregorianCalendarSystem.CHRONON_OF_DAY;
}
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
@@ -134,7 +134,8 @@
int offset1 = argPtr1.getStartOffset();
ATypeTag type1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]);
if (intervalTypeTag != bytes1[offset1]) {
- throw new IncompatibleTypeException(getIdentifier(), intervalTypeTag, bytes1[offset1]);
+ throw new IncompatibleTypeException(sourceLoc, getIdentifier(), intervalTypeTag,
+ bytes1[offset1]);
}
long anchorTime;
@@ -150,7 +151,7 @@
anchorTime = ADateTimeSerializerDeserializer.getChronon(bytes1, offset1 + 1);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_TIME_TYPE_TAG,
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
@@ -178,11 +179,11 @@
+ ((totalMonths < 0 && totalMonths % yearMonth != 0) ? -1 : 0);
if (firstBinIndex > Integer.MAX_VALUE) {
- throw new OverflowException(getIdentifier());
+ throw new OverflowException(sourceLoc, getIdentifier());
}
if (firstBinIndex < Integer.MIN_VALUE) {
- throw new UnderflowException(getIdentifier());
+ throw new UnderflowException(sourceLoc, getIdentifier());
}
break;
@@ -195,7 +196,7 @@
+ ((totalChronon < 0 && totalChronon % dayTime != 0) ? -1 : 0);
break;
default:
- throw new TypeMismatchException(getIdentifier(), 2, bytes2[offset2],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 2, bytes2[offset2],
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG,
ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG);
}
@@ -233,7 +234,7 @@
} else if (intervalTypeTag == ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
if (yearMonth != 0) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
@@ -248,7 +249,7 @@
if (binStartChronon < 0 || binStartChronon >= GregorianCalendarSystem.CHRONON_OF_DAY) {
// avoid the case where a time bin is before 00:00:00 or no early than 24:00:00
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
@@ -272,7 +273,7 @@
}
if (binEndChronon < binStartChronon) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG);
}
}
@@ -292,7 +293,7 @@
binOffset++;
} while (binEndChronon < intervalEnd);
} else {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG, ATypeTag.SERIALIZED_TIME_TYPE_TAG,
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateDescriptor.java
index f8d5cf7..da8d732 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateDescriptor.java
@@ -104,11 +104,11 @@
int len1 = argPtr1.getLength();
if (bytes0[offset0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
@@ -136,7 +136,8 @@
formatStart += formatLength + 1;
}
if (!processSuccessfully) {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_DATE_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
aDate.setValue((int) (aInt64.getLongValue() / GregorianCalendarSystem.CHRONON_OF_DAY));
dateSerde.serialize(aDate, out);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateTimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateTimeDescriptor.java
index 8bb1a20..ab19f9e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateTimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseDateTimeDescriptor.java
@@ -96,11 +96,11 @@
int len1 = argPtr1.getLength();
if (bytes0[offset0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
utf8Ptr.set(bytes0, offset0 + 1, len0 - 1);
@@ -127,7 +127,7 @@
formatStart += formatLength + 1;
}
if (!processSuccessfully) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
aDateTime.setValue(aInt64.getLongValue());
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseTimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseTimeDescriptor.java
index 6b9488d..af85b5b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseTimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/ParseTimeDescriptor.java
@@ -96,11 +96,11 @@
int len1 = argPtr1.getLength();
if (bytes0[offset0] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
utf8Ptr.set(bytes0, offset0 + 1, len0 - 1);
@@ -127,7 +127,8 @@
formatStart += formatLength + 1;
}
if (!processSuccessfully) {
- throw new InvalidDataFormatException(getIdentifier(), ATypeTag.SERIALIZED_TIME_TYPE_TAG);
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
+ ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
aTime.setValue((int) aInt64.getLongValue());
timeSerde.serialize(aTime, out);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateDescriptor.java
index 98fe013..c0b155d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateDescriptor.java
@@ -89,11 +89,11 @@
try {
if (bytes0[offset0] != ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
long chronon = ADateSerializerDeserializer.getChronon(bytes0, offset0 + 1)
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateTimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateTimeDescriptor.java
index 5d2f088..066bef0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateTimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintDateTimeDescriptor.java
@@ -89,11 +89,11 @@
try {
if (bytes0[offset0] != ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
long chronon = ADateTimeSerializerDeserializer.getChronon(bytes0, offset0 + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintTimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintTimeDescriptor.java
index 48a5382..2ad3642 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintTimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/PrintTimeDescriptor.java
@@ -88,11 +88,11 @@
try {
if (bytes0[offset0] != ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java
index 273cba4..3010540 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java
@@ -89,7 +89,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
long datetimeChronon = ADateTimeSerializerDeserializer.getChronon(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDateInDaysDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDateInDaysDescriptor.java
index 3dc449d..a069347 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDateInDaysDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDateInDaysDescriptor.java
@@ -82,7 +82,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DATE_TYPE_TAG);
}
long dateChronon = ADateSerializerDeserializer.getChronon(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInMsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInMsDescriptor.java
index 2dc57c5..4003195 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInMsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInMsDescriptor.java
@@ -80,7 +80,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
long datetimeChronon = ADateTimeSerializerDeserializer.getChronon(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInSecsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInSecsDescriptor.java
index 34fedb6..b8adc06 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInSecsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromDatetimeInSecsDescriptor.java
@@ -86,7 +86,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != SERIALIZED_DATETIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_DATETIME_TYPE_TAG);
}
long datetimeChronon = ADateTimeSerializerDeserializer.getChronon(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromTimeInMsDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromTimeInMsDescriptor.java
index 0909764..c1932f6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromTimeInMsDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/UnixTimeFromTimeInMsDescriptor.java
@@ -82,7 +82,7 @@
int offset = argPtr.getStartOffset();
if (bytes[offset] != ATypeTag.SERIALIZED_TIME_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes[offset],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes[offset],
ATypeTag.SERIALIZED_TIME_TYPE_TAG);
}
long timeChronon = ATimeSerializerDeserializer.getChronon(bytes, offset + 1);
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDescriptor.java
index 5748956..f7407c2 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDescriptor.java
@@ -83,17 +83,17 @@
int offset1 = argPtr1.getStartOffset();
if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 0, bytes0[offset0],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 0, bytes0[offset0],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
if (bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new TypeMismatchException(getIdentifier(), 1, bytes1[offset1],
+ throw new TypeMismatchException(sourceLoc, getIdentifier(), 1, bytes1[offset1],
ATypeTag.SERIALIZED_DURATION_TYPE_TAG);
}
if ((ADurationSerializerDeserializer.getDayTime(bytes0, offset0 + 1) != 0)
|| (ADurationSerializerDeserializer.getDayTime(bytes1, offset1 + 1) != 0)) {
- throw new InvalidDataFormatException(getIdentifier(),
+ throw new InvalidDataFormatException(sourceLoc, getIdentifier(),
ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/IncompatibleTypeException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/IncompatibleTypeException.java
index 5feb87f..503958b5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/IncompatibleTypeException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/IncompatibleTypeException.java
@@ -23,19 +23,23 @@
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class IncompatibleTypeException extends RuntimeDataException {
// Incompatible input parameters, e.g., "1.0" > 1.0
- public IncompatibleTypeException(FunctionIdentifier fid, byte typeTagLeft, byte typeTagRight) {
- super(ErrorCode.TYPE_INCOMPATIBLE, fid.getName(),
+ public IncompatibleTypeException(SourceLocation sourceLoc, FunctionIdentifier fid, byte typeTagLeft,
+ byte typeTagRight) {
+ super(ErrorCode.TYPE_INCOMPATIBLE, sourceLoc, fid.getName(),
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typeTagLeft),
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typeTagRight));
}
// Incompatible input parameters, e.g., "1.0" > 1.0
- public IncompatibleTypeException(String functionName, byte typeTagLeft, byte typeTagRight) {
- super(ErrorCode.TYPE_INCOMPATIBLE, functionName, EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typeTagLeft),
+ public IncompatibleTypeException(SourceLocation sourceLoc, String functionName, byte typeTagLeft,
+ byte typeTagRight) {
+ super(ErrorCode.TYPE_INCOMPATIBLE, sourceLoc, functionName,
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typeTagLeft),
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(typeTagRight));
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java
index acb0495..3350fed 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java
@@ -23,20 +23,22 @@
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class InvalidDataFormatException extends RuntimeDataException {
- public InvalidDataFormatException(FunctionIdentifier fid, byte expectedTypeTag) {
- super(ErrorCode.INVALID_FORMAT, fid.getName(),
+ public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, byte expectedTypeTag) {
+ super(ErrorCode.INVALID_FORMAT, sourceLoc, fid.getName(),
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(expectedTypeTag));
}
- public InvalidDataFormatException(FunctionIdentifier fid, String expectedType) {
- super(ErrorCode.INVALID_FORMAT, fid.getName(), expectedType);
+ public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, String expectedType) {
+ super(ErrorCode.INVALID_FORMAT, sourceLoc, fid.getName(), expectedType);
}
- public InvalidDataFormatException(FunctionIdentifier fid, Throwable cause, byte expectedTypeTag) {
- super(ErrorCode.INVALID_FORMAT, fid.getName(), cause, expectedTypeTag);
+ public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, Throwable cause,
+ byte expectedTypeTag) {
+ super(ErrorCode.INVALID_FORMAT, sourceLoc, fid.getName(), cause, expectedTypeTag);
addSuppressed(cause);
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/OverflowException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/OverflowException.java
index 3690236..fde465d 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/OverflowException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/OverflowException.java
@@ -22,17 +22,11 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class OverflowException extends RuntimeDataException {
-
// Overflow.
- public OverflowException(FunctionIdentifier fid) {
- super(ErrorCode.OVERFLOW, fid.getName());
+ public OverflowException(SourceLocation sourceLoc, FunctionIdentifier fid) {
+ super(ErrorCode.OVERFLOW, sourceLoc, fid.getName());
}
-
- // Overflow.
- public OverflowException(String functionName) {
- super(ErrorCode.OVERFLOW, functionName);
- }
-
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java
index f6cf1c7..9fe602b 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java
@@ -26,6 +26,7 @@
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class TypeMismatchException extends RuntimeDataException {
@@ -36,9 +37,24 @@
}
// Parameter type mistmatch.
+ public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, Integer i, byte actualTypeTag,
+ byte... expectedTypeTags) {
+ super(ErrorCode.TYPE_MISMATCH, sourceLoc, fid.getName(), indexToPosition(i),
+ toExpectedTypeString(expectedTypeTags),
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
+ }
+
+ // Parameter type mistmatch.
public TypeMismatchException(String functionName, Integer i, byte actualTypeTag, byte... expectedTypeTags) {
super(ErrorCode.TYPE_MISMATCH, functionName, indexToPosition(i), toExpectedTypeString(expectedTypeTags),
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
}
+ // Parameter type mistmatch.
+ public TypeMismatchException(SourceLocation sourceLoc, String functionName, Integer i, byte actualTypeTag,
+ byte... expectedTypeTags) {
+ super(ErrorCode.TYPE_MISMATCH, sourceLoc, functionName, indexToPosition(i),
+ toExpectedTypeString(expectedTypeTags),
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
+ }
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnderflowException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnderflowException.java
index 6471cbd..27bbcaa 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnderflowException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnderflowException.java
@@ -22,17 +22,12 @@
import org.apache.asterix.common.exceptions.ErrorCode;
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnderflowException extends RuntimeDataException {
// Underflow.
- public UnderflowException(FunctionIdentifier fid) {
- super(ErrorCode.UNDERFLOW, fid.getName());
+ public UnderflowException(SourceLocation sourceLoc, FunctionIdentifier fid) {
+ super(ErrorCode.UNDERFLOW, sourceLoc, fid.getName());
}
-
- // Underflow.
- public UnderflowException(String functionName) {
- super(ErrorCode.UNDERFLOW, functionName);
- }
-
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedItemTypeException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedItemTypeException.java
index f634649..25cfe29 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedItemTypeException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedItemTypeException.java
@@ -23,16 +23,19 @@
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnsupportedItemTypeException extends RuntimeDataException {
// Unsupported item type.
- public UnsupportedItemTypeException(FunctionIdentifier fid, byte itemTypeTag) {
- super(ErrorCode.TYPE_ITEM, fid.getName(), EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag));
+ public UnsupportedItemTypeException(SourceLocation sourceLoc, FunctionIdentifier fid, byte itemTypeTag) {
+ super(ErrorCode.TYPE_ITEM, sourceLoc, fid.getName(),
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag));
}
// Unsupported item type.
- public UnsupportedItemTypeException(String functionName, byte itemTypeTag) {
- super(ErrorCode.TYPE_ITEM, functionName, EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag));
+ public UnsupportedItemTypeException(SourceLocation sourceLoc, String functionName, byte itemTypeTag) {
+ super(ErrorCode.TYPE_ITEM, sourceLoc, functionName,
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag));
}
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedTypeException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedTypeException.java
index 29b3819..32e9239 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedTypeException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/UnsupportedTypeException.java
@@ -23,12 +23,13 @@
import org.apache.asterix.common.exceptions.RuntimeDataException;
import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class UnsupportedTypeException extends RuntimeDataException {
// Unsupported input type.
- public UnsupportedTypeException(FunctionIdentifier fid, byte actualTypeTag) {
- super(ErrorCode.TYPE_UNSUPPORTED, fid.getName(),
+ public UnsupportedTypeException(SourceLocation sourceLoc, FunctionIdentifier fid, byte actualTypeTag) {
+ super(ErrorCode.TYPE_UNSUPPORTED, sourceLoc, fid.getName(),
EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
}
@@ -36,4 +37,10 @@
public UnsupportedTypeException(String funcName, byte actualTypeTag) {
super(ErrorCode.TYPE_UNSUPPORTED, funcName, EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
}
+
+ // Unsupported input type.
+ public UnsupportedTypeException(SourceLocation sourceLoc, String funcName, byte actualTypeTag) {
+ super(ErrorCode.TYPE_UNSUPPORTED, sourceLoc, funcName,
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
+ }
}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
index e237319..8b25e06 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -79,6 +79,7 @@
import org.apache.hyracks.api.dataflow.value.IMissingWriterFactory;
import org.apache.hyracks.api.dataflow.value.IPredicateEvaluatorFactoryProvider;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
public class NonTaggedDataFormat implements IDataFormat {
@@ -120,7 +121,7 @@
@SuppressWarnings("unchecked")
@Override
public IScalarEvaluatorFactory getFieldAccessEvaluatorFactory(IFunctionManager functionManager, ARecordType recType,
- List<String> fldName, int recordColumn) throws AlgebricksException {
+ List<String> fldName, int recordColumn, SourceLocation sourceLoc) throws AlgebricksException {
IScalarEvaluatorFactory recordEvalFactory = new ColumnAccessEvalFactory(recordColumn);
if (fldName.size() == 1) {
@@ -141,6 +142,7 @@
IScalarEvaluatorFactory fldIndexEvalFactory =
new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength()));
IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX);
+ fDesc.setSourceLocation(sourceLoc);
fDesc.setImmutableStates(recType);
return fDesc.createEvaluatorFactory(
new IScalarEvaluatorFactory[] { recordEvalFactory, fldIndexEvalFactory });
@@ -157,6 +159,7 @@
IScalarEvaluatorFactory fldNameEvalFactory =
new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength()));
IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_NAME);
+ fDesc.setSourceLocation(sourceLoc);
return fDesc.createEvaluatorFactory(
new IScalarEvaluatorFactory[] { recordEvalFactory, fldNameEvalFactory });
}
@@ -164,6 +167,7 @@
if (fldName.size() > 1) {
IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED);
+ fDesc.setSourceLocation(sourceLoc);
fDesc.setImmutableStates(recType, fldName);
return fDesc.createEvaluatorFactory(new IScalarEvaluatorFactory[] { recordEvalFactory });
}
@@ -174,10 +178,10 @@
@SuppressWarnings("unchecked")
@Override
public IScalarEvaluatorFactory[] createMBRFactory(IFunctionManager functionManager, ARecordType recType,
- List<String> fldName, int recordColumn, int dimension, List<String> filterFieldName, boolean isPointMBR)
- throws AlgebricksException {
+ List<String> fldName, int recordColumn, int dimension, List<String> filterFieldName, boolean isPointMBR,
+ SourceLocation sourceLoc) throws AlgebricksException {
IScalarEvaluatorFactory evalFactory =
- getFieldAccessEvaluatorFactory(functionManager, recType, fldName, recordColumn);
+ getFieldAccessEvaluatorFactory(functionManager, recType, fldName, recordColumn, sourceLoc);
int numOfFields = isPointMBR ? dimension : dimension * 2;
IScalarEvaluatorFactory[] evalFactories =
new IScalarEvaluatorFactory[numOfFields + (filterFieldName == null ? 0 : 1)];
@@ -209,7 +213,7 @@
}
if (filterFieldName != null) {
evalFactories[numOfFields] =
- getFieldAccessEvaluatorFactory(functionManager, recType, filterFieldName, recordColumn);
+ getFieldAccessEvaluatorFactory(functionManager, recType, filterFieldName, recordColumn, sourceLoc);
}
return evalFactories;
}
@@ -217,7 +221,8 @@
@SuppressWarnings("unchecked")
@Override
public Triple<IScalarEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioningEvaluatorFactory(
- IFunctionManager functionManager, ARecordType recType, List<String> fldName) throws AlgebricksException {
+ IFunctionManager functionManager, ARecordType recType, List<String> fldName, SourceLocation sourceLoc)
+ throws AlgebricksException {
String[] names = recType.getFieldNames();
int n = names.length;
if (fldName.size() > 1) {
@@ -237,6 +242,7 @@
IScalarEvaluatorFactory fldIndexEvalFactory =
new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength()));
IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_BY_INDEX);
+ fDesc.setSourceLocation(sourceLoc);
fDesc.setImmutableStates(recType);
IScalarEvaluatorFactory evalFactory = fDesc.createEvaluatorFactory(
new IScalarEvaluatorFactory[] { recordEvalFactory, fldIndexEvalFactory });
@@ -246,6 +252,7 @@
ScalarFunctionCallExpression partitionFun = new ScalarFunctionCallExpression(finfoAccess,
new MutableObject<>(new VariableReferenceExpression(METADATA_DUMMY_VAR)),
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(i)))));
+ partitionFun.setSourceLocation(sourceLoc);
return new Triple<>(evalFactory, partitionFun, recType.getFieldTypes()[i]);
}
}
@@ -261,6 +268,7 @@
throw new AlgebricksException(e);
}
IFunctionDescriptor fDesc = functionManager.lookupFunction(BuiltinFunctions.FIELD_ACCESS_NESTED);
+ fDesc.setSourceLocation(sourceLoc);
fDesc.setImmutableStates(recType, fldName);
IScalarEvaluatorFactory evalFactory =
fDesc.createEvaluatorFactory(new IScalarEvaluatorFactory[] { recordEvalFactory });
@@ -269,6 +277,7 @@
ScalarFunctionCallExpression partitionFun = new ScalarFunctionCallExpression(finfoAccess,
new MutableObject<>(new VariableReferenceExpression(METADATA_DUMMY_VAR)),
new MutableObject<>(new ConstantExpression(new AsterixConstantValue(as))));
+ partitionFun.setSourceLocation(sourceLoc);
return new Triple<>(evalFactory, partitionFun, recType.getSubFieldType(fldName));
}
throw new AlgebricksException("Could not find field " + fldName + " in the schema.");
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
index 3409e61..eaf0d9c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
@@ -35,6 +35,7 @@
import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -57,16 +58,18 @@
@Override
public IUnnestingEvaluatorFactory createUnnestingEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
- return new ScanCollectionUnnestingFunctionFactory(args[0]);
+ return new ScanCollectionUnnestingFunctionFactory(args[0], sourceLoc);
}
public static class ScanCollectionUnnestingFunctionFactory implements IUnnestingEvaluatorFactory {
private static final long serialVersionUID = 1L;
private IScalarEvaluatorFactory listEvalFactory;
+ private final SourceLocation sourceLoc;
- public ScanCollectionUnnestingFunctionFactory(IScalarEvaluatorFactory arg) {
+ public ScanCollectionUnnestingFunctionFactory(IScalarEvaluatorFactory arg, SourceLocation sourceLoc) {
this.listEvalFactory = arg;
+ this.sourceLoc = sourceLoc;
}
@Override
@@ -91,7 +94,7 @@
}
if (typeTag != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
&& typeTag != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
- throw new TypeMismatchException(BuiltinFunctions.SCAN_COLLECTION, 0, typeTag,
+ throw new TypeMismatchException(sourceLoc, BuiltinFunctions.SCAN_COLLECTION, 0, typeTag,
ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
}
listAccessor.reset(inputVal.getByteArray(), inputVal.getStartOffset());
diff --git a/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java b/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java
index 7a34648..4735c67 100644
--- a/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java
+++ b/asterixdb/asterix-test-framework/src/main/java/org/apache/asterix/testframework/context/TestCaseContext.java
@@ -202,6 +202,11 @@
return filePath;
}
+ public boolean isSourceLocationExpected(CompilationUnit cUnit) {
+ Boolean v = cUnit.isSourceLocation();
+ return v != null ? v : testSuite.isSourceLocation();
+ }
+
@Override
public String toString() {
StringBuilder sb = new StringBuilder(testCase.getFilePath());
diff --git a/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd b/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
index 7a5387c..7a4feea 100644
--- a/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
+++ b/asterixdb/asterix-test-framework/src/main/resources/Catalog.xsd
@@ -63,6 +63,14 @@
</xs:annotation>
</xs:attribute>
+ <xs:attribute name="SourceLocation" type="xs:boolean" default="false">
+ <xs:annotation>
+ <xs:documentation>
+ whether to expect a source location in error messages
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+
</xs:complexType>
<xs:unique name="unique-test-group">
@@ -160,6 +168,17 @@
</xs:annotation>
</xs:element>
+ <!-- Whether the source location is expected in the error message -->
+
+ <xs:element name="source-location" type="xs:boolean" minOccurs="0">
+ <xs:annotation>
+ <xs:documentation>
+ Whether to expect a source location in the error message
+ (default is defined by the test-suite element)
+ </xs:documentation>
+ </xs:annotation>
+ </xs:element>
+
</xs:sequence>
<!-- This name is always equal to the name of the test case -->
diff --git a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntimeFactory.java b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntimeFactory.java
index bbfde38..708e8dc 100644
--- a/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntimeFactory.java
+++ b/asterixdb/asterix-transactions/src/main/java/org/apache/asterix/transaction/management/runtime/CommitRuntimeFactory.java
@@ -21,12 +21,12 @@
import org.apache.asterix.common.api.IJobEventListenerFactory;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.job.IJobletEventListenerFactory;
-public class CommitRuntimeFactory implements IPushRuntimeFactory {
+public class CommitRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
index 54292c3..46e80be 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
@@ -22,6 +22,7 @@
import org.apache.hyracks.api.exceptions.ErrorCode;
import org.apache.hyracks.api.exceptions.IFormattedException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.util.ErrorMessageUtil;
public class AlgebricksException extends Exception implements IFormattedException {
@@ -32,15 +33,17 @@
private final int errorCode;
private final Serializable[] params;
private final String nodeId;
+ private final SourceLocation sourceLoc;
@SuppressWarnings("squid:S1165") // exception class not final
private transient CachedMessage msgCache;
- public AlgebricksException(String component, int errorCode, String message, Throwable cause, String nodeId,
- Serializable... params) {
+ public AlgebricksException(String component, int errorCode, String message, Throwable cause,
+ SourceLocation sourceLoc, String nodeId, Serializable... params) {
super(message, cause);
this.component = component;
this.errorCode = errorCode;
+ this.sourceLoc = sourceLoc;
this.nodeId = nodeId;
this.params = params;
}
@@ -50,7 +53,7 @@
*/
@Deprecated
public AlgebricksException(String message) {
- this(ErrorMessageUtil.NONE, UNKNOWN, message, null, (Serializable[]) null);
+ this(ErrorMessageUtil.NONE, UNKNOWN, message, null, null, (Serializable[]) null);
}
/**
@@ -66,32 +69,60 @@
*/
@Deprecated
public AlgebricksException(String message, Throwable cause) {
- this(ErrorMessageUtil.NONE, UNKNOWN, message, cause, (String) null);
+ this(ErrorMessageUtil.NONE, UNKNOWN, message, cause, null, (Serializable[]) null);
+ }
+
+ public AlgebricksException(String component, int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ this(component, errorCode, null, null, sourceLoc, null, params);
}
public AlgebricksException(String component, int errorCode, Serializable... params) {
- this(component, errorCode, null, null, null, params);
+ this(component, errorCode, null, null, null, null, params);
+ }
+
+ public AlgebricksException(Throwable cause, int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ this(ErrorMessageUtil.NONE, errorCode, cause.getMessage(), cause, sourceLoc, null, params);
}
public AlgebricksException(Throwable cause, int errorCode, Serializable... params) {
- this(ErrorMessageUtil.NONE, errorCode, cause.getMessage(), cause, null, params);
+ this(ErrorMessageUtil.NONE, errorCode, cause.getMessage(), cause, null, null, params);
+ }
+
+ public AlgebricksException(String component, int errorCode, String message, SourceLocation sourceLoc,
+ Serializable... params) {
+ this(component, errorCode, message, null, sourceLoc, null, params);
}
public AlgebricksException(String component, int errorCode, String message, Serializable... params) {
- this(component, errorCode, message, null, null, params);
+ this(component, errorCode, message, null, null, null, params);
+ }
+
+ public AlgebricksException(String component, int errorCode, Throwable cause, SourceLocation sourceLoc,
+ Serializable... params) {
+ this(component, errorCode, cause.getMessage(), cause, sourceLoc, null, params);
}
public AlgebricksException(String component, int errorCode, Throwable cause, Serializable... params) {
- this(component, errorCode, cause.getMessage(), cause, null, params);
+ this(component, errorCode, cause.getMessage(), cause, null, null, params);
+ }
+
+ public AlgebricksException(String component, int errorCode, String message, Throwable cause,
+ SourceLocation sourceLoc, Serializable... params) {
+ this(component, errorCode, message, cause, sourceLoc, null, params);
}
public AlgebricksException(String component, int errorCode, String message, Throwable cause,
Serializable... params) {
- this(component, errorCode, message, cause, null, params);
+ this(component, errorCode, message, cause, null, null, params);
+ }
+
+ public static AlgebricksException create(int errorCode, SourceLocation sourceLoc, Serializable... params) {
+ return new AlgebricksException(ErrorCode.HYRACKS, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc,
+ params);
}
public static AlgebricksException create(int errorCode, Serializable... params) {
- return new AlgebricksException(ErrorCode.HYRACKS, errorCode, ErrorCode.getErrorMessage(errorCode), params);
+ return create(errorCode, null, params);
}
@Override
@@ -112,11 +143,15 @@
return nodeId;
}
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+
@Override
public String getMessage() {
if (msgCache == null) {
- msgCache =
- new CachedMessage(ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), params));
+ msgCache = new CachedMessage(
+ ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), sourceLoc, params));
}
return msgCache.message;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/NotImplementedException.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/NotImplementedException.java
index 16bc73e..d308969 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/NotImplementedException.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/NotImplementedException.java
@@ -22,18 +22,10 @@
private static final long serialVersionUID = 2L;
public NotImplementedException() {
- System.err.println("Not implemented.");
+ super("Not implemented.");
}
public NotImplementedException(String message) {
super(message);
}
-
- public NotImplementedException(Throwable cause) {
- super(cause);
- }
-
- public NotImplementedException(String message, Throwable cause) {
- super(message, cause);
- }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalExpression.java
index 7e10203..1de7e3c 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalExpression.java
@@ -27,6 +27,7 @@
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionVisitor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public interface ILogicalExpression {
@@ -73,4 +74,6 @@
public abstract ILogicalExpression cloneExpression();
public boolean isFunctional();
+
+ SourceLocation getSourceLocation();
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalOperator.java
index dd7e065..6bd0d02 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/base/ILogicalOperator.java
@@ -33,6 +33,7 @@
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public interface ILogicalOperator {
@@ -103,4 +104,6 @@
* Indicates whether the expressions used by this operator must be variable reference expressions.
*/
public boolean requiresVariableReferenceExpressions();
+
+ SourceLocation getSourceLocation();
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractLogicalExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractLogicalExpression.java
index 0717c0e..de4d5ac 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractLogicalExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AbstractLogicalExpression.java
@@ -25,9 +25,12 @@
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractLogicalExpression implements ILogicalExpression {
+ protected SourceLocation sourceLoc;
+
@Override
public void getConstraintsAndEquivClasses(Collection<FunctionalDependency> fds,
Map<LogicalVariable, EquivalenceClass> equivClasses) {
@@ -45,4 +48,12 @@
return true;
}
+ @Override
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AggregateFunctionCallExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AggregateFunctionCallExpression.java
index 8fca47c..bdd820e 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AggregateFunctionCallExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/AggregateFunctionCallExpression.java
@@ -59,6 +59,7 @@
AggregateFunctionCallExpression fun = new AggregateFunctionCallExpression(finfo, twoStep, clonedArgs);
fun.setStepTwoAggregate(stepTwoAggregate);
fun.setStepOneAggregate(stepOneAggregate);
+ fun.setSourceLocation(sourceLoc);
return fun;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ConstantExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ConstantExpression.java
index 689d51c..42ff3c0 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ConstantExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ConstantExpression.java
@@ -174,6 +174,7 @@
annotationMap.forEach((key, value1) -> m.put(key, value1.copy()));
ConstantExpression c = new ConstantExpression(value);
c.annotationMap = m;
+ c.setSourceLocation(sourceLoc);
return c;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ScalarFunctionCallExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ScalarFunctionCallExpression.java
index 6308636..f8b25e2 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ScalarFunctionCallExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/ScalarFunctionCallExpression.java
@@ -47,6 +47,7 @@
ScalarFunctionCallExpression funcExpr = new ScalarFunctionCallExpression(finfo, clonedArgs);
funcExpr.getAnnotations().putAll(cloneAnnotations());
funcExpr.setOpaqueParameters(this.getOpaqueParameters());
+ funcExpr.setSourceLocation(sourceLoc);
return funcExpr;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/StatefulFunctionCallExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/StatefulFunctionCallExpression.java
index 661c389..0d310f7 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/StatefulFunctionCallExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/StatefulFunctionCallExpression.java
@@ -52,7 +52,10 @@
public StatefulFunctionCallExpression cloneExpression() {
cloneAnnotations();
List<Mutable<ILogicalExpression>> clonedArgs = cloneArguments();
- return new StatefulFunctionCallExpression(finfo, propertiesComputer, clonedArgs);
+ StatefulFunctionCallExpression clonedExpr =
+ new StatefulFunctionCallExpression(finfo, propertiesComputer, clonedArgs);
+ clonedExpr.setSourceLocation(sourceLoc);
+ return clonedExpr;
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/UnnestingFunctionCallExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/UnnestingFunctionCallExpression.java
index ac539ec..3dad669 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/UnnestingFunctionCallExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/UnnestingFunctionCallExpression.java
@@ -50,6 +50,7 @@
UnnestingFunctionCallExpression ufce = new UnnestingFunctionCallExpression(finfo, clonedArgs);
ufce.setReturnsUniqueValues(returnsUniqueValues);
ufce.setOpaqueParameters(this.getOpaqueParameters());
+ ufce.setSourceLocation(sourceLoc);
return ufce;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/VariableReferenceExpression.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/VariableReferenceExpression.java
index c1342cc..1c7da34 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/VariableReferenceExpression.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/expressions/VariableReferenceExpression.java
@@ -95,7 +95,9 @@
@Override
public AbstractLogicalExpression cloneExpression() {
- return new VariableReferenceExpression(variable);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(variable);
+ varRef.setSourceLocation(sourceLoc);
+ return varRef;
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
index 4686f32..1dbf15e 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
@@ -40,6 +40,7 @@
import org.apache.hyracks.algebricks.core.algebra.typing.OpRefTypeEnvPointer;
import org.apache.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment;
import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractLogicalOperator implements ILogicalOperator {
@@ -69,6 +70,8 @@
protected final List<Mutable<ILogicalOperator>> inputs;
protected List<LogicalVariable> schema;
+ private SourceLocation sourceLoc;
+
public AbstractLogicalOperator() {
inputs = new ArrayList<>();
}
@@ -195,4 +198,13 @@
public boolean requiresVariableReferenceExpressions() {
return true;
}
+
+ @Override
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalExpressionDeepCopyWithNewVariablesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalExpressionDeepCopyWithNewVariablesVisitor.java
index 24c5162..6be8ee0 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalExpressionDeepCopyWithNewVariablesVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalExpressionDeepCopyWithNewVariablesVisitor.java
@@ -30,6 +30,7 @@
import org.apache.hyracks.algebricks.core.algebra.base.IVariableContext;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractLogicalExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
@@ -80,6 +81,10 @@
dest.setOpaqueParameters(newOpaqueParameters);
}
+ private void copySourceLocation(ILogicalExpression src, AbstractLogicalExpression dest) {
+ dest.setSourceLocation(src.getSourceLocation());
+ }
+
public MutableObject<ILogicalExpression> deepCopyExpressionReference(Mutable<ILogicalExpression> exprRef)
throws AlgebricksException {
return new MutableObject<>(deepCopy(exprRef.getValue()));
@@ -104,12 +109,15 @@
exprCopy.setStepTwoAggregate(expr.getStepTwoAggregate());
deepCopyAnnotations(expr, exprCopy);
deepCopyOpaqueParameters(expr, exprCopy);
+ copySourceLocation(expr, exprCopy);
return exprCopy;
}
@Override
public ILogicalExpression visitConstantExpression(ConstantExpression expr, Void arg) throws AlgebricksException {
- return new ConstantExpression(expr.getValue());
+ ConstantExpression exprCopy = new ConstantExpression(expr.getValue());
+ copySourceLocation(expr, exprCopy);
+ return exprCopy;
}
@Override
@@ -119,6 +127,7 @@
deepCopyExpressionReferenceList(expr.getArguments()));
deepCopyAnnotations(expr, exprCopy);
deepCopyOpaqueParameters(expr, exprCopy);
+ copySourceLocation(expr, exprCopy);
return exprCopy;
}
@@ -130,6 +139,7 @@
expr.getPropertiesComputer(), deepCopyExpressionReferenceList(expr.getArguments()));
deepCopyAnnotations(expr, exprCopy);
deepCopyOpaqueParameters(expr, exprCopy);
+ copySourceLocation(expr, exprCopy);
return exprCopy;
}
@@ -140,6 +150,7 @@
deepCopyExpressionReferenceList(expr.getArguments()));
deepCopyAnnotations(expr, exprCopy);
deepCopyOpaqueParameters(expr, exprCopy);
+ copySourceLocation(expr, exprCopy);
return exprCopy;
}
@@ -153,13 +164,17 @@
LogicalVariable givenVarReplacement = inVarMapping.get(var);
if (givenVarReplacement != null) {
outVarMapping.put(var, givenVarReplacement);
- return new VariableReferenceExpression(givenVarReplacement);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(givenVarReplacement);
+ copySourceLocation(expr, varRef);
+ return varRef;
}
LogicalVariable varCopy = outVarMapping.get(var);
if (varCopy == null) {
varCopy = varContext.newVar();
outVarMapping.put(var, varCopy);
}
- return new VariableReferenceExpression(varCopy);
+ VariableReferenceExpression varRef = new VariableReferenceExpression(varCopy);
+ copySourceLocation(expr, varRef);
+ return varRef;
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
index d6062ee..e0210cc 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java
@@ -146,6 +146,10 @@
dest.getAnnotations().putAll(src.getAnnotations());
}
+ private void copySourceLocation(ILogicalOperator src, AbstractLogicalOperator dest) {
+ dest.setSourceLocation(src.getSourceLocation());
+ }
+
public ILogicalOperator deepCopy(ILogicalOperator op) throws AlgebricksException {
// The deep copy call outside this visitor always has a null argument.
return deepCopy(op, null);
@@ -269,6 +273,7 @@
AbstractLogicalOperator opCopy) throws AlgebricksException {
deepCopyInputs(op, opCopy, arg);
copyAnnotations(op, opCopy);
+ copySourceLocation(op, opCopy);
opCopy.setExecutionMode(op.getExecutionMode());
}
@@ -337,6 +342,7 @@
@Override
public ILogicalOperator visitEmptyTupleSourceOperator(EmptyTupleSourceOperator op, ILogicalOperator arg) {
EmptyTupleSourceOperator opCopy = new EmptyTupleSourceOperator();
+ copySourceLocation(op, opCopy);
opCopy.setExecutionMode(op.getExecutionMode());
return opCopy;
}
@@ -371,6 +377,7 @@
deepCopyOperatorReference(op.getInputs().get(0), arg),
deepCopyOperatorReference(op.getInputs().get(1), arg));
copyAnnotations(op, opCopy);
+ copySourceLocation(op, opCopy);
opCopy.setExecutionMode(op.getExecutionMode());
return opCopy;
}
@@ -383,6 +390,7 @@
deepCopyOperatorReference(op.getInputs().get(0), arg),
deepCopyOperatorReference(op.getInputs().get(1), arg));
copyAnnotations(op, opCopy);
+ copySourceLocation(op, opCopy);
opCopy.setExecutionMode(op.getExecutionMode());
return opCopy;
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java
index 4a177f7..0602258 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java
@@ -81,6 +81,7 @@
int[] projectionList = JobGenHelper.projectAllVariables(opSchema);
UnnestRuntimeFactory unnestRuntime = new UnnestRuntimeFactory(outCol, unnestingFactory, projectionList,
unnest.getPositionWriter(), leftOuter, context.getMissingWriterFactory());
+ unnestRuntime.setSourceLocation(unnest.getSourceLocation());
RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
builder.contributeMicroOperator(unnest, unnestRuntime, recDesc);
ILogicalOperator src = unnest.getInputs().get(0).getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AggregatePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AggregatePOperator.java
index 147d5cc..2736b6f 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AggregatePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AggregatePOperator.java
@@ -102,6 +102,7 @@
}
AggregateRuntimeFactory runtime = new AggregateRuntimeFactory(aggFactories);
+ runtime.setSourceLocation(aggOp.getSourceLocation());
// contribute one Asterix framewriter
RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java
index ccd27f4..2df5a4e 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java
@@ -90,6 +90,7 @@
AssignRuntimeFactory runtime =
new AssignRuntimeFactory(outColumns, evalFactories, projectionList, flushFramesRapidly);
+ runtime.setSourceLocation(assign.getSourceLocation());
// contribute one Asterix framewriter
RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
@@ -103,7 +104,6 @@
// and contribute one edge from its child
ILogicalOperator src = assign.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, assign, 0);
-
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
index 2204637..bb0f08b 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/BulkloadPOperator.java
@@ -107,8 +107,10 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints =
mp.getInsertRuntime(dataSource, propagatedSchema, typeEnv, primaryKeys, payload,
additionalFilteringKeys, additionalNonFilterVars, inputDesc, context, spec, true);
- builder.contributeHyracksOperator(insertDeleteOp, runtimeAndConstraints.first);
- builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(insertDeleteOp.getSourceLocation());
+ builder.contributeHyracksOperator(insertDeleteOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, runtimeAndConstraints.second);
ILogicalOperator src = insertDeleteOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, insertDeleteOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
index e8c5c64..3ddb233 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
@@ -119,9 +119,11 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> p = mp.getScannerRuntime(dataSource, vars, projectVars,
scan.isProjectPushed(), scan.getMinFilterVars(), scan.getMaxFilterVars(), tupleFilterFactory,
scan.getOutputLimit(), opSchema, typeEnv, context, builder.getJobSpec(), implConfig);
- builder.contributeHyracksOperator(scan, p.first);
+ IOperatorDescriptor opDesc = p.first;
+ opDesc.setSourceLocation(scan.getSourceLocation());
+ builder.contributeHyracksOperator(scan, opDesc);
if (p.second != null) {
- builder.contributeAlgebricksPartitionConstraint(p.first, p.second);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, p.second);
}
ILogicalOperator srcExchange = scan.getInputs().get(0).getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DistributeResultPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DistributeResultPOperator.java
index 178f2a1..34dc0d4 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DistributeResultPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DistributeResultPOperator.java
@@ -105,8 +105,10 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints =
mp.getResultHandleRuntime(resultOp.getDataSink(), columns, pf, inputDesc, true, spec);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(resultOp.getSourceLocation());
+ builder.contributeHyracksOperator(resultOp, opDesc);
- builder.contributeHyracksOperator(resultOp, runtimeAndConstraints.first);
ILogicalOperator src = resultOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, resultOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/EmptyTupleSourcePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/EmptyTupleSourcePOperator.java
index 0718d13..502d022 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/EmptyTupleSourcePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/EmptyTupleSourcePOperator.java
@@ -63,6 +63,7 @@
IOperatorSchema propagatedSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema)
throws AlgebricksException {
EmptyTupleSourceRuntimeFactory runtime = new EmptyTupleSourceRuntimeFactory();
+ runtime.setSourceLocation(op.getSourceLocation());
RecordDescriptor recDesc = new RecordDescriptor(new ISerializerDeserializer[] {});
builder.contributeMicroOperator(op, runtime, recDesc);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java
index 5ee967d..edc9d08 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ExternalGroupByPOperator.java
@@ -62,6 +62,7 @@
import org.apache.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
+import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.HashSpillableTableFactory;
import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.external.ExternalGroupOperatorDescriptor;
@@ -253,8 +254,10 @@
merges[i] = expressionRuntimeProvider.createSerializableAggregateFunctionFactory(mergeFun, aggOpInputEnv,
localInputSchemas, context);
}
- IAggregatorDescriptorFactory aggregatorFactory = new SerializableAggregatorDescriptorFactory(aff);
- IAggregatorDescriptorFactory mergeFactory = new SerializableAggregatorDescriptorFactory(merges);
+ AbstractAggregatorDescriptorFactory aggregatorFactory = new SerializableAggregatorDescriptorFactory(aff);
+ aggregatorFactory.setSourceLocation(gby.getSourceLocation());
+ AbstractAggregatorDescriptorFactory mergeFactory = new SerializableAggregatorDescriptorFactory(merges);
+ mergeFactory.setSourceLocation(gby.getSourceLocation());
INormalizedKeyComputerFactory normalizedKeyFactory =
JobGenHelper.variablesToAscNormalizedKeyComputerFactory(gbyCols, aggOpInputEnv, context);
@@ -268,6 +271,7 @@
ExternalGroupOperatorDescriptor gbyOpDesc = new ExternalGroupOperatorDescriptor(spec, hashTableSize, inputSize,
keyAndDecFields, frameLimit, comparatorFactories, normalizedKeyFactory, aggregatorFactory, mergeFactory,
recordDescriptor, recordDescriptor, new HashSpillableTableFactory(hashFunctionFactories));
+ gbyOpDesc.setSourceLocation(gby.getSourceLocation());
contributeOpDesc(builder, gby, gbyOpDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java
index 301b8f1..d06dde5 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java
@@ -152,6 +152,7 @@
opDesc = generateHashJoinRuntime(context, inputSchemas, keysLeft, keysRight, hashFunFactories,
comparatorFactories, predEvaluatorFactory, recDescriptor, spec);
}
+ opDesc.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
ILogicalOperator src1 = op.getInputs().get(0).getValue();
@@ -164,68 +165,49 @@
int[] keysLeft, int[] keysRight, IBinaryHashFunctionFactory[] hashFunFactories,
IBinaryComparatorFactory[] comparatorFactories, IPredicateEvaluatorFactory predEvaluatorFactory,
RecordDescriptor recDescriptor, IOperatorDescriptorRegistry spec) throws AlgebricksException {
- IOperatorDescriptor opDesc;
- try {
- switch (kind) {
- case INNER:
- opDesc = new HybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(), maxInputBuildSizeInFrames,
- aveRecordsPerFrame, getFudgeFactor(), keysLeft, keysRight, hashFunFactories,
- comparatorFactories, recDescriptor, predEvaluatorFactory, false, null);
- break;
- case LEFT_OUTER:
- IMissingWriterFactory[] nonMatchWriterFactories =
- new IMissingWriterFactory[inputSchemas[1].getSize()];
- for (int j = 0; j < nonMatchWriterFactories.length; j++) {
- nonMatchWriterFactories[j] = context.getMissingWriterFactory();
- }
- opDesc = new HybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(), maxInputBuildSizeInFrames,
- aveRecordsPerFrame, getFudgeFactor(), keysLeft, keysRight, hashFunFactories,
- comparatorFactories, recDescriptor, predEvaluatorFactory, true, nonMatchWriterFactories);
- break;
- default:
- throw new NotImplementedException();
- }
- } catch (HyracksDataException e) {
- throw new AlgebricksException(e);
+ switch (kind) {
+ case INNER:
+ return new HybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(), maxInputBuildSizeInFrames,
+ aveRecordsPerFrame, getFudgeFactor(), keysLeft, keysRight, hashFunFactories,
+ comparatorFactories, recDescriptor, predEvaluatorFactory, false, null);
+ case LEFT_OUTER:
+ IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()];
+ for (int j = 0; j < nonMatchWriterFactories.length; j++) {
+ nonMatchWriterFactories[j] = context.getMissingWriterFactory();
+ }
+ return new HybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(), maxInputBuildSizeInFrames,
+ aveRecordsPerFrame, getFudgeFactor(), keysLeft, keysRight, hashFunFactories,
+ comparatorFactories, recDescriptor, predEvaluatorFactory, true, nonMatchWriterFactories);
+ default:
+ throw new NotImplementedException();
}
- return opDesc;
}
private IOperatorDescriptor generateOptimizedHashJoinRuntime(JobGenContext context, IOperatorSchema[] inputSchemas,
int[] keysLeft, int[] keysRight, IBinaryHashFunctionFamily[] hashFunFamilies,
IBinaryComparatorFactory[] comparatorFactories, IPredicateEvaluatorFactory predEvaluatorFactory,
RecordDescriptor recDescriptor, IOperatorDescriptorRegistry spec) throws AlgebricksException {
- IOperatorDescriptor opDesc;
- try {
- switch (kind) {
- case INNER:
- opDesc = new OptimizedHybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(),
- maxInputBuildSizeInFrames, getFudgeFactor(), keysLeft, keysRight, hashFunFamilies,
- comparatorFactories, recDescriptor,
- new JoinMultiComparatorFactory(comparatorFactories, keysLeft, keysRight),
- new JoinMultiComparatorFactory(comparatorFactories, keysRight, keysLeft),
- predEvaluatorFactory);
- break;
- case LEFT_OUTER:
- IMissingWriterFactory[] nonMatchWriterFactories =
- new IMissingWriterFactory[inputSchemas[1].getSize()];
- for (int j = 0; j < nonMatchWriterFactories.length; j++) {
- nonMatchWriterFactories[j] = context.getMissingWriterFactory();
- }
- opDesc = new OptimizedHybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(),
- maxInputBuildSizeInFrames, getFudgeFactor(), keysLeft, keysRight, hashFunFamilies,
- comparatorFactories, recDescriptor,
- new JoinMultiComparatorFactory(comparatorFactories, keysLeft, keysRight),
- new JoinMultiComparatorFactory(comparatorFactories, keysRight, keysLeft),
- predEvaluatorFactory, true, nonMatchWriterFactories);
- break;
- default:
- throw new NotImplementedException();
- }
- } catch (HyracksDataException e) {
- throw new AlgebricksException(e);
+ switch (kind) {
+ case INNER:
+ return new OptimizedHybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(),
+ maxInputBuildSizeInFrames, getFudgeFactor(), keysLeft, keysRight, hashFunFamilies,
+ comparatorFactories, recDescriptor,
+ new JoinMultiComparatorFactory(comparatorFactories, keysLeft, keysRight),
+ new JoinMultiComparatorFactory(comparatorFactories, keysRight, keysLeft), predEvaluatorFactory);
+ case LEFT_OUTER:
+ IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()];
+ for (int j = 0; j < nonMatchWriterFactories.length; j++) {
+ nonMatchWriterFactories[j] = context.getMissingWriterFactory();
+ }
+ return new OptimizedHybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(),
+ maxInputBuildSizeInFrames, getFudgeFactor(), keysLeft, keysRight, hashFunFamilies,
+ comparatorFactories, recDescriptor,
+ new JoinMultiComparatorFactory(comparatorFactories, keysLeft, keysRight),
+ new JoinMultiComparatorFactory(comparatorFactories, keysRight, keysLeft), predEvaluatorFactory,
+ true, nonMatchWriterFactories);
+ default:
+ throw new NotImplementedException();
}
- return opDesc;
}
@Override
@@ -264,7 +246,7 @@
}
/**
- * {@ ITuplePairComparatorFactory} implementation for optimized hybrid hash join.
+ * {@code ITuplePairComparatorFactory} implementation for optimized hybrid hash join.
*/
class JoinMultiComparatorFactory implements ITuplePairComparatorFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java
index 9c29c53..580d8e1 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java
@@ -105,15 +105,14 @@
RecordDescriptor recDescriptor =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
IOperatorDescriptorRegistry spec = builder.getJobSpec();
- IOperatorDescriptor opDesc = null;
+ IOperatorDescriptor opDesc;
switch (kind) {
- case INNER: {
+ case INNER:
opDesc = new InMemoryHashJoinOperatorDescriptor(spec, keysLeft, keysRight, hashFunFactories,
comparatorFactories, recDescriptor, tableSize, predEvaluatorFactory, memSizeInFrames);
break;
- }
- case LEFT_OUTER: {
+ case LEFT_OUTER:
IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()];
for (int j = 0; j < nonMatchWriterFactories.length; j++) {
nonMatchWriterFactories[j] = context.getMissingWriterFactory();
@@ -122,11 +121,11 @@
comparatorFactories, predEvaluatorFactory, recDescriptor, true, nonMatchWriterFactories,
tableSize, memSizeInFrames);
break;
- }
- default: {
+ default:
throw new NotImplementedException();
- }
}
+
+ opDesc.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
ILogicalOperator src1 = op.getInputs().get(0).getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexBulkloadPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexBulkloadPOperator.java
index fa0fb1a..6512700 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexBulkloadPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexBulkloadPOperator.java
@@ -135,8 +135,10 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints =
mp.getIndexInsertRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv, primaryKeys,
secondaryKeys, additionalFilteringKeys, filterExpr, inputDesc, context, spec, true);
- builder.contributeHyracksOperator(indexInsertDeleteOp, runtimeAndConstraints.first);
- builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(indexInsertDeleteOp.getSourceLocation());
+ builder.contributeHyracksOperator(indexInsertDeleteOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, runtimeAndConstraints.second);
ILogicalOperator src = indexInsertDeleteOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, indexInsertDeleteOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexInsertDeleteUpsertPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexInsertDeleteUpsertPOperator.java
index a66db35..92fa86d 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexInsertDeleteUpsertPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IndexInsertDeleteUpsertPOperator.java
@@ -118,19 +118,30 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints = null;
IVariableTypeEnvironment typeEnv = context.getTypeEnvironment(insertDeleteUpsertOp);
- if (insertDeleteUpsertOp.getOperation() == Kind.INSERT) {
- runtimeAndConstraints = mp.getIndexInsertRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv,
- primaryKeys, secondaryKeys, additionalFilteringKeys, filterExpr, inputDesc, context, spec, false);
- } else if (insertDeleteUpsertOp.getOperation() == Kind.DELETE) {
- runtimeAndConstraints = mp.getIndexDeleteRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv,
- primaryKeys, secondaryKeys, additionalFilteringKeys, filterExpr, inputDesc, context, spec);
- } else if (insertDeleteUpsertOp.getOperation() == Kind.UPSERT) {
- runtimeAndConstraints = mp.getIndexUpsertRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv,
- primaryKeys, secondaryKeys, additionalFilteringKeys, filterExpr, prevSecondaryKeys,
- prevAdditionalFilteringKey, inputDesc, context, spec);
+ Kind operation = insertDeleteUpsertOp.getOperation();
+ switch (operation) {
+ case INSERT:
+ runtimeAndConstraints =
+ mp.getIndexInsertRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv, primaryKeys,
+ secondaryKeys, additionalFilteringKeys, filterExpr, inputDesc, context, spec, false);
+ break;
+ case DELETE:
+ runtimeAndConstraints =
+ mp.getIndexDeleteRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv, primaryKeys,
+ secondaryKeys, additionalFilteringKeys, filterExpr, inputDesc, context, spec);
+ break;
+ case UPSERT:
+ runtimeAndConstraints = mp.getIndexUpsertRuntime(dataSourceIndex, propagatedSchema, inputSchemas,
+ typeEnv, primaryKeys, secondaryKeys, additionalFilteringKeys, filterExpr, prevSecondaryKeys,
+ prevAdditionalFilteringKey, inputDesc, context, spec);
+ break;
+ default:
+ throw new AlgebricksException("Unsupported Operation " + operation);
}
- builder.contributeHyracksOperator(insertDeleteUpsertOp, runtimeAndConstraints.first);
- builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(insertDeleteUpsertOp.getSourceLocation());
+ builder.contributeHyracksOperator(insertDeleteUpsertOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, runtimeAndConstraints.second);
ILogicalOperator src = insertDeleteUpsertOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, insertDeleteUpsertOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
index 6ded4a3..927fb66 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InsertDeleteUpsertPOperator.java
@@ -106,22 +106,28 @@
RecordDescriptor inputDesc = JobGenHelper.mkRecordDescriptor(
context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas[0], context);
- Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints = null;
- if (operation == Kind.INSERT) {
- runtimeAndConstraints = mp.getInsertRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
- additionalFilteringKeys, additionalNonFilteringFields, inputDesc, context, spec, false);
- } else if (operation == Kind.DELETE) {
- runtimeAndConstraints = mp.getDeleteRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
- additionalFilteringKeys, inputDesc, context, spec);
- } else if (operation == Kind.UPSERT) {
- runtimeAndConstraints = mp.getUpsertRuntime(dataSource, inputSchemas[0], typeEnv, keys, payload,
- additionalFilteringKeys, additionalNonFilteringFields, inputDesc, context, spec);
- } else {
- throw new AlgebricksException("Unsupported Operation " + operation);
+ Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints;
+ switch (operation) {
+ case INSERT:
+ runtimeAndConstraints = mp.getInsertRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
+ additionalFilteringKeys, additionalNonFilteringFields, inputDesc, context, spec, false);
+ break;
+ case DELETE:
+ runtimeAndConstraints = mp.getDeleteRuntime(dataSource, propagatedSchema, typeEnv, keys, payload,
+ additionalFilteringKeys, inputDesc, context, spec);
+ break;
+ case UPSERT:
+ runtimeAndConstraints = mp.getUpsertRuntime(dataSource, inputSchemas[0], typeEnv, keys, payload,
+ additionalFilteringKeys, additionalNonFilteringFields, inputDesc, context, spec);
+ break;
+ default:
+ throw new AlgebricksException("Unsupported Operation " + operation);
}
- builder.contributeHyracksOperator(insertDeleteOp, runtimeAndConstraints.first);
- builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(insertDeleteOp.getSourceLocation());
+ builder.contributeHyracksOperator(insertDeleteOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, runtimeAndConstraints.second);
ILogicalOperator src = insertDeleteOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, insertDeleteOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IntersectPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IntersectPOperator.java
index 1d36cc0..544c546 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IntersectPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/IntersectPOperator.java
@@ -151,7 +151,7 @@
} catch (HyracksException e) {
throw new AlgebricksException(e);
}
-
+ opDescriptor.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, opDescriptor);
for (int i = 0; i < op.getInputs().size(); i++) {
builder.contributeGraphEdge(op.getInputs().get(i).getValue(), 0, op, i);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MaterializePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MaterializePOperator.java
index a48e3c2..fe8985a 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MaterializePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MaterializePOperator.java
@@ -74,6 +74,7 @@
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
MaterializingOperatorDescriptor materializationOpDesc =
new MaterializingOperatorDescriptor(builder.getJobSpec(), recDescriptor, isSingleActivity);
+ materializationOpDesc.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, materializationOpDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreSortedDistinctByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreSortedDistinctByPOperator.java
index 94d5fd4..fda879c 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreSortedDistinctByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreSortedDistinctByPOperator.java
@@ -34,7 +34,7 @@
import org.apache.hyracks.algebricks.runtime.operators.group.MicroPreClusteredGroupRuntimeFactory;
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
-import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
public class MicroPreSortedDistinctByPOperator extends AbstractPreSortedDistinctByPOperator {
@@ -62,8 +62,9 @@
IBinaryComparatorFactory[] comparatorFactories = JobGenHelper
.variablesToAscBinaryComparatorFactories(columnList, context.getTypeEnvironment(op), context);
IAggregateEvaluatorFactory[] aggFactories = new IAggregateEvaluatorFactory[] {};
- IAggregatorDescriptorFactory aggregatorFactory =
+ AbstractAggregatorDescriptorFactory aggregatorFactory =
new SimpleAlgebricksAccumulatingAggregatorFactory(aggFactories, keysAndDecs);
+ aggregatorFactory.setSourceLocation(op.getSourceLocation());
RecordDescriptor recordDescriptor =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
@@ -73,6 +74,7 @@
/* make fd columns part of the key but the comparator only compares the distinct key columns */
MicroPreClusteredGroupRuntimeFactory runtime = new MicroPreClusteredGroupRuntimeFactory(keysAndDecs,
comparatorFactories, aggregatorFactory, inputRecordDesc, recordDescriptor, null);
+ runtime.setSourceLocation(op.getSourceLocation());
builder.contributeMicroOperator(op, runtime, recordDescriptor);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java
index 629afa3..13308a1 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroPreclusteredGroupByPOperator.java
@@ -74,6 +74,7 @@
context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas[0], context);
MicroPreClusteredGroupRuntimeFactory runtime = new MicroPreClusteredGroupRuntimeFactory(keys,
comparatorFactories, aggregatorFactory, inputRecordDesc, recordDescriptor, null);
+ runtime.setSourceLocation(gby.getSourceLocation());
builder.contributeMicroOperator(gby, runtime, recordDescriptor);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroUnionAllPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroUnionAllPOperator.java
index f5e992e..da48049 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroUnionAllPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/MicroUnionAllPOperator.java
@@ -49,6 +49,7 @@
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
MicroUnionAllRuntimeFactory runtime = new MicroUnionAllRuntimeFactory(op.getInputs().size());
+ runtime.setSourceLocation(op.getSourceLocation());
builder.contributeMicroOperator(op, runtime, recordDescriptor);
super.contributeRuntimeOperator(builder, context, op, opSchema, inputSchemas, outerPlanSchema);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedLoopJoinPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedLoopJoinPOperator.java
index 4d7bd7e1..83cea4a 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedLoopJoinPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedLoopJoinPOperator.java
@@ -139,15 +139,14 @@
ITuplePairComparatorFactory comparatorFactory =
new TuplePairEvaluatorFactory(cond, context.getBinaryBooleanInspectorFactory());
IOperatorDescriptorRegistry spec = builder.getJobSpec();
- IOperatorDescriptor opDesc = null;
+ IOperatorDescriptor opDesc;
switch (kind) {
- case INNER: {
+ case INNER:
opDesc = new NestedLoopJoinOperatorDescriptor(spec, comparatorFactory, recDescriptor, memSize, false,
null);
break;
- }
- case LEFT_OUTER: {
+ case LEFT_OUTER:
IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()];
for (int j = 0; j < nonMatchWriterFactories.length; j++) {
nonMatchWriterFactories[j] = context.getMissingWriterFactory();
@@ -155,12 +154,12 @@
opDesc = new NestedLoopJoinOperatorDescriptor(spec, comparatorFactory, recDescriptor, memSize, true,
nonMatchWriterFactories);
break;
- }
- default: {
+ default:
throw new NotImplementedException();
- }
}
- contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
+
+ opDesc.setSourceLocation(join.getSourceLocation());
+ contributeOpDesc(builder, join, opDesc);
ILogicalOperator src1 = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src1, 0, op, 0);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedTupleSourcePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedTupleSourcePOperator.java
index 179bb73..7971e78 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedTupleSourcePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NestedTupleSourcePOperator.java
@@ -98,6 +98,7 @@
throws AlgebricksException {
propagatedSchema.addAllVariables(outerPlanSchema);
NestedTupleSourceRuntimeFactory runtime = new NestedTupleSourceRuntimeFactory();
+ runtime.setSourceLocation(op.getSourceLocation());
RecordDescriptor recDesc =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
builder.contributeMicroOperator(op, runtime, recDesc);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreSortedDistinctByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreSortedDistinctByPOperator.java
index 54e577f..dd4c65f 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreSortedDistinctByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreSortedDistinctByPOperator.java
@@ -34,7 +34,7 @@
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
-import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.preclustered.PreclusteredGroupOperatorDescriptor;
public class PreSortedDistinctByPOperator extends AbstractPreSortedDistinctByPOperator {
@@ -64,14 +64,16 @@
IBinaryComparatorFactory[] comparatorFactories = JobGenHelper
.variablesToAscBinaryComparatorFactories(columnList, context.getTypeEnvironment(op), context);
IAggregateEvaluatorFactory[] aggFactories = new IAggregateEvaluatorFactory[] {};
- IAggregatorDescriptorFactory aggregatorFactory =
+ AbstractAggregatorDescriptorFactory aggregatorFactory =
new SimpleAlgebricksAccumulatingAggregatorFactory(aggFactories, keysAndDecs);
+ aggregatorFactory.setSourceLocation(op.getSourceLocation());
RecordDescriptor recordDescriptor =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
/* make fd columns part of the key but the comparator only compares the distinct key columns */
PreclusteredGroupOperatorDescriptor opDesc = new PreclusteredGroupOperatorDescriptor(spec, keysAndDecs,
comparatorFactories, aggregatorFactory, recordDescriptor);
+ opDesc.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java
index 0e0953c..e5076ce 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/PreclusteredGroupByPOperator.java
@@ -27,7 +27,6 @@
import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
-import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
@@ -38,7 +37,7 @@
import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
-import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.preclustered.PreclusteredGroupOperatorDescriptor;
public class PreclusteredGroupByPOperator extends AbstractPreclusteredGroupByPOperator {
@@ -71,7 +70,7 @@
int fdColumns[] = getFdColumns(gby, inputSchemas[0]);
// compile subplans and set the gby op. schema accordingly
AlgebricksPipeline[] subplans = compileSubplans(inputSchemas[0], gby, opSchema, context);
- IAggregatorDescriptorFactory aggregatorFactory;
+ AbstractAggregatorDescriptorFactory aggregatorFactory;
List<ILogicalPlan> nestedPlans = gby.getNestedPlans();
if (!nestedPlans.isEmpty() && nestedPlans.get(0).getRoots().get(0).getValue()
@@ -80,6 +79,7 @@
} else {
aggregatorFactory = new NestedPlansAccumulatingAggregatorFactory(subplans, keys, fdColumns);
}
+ aggregatorFactory.setSourceLocation(gby.getSourceLocation());
IOperatorDescriptorRegistry spec = builder.getJobSpec();
IBinaryComparatorFactory[] comparatorFactories = JobGenHelper
@@ -89,8 +89,9 @@
PreclusteredGroupOperatorDescriptor opDesc = new PreclusteredGroupOperatorDescriptor(spec, keys,
comparatorFactories, aggregatorFactory, recordDescriptor, groupAll, framesLimit);
+ opDesc.setSourceLocation(gby.getSourceLocation());
- contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
+ contributeOpDesc(builder, gby, opDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ReplicatePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ReplicatePOperator.java
index 25d31d2..f34cecc 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ReplicatePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/ReplicatePOperator.java
@@ -22,7 +22,6 @@
import org.apache.hyracks.algebricks.core.algebra.base.IHyracksJobBuilder;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag;
-import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator;
import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
@@ -50,9 +49,10 @@
int outputArity = rop.getOutputArity();
boolean[] outputMaterializationFlags = rop.getOutputMaterializationFlags();
- ReplicateOperatorDescriptor splitOpDesc =
+ ReplicateOperatorDescriptor ropDesc =
new ReplicateOperatorDescriptor(spec, recDescriptor, outputArity, outputMaterializationFlags);
- contributeOpDesc(builder, (AbstractLogicalOperator) op, splitOpDesc);
+ ropDesc.setSourceLocation(rop.getSourceLocation());
+ contributeOpDesc(builder, rop, ropDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java
index 3a6ba74..d68be20 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/RunningAggregatePOperator.java
@@ -91,6 +91,7 @@
RunningAggregateRuntimeFactory runtime =
new RunningAggregateRuntimeFactory(outColumns, runningAggFuns, projectionList);
+ runtime.setSourceLocation(ragg.getSourceLocation());
// contribute one Asterix framewriter
RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkPOperator.java
index 5084c18..6c9f6e2 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkPOperator.java
@@ -79,6 +79,7 @@
IOperatorDescriptorRegistry spec = builder.getJobSpec();
SinkOperatorDescriptor opDesc = new SinkOperatorDescriptor(spec, op.getInputs().size());
+ opDesc.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
for (int i = 0; i < op.getInputs().size(); i++) {
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkWritePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkWritePOperator.java
index f76b69b..6e37b3a 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkWritePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SinkWritePOperator.java
@@ -101,10 +101,12 @@
IMetadataProvider<?, ?> mp = context.getMetadataProvider();
- Pair<IPushRuntimeFactory, AlgebricksPartitionConstraint> runtime =
+ Pair<IPushRuntimeFactory, AlgebricksPartitionConstraint> runtimeAndConstraints =
mp.getWriteFileRuntime(write.getDataSink(), columns, pf, inputDesc);
+ IPushRuntimeFactory runtime = runtimeAndConstraints.first;
+ runtime.setSourceLocation(write.getSourceLocation());
- builder.contributeMicroOperator(write, runtime.first, recDesc, runtime.second);
+ builder.contributeMicroOperator(write, runtime, recDesc, runtimeAndConstraints.second);
ILogicalOperator src = write.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, write, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java
index 1aeeca9..967e7e6 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SortGroupByPOperator.java
@@ -63,7 +63,7 @@
import org.apache.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
-import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
+import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.sort.SortGroupByOperatorDescriptor;
public class SortGroupByPOperator extends AbstractPhysicalOperator {
@@ -258,10 +258,12 @@
RecordDescriptor partialAggRecordDescriptor =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), localInputSchemas[0], context);
- IAggregatorDescriptorFactory aggregatorFactory =
+ AbstractAggregatorDescriptorFactory aggregatorFactory =
new SimpleAlgebricksAccumulatingAggregatorFactory(aff, keyAndDecFields);
- IAggregatorDescriptorFactory mergeFactory =
+ aggregatorFactory.setSourceLocation(gby.getSourceLocation());
+ AbstractAggregatorDescriptorFactory mergeFactory =
new SimpleAlgebricksAccumulatingAggregatorFactory(merges, keyAndDecFields);
+ mergeFactory.setSourceLocation(gby.getSourceLocation());
INormalizedKeyComputerFactory normalizedKeyFactory = null;
INormalizedKeyComputerFactoryProvider nkcfProvider = context.getNormalizedKeyComputerFactoryProvider();
@@ -275,6 +277,7 @@
SortGroupByOperatorDescriptor gbyOpDesc = new SortGroupByOperatorDescriptor(spec, frameLimit, keys,
keyAndDecFields, normalizedKeyFactory, compFactories, aggregatorFactory, mergeFactory,
partialAggRecordDescriptor, recordDescriptor, false);
+ gbyOpDesc.setSourceLocation(gby.getSourceLocation());
contributeOpDesc(builder, gby, gbyOpDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SplitPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SplitPOperator.java
index c9fde4b..2f02eba 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SplitPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SplitPOperator.java
@@ -60,10 +60,11 @@
IBinaryIntegerInspectorFactory intInsepctorFactory = context.getBinaryIntegerInspectorFactory();
- SplitOperatorDescriptor splitOpDesc = new SplitOperatorDescriptor(spec, recDescriptor, outputArity,
+ SplitOperatorDescriptor sopDesc = new SplitOperatorDescriptor(spec, recDescriptor, outputArity,
brachingExprEvalFactory, intInsepctorFactory, defaultBranch, propageToAllBranchAsDefault);
+ sopDesc.setSourceLocation(sop.getSourceLocation());
- contributeOpDesc(builder, (AbstractLogicalOperator) op, splitOpDesc);
+ contributeOpDesc(builder, sop, sopDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, op, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StableSortPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StableSortPOperator.java
index 3a4249b..269a809 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StableSortPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StableSortPOperator.java
@@ -37,6 +37,7 @@
import org.apache.hyracks.api.dataflow.value.INormalizedKeyComputerFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
+import org.apache.hyracks.dataflow.std.sort.AbstractSorterOperatorDescriptor;
import org.apache.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
import org.apache.hyracks.dataflow.std.sort.TopKSorterOperatorDescriptor;
@@ -98,22 +99,21 @@
i++;
}
+ AbstractSorterOperatorDescriptor sortOpDesc;
// topK == -1 means that a topK value is not provided.
if (topK == -1) {
- ExternalSortOperatorDescriptor sortOpDesc =
+ sortOpDesc =
new ExternalSortOperatorDescriptor(spec, maxNumberOfFrames, sortFields, nkcf, comps, recDescriptor);
- contributeOpDesc(builder, (AbstractLogicalOperator) op, sortOpDesc);
- ILogicalOperator src = op.getInputs().get(0).getValue();
- builder.contributeGraphEdge(src, 0, op, 0);
} else {
// Since topK value is provided, topK optimization is possible.
// We call topKSorter instead of calling ExternalSortOperator.
- TopKSorterOperatorDescriptor sortOpDesc = new TopKSorterOperatorDescriptor(spec, maxNumberOfFrames, topK,
- sortFields, nkcf, comps, recDescriptor);
- contributeOpDesc(builder, (AbstractLogicalOperator) op, sortOpDesc);
- ILogicalOperator src = op.getInputs().get(0).getValue();
- builder.contributeGraphEdge(src, 0, op, 0);
+ sortOpDesc = new TopKSorterOperatorDescriptor(spec, maxNumberOfFrames, topK, sortFields, nkcf, comps,
+ recDescriptor);
}
+ sortOpDesc.setSourceLocation(op.getSourceLocation());
+ contributeOpDesc(builder, (AbstractLogicalOperator) op, sortOpDesc);
+ ILogicalOperator src = op.getInputs().get(0).getValue();
+ builder.contributeGraphEdge(src, 0, op, 0);
}
@Override
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamLimitPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamLimitPOperator.java
index da75da8..90732ce 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamLimitPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamLimitPOperator.java
@@ -98,6 +98,7 @@
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
StreamLimitRuntimeFactory runtime = new StreamLimitRuntimeFactory(maxObjectsFact, offsetFact, null,
context.getBinaryIntegerInspectorFactory());
+ runtime.setSourceLocation(limit.getSourceLocation());
builder.contributeMicroOperator(limit, runtime, recDesc);
// and contribute one edge from its child
ILogicalOperator src = limit.getInputs().get(0).getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamProjectPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamProjectPOperator.java
index 3ff7dc1..0789cee 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamProjectPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamProjectPOperator.java
@@ -68,6 +68,7 @@
projectionList[i++] = pos;
}
StreamProjectRuntimeFactory runtime = new StreamProjectRuntimeFactory(projectionList, flushFramesRapidly);
+ runtime.setSourceLocation(project.getSourceLocation());
RecordDescriptor recDesc =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
builder.contributeMicroOperator(project, runtime, recDesc);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java
index ddde5f3..a519275 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java
@@ -70,6 +70,7 @@
new StreamSelectRuntimeFactory(cond, null, context.getBinaryBooleanInspectorFactory(),
select.getRetainMissing(), inputSchemas[0].findVariable(select.getMissingPlaceholderVariable()),
context.getMissingWriterFactory());
+ runtime.setSourceLocation(select.getSourceLocation());
// contribute one Asterix framewriter
RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
builder.contributeMicroOperator(select, runtime, recDesc);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StringStreamingScriptPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StringStreamingScriptPOperator.java
index 01e9a0c..0e8005d 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StringStreamingScriptPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StringStreamingScriptPOperator.java
@@ -65,6 +65,7 @@
StringStreamingScriptDescription sssd = (StringStreamingScriptDescription) scriptDesc;
StringStreamingRuntimeFactory runtime = new StringStreamingRuntimeFactory(sssd.getCommand(),
sssd.getPrinterFactories(), sssd.getFieldDelimiter(), sssd.getParserFactory());
+ runtime.setSourceLocation(scriptOp.getSourceLocation());
RecordDescriptor recDesc =
JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context);
builder.contributeMicroOperator(scriptOp, runtime, recDesc);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java
index 95efbac..5ec6d0a 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java
@@ -101,6 +101,7 @@
RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context);
SubplanRuntimeFactory runtime =
new SubplanRuntimeFactory(np, missingWriterFactories, inputRecordDesc, recDesc, null);
+ runtime.setSourceLocation(subplan.getSourceLocation());
builder.contributeMicroOperator(subplan, runtime, recDesc);
ILogicalOperator src = op.getInputs().get(0).getValue();
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/TokenizePOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/TokenizePOperator.java
index cd696bc..57f8f42 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/TokenizePOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/TokenizePOperator.java
@@ -94,8 +94,10 @@
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints =
mp.getTokenizerRuntime(dataSourceIndex, propagatedSchema, inputSchemas, typeEnv, primaryKeys,
secondaryKeys, null, inputDesc, context, spec, true);
- builder.contributeHyracksOperator(tokenizeOp, runtimeAndConstraints.first);
- builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(tokenizeOp.getSourceLocation());
+ builder.contributeHyracksOperator(tokenizeOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, runtimeAndConstraints.second);
ILogicalOperator src = tokenizeOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, tokenizeOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnionAllPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnionAllPOperator.java
index 4ccce92..fcd9fa7 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnionAllPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnionAllPOperator.java
@@ -50,6 +50,7 @@
UnionAllOperatorDescriptor opDesc =
new UnionAllOperatorDescriptor(builder.getJobSpec(), op.getInputs().size(), recordDescriptor);
+ opDesc.setSourceLocation(op.getSourceLocation());
contributeOpDesc(builder, (AbstractLogicalOperator) op, opDesc);
super.contributeRuntimeOperator(builder, context, op, opSchema, inputSchemas, outerPlanSchema);
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WriteResultPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WriteResultPOperator.java
index 7ec1914..70e596a 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WriteResultPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/WriteResultPOperator.java
@@ -101,9 +101,10 @@
JobSpecification spec = builder.getJobSpec();
Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> runtimeAndConstraints = mp.getWriteResultRuntime(
dataSource, propagatedSchema, keys, payload, additionalFilteringKeys, context, spec);
-
- builder.contributeHyracksOperator(writeResultOp, runtimeAndConstraints.first);
- builder.contributeAlgebricksPartitionConstraint(runtimeAndConstraints.first, runtimeAndConstraints.second);
+ IOperatorDescriptor opDesc = runtimeAndConstraints.first;
+ opDesc.setSourceLocation(writeResultOp.getSourceLocation());
+ builder.contributeHyracksOperator(writeResultOp, opDesc);
+ builder.contributeAlgebricksPartitionConstraint(opDesc, runtimeAndConstraints.second);
ILogicalOperator src = writeResultOp.getInputs().get(0).getValue();
builder.contributeGraphEdge(src, 0, writeResultOp, 0);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
index c574cd8..67199b9 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/util/OperatorManipulationUtil.java
@@ -262,6 +262,7 @@
public static ILogicalOperator deepCopy(ILogicalOperator op) throws AlgebricksException {
OperatorDeepCopyVisitor visitor = new OperatorDeepCopyVisitor();
AbstractLogicalOperator copiedOperator = (AbstractLogicalOperator) op.accept(visitor, null);
+ copiedOperator.setSourceLocation(op.getSourceLocation());
copiedOperator.setExecutionMode(op.getExecutionMode());
copiedOperator.getAnnotations().putAll(op.getAnnotations());
copiedOperator.setSchema(op.getSchema());
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml b/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml
index d9dccce..dd1cbe6 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/pom.xml
@@ -49,6 +49,11 @@
</dependency>
<dependency>
<groupId>org.apache.hyracks</groupId>
+ <artifactId>hyracks-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.hyracks</groupId>
<artifactId>hyracks-dataflow-common</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractDecorrelationRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractDecorrelationRule.java
index 7802b29..7fc2efe 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractDecorrelationRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractDecorrelationRule.java
@@ -41,6 +41,7 @@
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
import org.apache.hyracks.algebricks.rewriter.util.PhysicalOptimizationsUtil;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractDecorrelationRule implements IAlgebraicRewriteRule {
@@ -91,9 +92,11 @@
protected void buildVarExprList(Collection<LogicalVariable> vars, IOptimizationContext context, GroupByOperator g,
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> outVeList) throws AlgebricksException {
+ SourceLocation sourceLoc = g.getSourceLocation();
for (LogicalVariable ov : vars) {
LogicalVariable newVar = context.newVar();
- ILogicalExpression varExpr = new VariableReferenceExpression(newVar);
+ VariableReferenceExpression varExpr = new VariableReferenceExpression(newVar);
+ varExpr.setSourceLocation(sourceLoc);
outVeList.add(new Pair<LogicalVariable, Mutable<ILogicalExpression>>(ov,
new MutableObject<ILogicalExpression>(varExpr)));
for (ILogicalPlan p : g.getNestedPlans()) {
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractExtractExprRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractExtractExprRule.java
index bce72c1..036b3e1 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractExtractExprRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractExtractExprRule.java
@@ -36,6 +36,7 @@
IOptimizationContext context) throws AlgebricksException {
LogicalVariable v = context.newVar();
AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(gExpr));
+ a.setSourceLocation(gExpr.getSourceLocation());
a.getInputs().add(new MutableObject<ILogicalOperator>(opRef2.getValue()));
opRef2.setValue(a);
if (gExpr.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
index 3f61cc0..ade2402 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceCombinerRule.java
@@ -43,6 +43,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractIntroduceCombinerRule implements IAlgebraicRewriteRule {
@@ -67,7 +68,7 @@
protected Pair<Boolean, Mutable<ILogicalOperator>> tryToPushAgg(AggregateOperator initAgg, GroupByOperator newGbyOp,
Set<SimilarAggregatesInfo> toReplaceSet, IOptimizationContext context) throws AlgebricksException {
-
+ SourceLocation sourceLoc = initAgg.getSourceLocation();
List<LogicalVariable> initVars = initAgg.getVariables();
List<Mutable<ILogicalExpression>> initExprs = initAgg.getExpressions();
int numExprs = initVars.size();
@@ -87,6 +88,7 @@
for (int i = 0; i < numExprs; i++) {
Mutable<ILogicalExpression> expRef = initExprs.get(i);
AggregateFunctionCallExpression aggFun = (AggregateFunctionCallExpression) expRef.getValue();
+ SourceLocation aggFunSourceLoc = aggFun.getSourceLocation();
IFunctionInfo fi1 = aggFun.getStepOneAggregate();
// Clone the aggregate's args.
List<Mutable<ILogicalExpression>> newArgs = new ArrayList<>(aggFun.getArguments().size());
@@ -98,10 +100,13 @@
SimilarAggregatesInfo inf = new SimilarAggregatesInfo();
LogicalVariable newAggVar = context.newVar();
pushedVars.add(newAggVar);
- inf.stepOneResult = new VariableReferenceExpression(newAggVar);
+ VariableReferenceExpression newAggVarRef = new VariableReferenceExpression(newAggVar);
+ newAggVarRef.setSourceLocation(aggFunSourceLoc);
+ inf.stepOneResult = newAggVarRef;
inf.simAggs = new ArrayList<>();
toReplaceSet.add(inf);
AggregateFunctionCallExpression aggLocal = new AggregateFunctionCallExpression(fi1, false, newArgs);
+ aggLocal.setSourceLocation(aggFunSourceLoc);
pushedExprs.add(new MutableObject<>(aggLocal));
AggregateExprInfo aei = new AggregateExprInfo();
aei.aggExprRef = expRef;
@@ -112,6 +117,7 @@
if (!pushedVars.isEmpty()) {
AggregateOperator pushedAgg = new AggregateOperator(pushedVars, pushedExprs);
+ pushedAgg.setSourceLocation(sourceLoc);
pushedAgg.setExecutionMode(ExecutionMode.LOCAL);
// If newGbyOp is null, then we optimizing an aggregate without group by.
if (newGbyOp != null) {
@@ -133,6 +139,7 @@
// Hook up the nested aggregate op with the outer group by.
NestedTupleSourceOperator nts = new NestedTupleSourceOperator(new MutableObject<>(newGbyOp));
+ nts.setSourceLocation(sourceLoc);
nts.setExecutionMode(ExecutionMode.LOCAL);
bottomRef.setValue(nts);
pushedAgg.getInputs().add(inputRef);
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceGroupByCombinerRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceGroupByCombinerRule.java
index a921301..dc48d96 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceGroupByCombinerRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/AbstractIntroduceGroupByCombinerRule.java
@@ -50,6 +50,7 @@
import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public abstract class AbstractIntroduceGroupByCombinerRule extends AbstractIntroduceCombinerRule {
@@ -105,7 +106,9 @@
for (LogicalVariable var : freeVars) {
if (!propagatedVars.contains(var)) {
LogicalVariable newDecorVar = context.newVar();
- newGbyOp.addDecorExpression(newDecorVar, new VariableReferenceExpression(var));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(var);
+ varRef.setSourceLocation(gbyOp.getSourceLocation());
+ newGbyOp.addDecorExpression(newDecorVar, varRef);
VariableUtilities.substituteVariables(gbyOp.getNestedPlans().get(0).getRoots().get(0).getValue(), var,
newDecorVar, context);
}
@@ -128,10 +131,12 @@
private GroupByOperator opToPush(GroupByOperator gbyOp, BookkeepingInfo bi, IOptimizationContext context)
throws AlgebricksException {
+ SourceLocation sourceLoc = gbyOp.getSourceLocation();
// Hook up input to new group-by.
Mutable<ILogicalOperator> opRef3 = gbyOp.getInputs().get(0);
ILogicalOperator op3 = opRef3.getValue();
GroupByOperator newGbyOp = new GroupByOperator();
+ newGbyOp.setSourceLocation(sourceLoc);
newGbyOp.getInputs().add(new MutableObject<ILogicalOperator>(op3));
// Copy annotations.
Map<String, Object> annotations = newGbyOp.getAnnotations();
@@ -199,7 +204,9 @@
// set the vars in the new op
int n = newOpGbyList.size();
for (int i = 0; i < n; i++) {
- newGbyOp.addGbyExpression(replGbyList.get(i), new VariableReferenceExpression(newOpGbyList.get(i)));
+ VariableReferenceExpression varRef = new VariableReferenceExpression(newOpGbyList.get(i));
+ varRef.setSourceLocation(sourceLoc);
+ newGbyOp.addGbyExpression(replGbyList.get(i), varRef);
VariableUtilities.substituteVariables(gbyOp, newOpGbyList.get(i), replGbyList.get(i), false, context);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java
index d975cce..ab665b3 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java
@@ -32,6 +32,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class BreakSelectIntoConjunctsRule implements IAlgebraicRewriteRule {
@@ -58,6 +59,8 @@
return false;
}
+ SourceLocation sourceLoc = select.getSourceLocation();
+
Mutable<ILogicalOperator> childOfSelect = select.getInputs().get(0);
boolean fst = true;
ILogicalOperator botOp = select;
@@ -70,6 +73,7 @@
} else {
SelectOperator newSelect = new SelectOperator(new MutableObject<ILogicalExpression>(e),
select.getRetainMissing(), select.getMissingPlaceholderVariable());
+ newSelect.setSourceLocation(sourceLoc);
List<Mutable<ILogicalOperator>> botInpList = botOp.getInputs();
botInpList.clear();
botInpList.add(new MutableObject<ILogicalOperator>(newSelect));
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexJoinInferenceRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexJoinInferenceRule.java
index 0b94fdd..28139d4 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexJoinInferenceRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexJoinInferenceRule.java
@@ -83,6 +83,7 @@
ntsToEtsInSubplan(subplan, context);
cleanupJoins(subplan);
InnerJoinOperator join = new InnerJoinOperator(new MutableObject<ILogicalExpression>(ConstantExpression.TRUE));
+ join.setSourceLocation(op.getSourceLocation());
join.getInputs().add(opRef3);
opRef2.setValue(OperatorManipulationUtil.eliminateSingleSubplanOverEts(subplan));
join.getInputs().add(new MutableObject<ILogicalOperator>(op));
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexUnnestToProductRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexUnnestToProductRule.java
index fa35a98..54fe09d 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexUnnestToProductRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ComplexUnnestToProductRule.java
@@ -117,6 +117,7 @@
InnerJoinOperator product =
new InnerJoinOperator(new MutableObject<ILogicalExpression>(ConstantExpression.TRUE));
+ product.setSourceLocation(op.getSourceLocation());
// Outer branch.
product.getInputs().add(new MutableObject<ILogicalOperator>(outerRoot));
// Inner branch.
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ConsolidateSelectsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ConsolidateSelectsRule.java
index ae52c35..d9849b1 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ConsolidateSelectsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ConsolidateSelectsRule.java
@@ -79,6 +79,7 @@
// Initialize the new conjuncts, if necessary.
if (conj == null) {
conj = new ScalarFunctionCallExpression(andFn);
+ conj.setSourceLocation(firstSelect.getSourceLocation());
// Add the first select's condition.
conj.getArguments().add(new MutableObject<ILogicalExpression>(firstSelect.getCondition().getValue()));
}
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java
index 53548e4..1eaf9c7 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/CopyLimitDownRule.java
@@ -38,6 +38,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.physical.StreamLimitPOperator;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class CopyLimitDownRule implements IAlgebraicRewriteRule {
@@ -84,9 +85,11 @@
ILogicalOperator safeOp = safeOpRef.getValue();
Mutable<ILogicalOperator> unsafeOpRef = safeOp.getInputs().get(0);
ILogicalOperator unsafeOp = unsafeOpRef.getValue();
+ SourceLocation sourceLoc = limitOp.getSourceLocation();
LimitOperator limitCloneOp = null;
if (limitOp.getOffset().getValue() == null) {
limitCloneOp = new LimitOperator(limitOp.getMaxObjects().getValue(), false);
+ limitCloneOp.setSourceLocation(sourceLoc);
} else {
// Need to add an offset to the given limit value
// since the original topmost limit will use the offset value.
@@ -98,7 +101,9 @@
new MutableObject<ILogicalExpression>(limitOp.getMaxObjects().getValue().cloneExpression()));
addArgs.add(new MutableObject<ILogicalExpression>(limitOp.getOffset().getValue().cloneExpression()));
ScalarFunctionCallExpression maxPlusOffset = new ScalarFunctionCallExpression(finfoAdd, addArgs);
+ maxPlusOffset.setSourceLocation(sourceLoc);
limitCloneOp = new LimitOperator(maxPlusOffset, false);
+ limitCloneOp.setSourceLocation(sourceLoc);
}
limitCloneOp.setPhysicalOperator(new StreamLimitPOperator());
limitCloneOp.getInputs().add(new MutableObject<ILogicalOperator>(unsafeOp));
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceOrderByAfterSubplan.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceOrderByAfterSubplan.java
index baad59b..096520e 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceOrderByAfterSubplan.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceOrderByAfterSubplan.java
@@ -141,6 +141,7 @@
List<Pair<IOrder, Mutable<ILogicalExpression>>> orderExprs =
deepCopyOrderAndExpression(sourceOrderOp.getOrderExpressions());
OrderOperator newOrderOp = new OrderOperator(orderExprs);
+ newOrderOp.setSourceLocation(sourceOrderOp.getSourceLocation());
context.addToDontApplySet(this, newOrderOp);
inputs.set(i, new MutableObject<ILogicalOperator>(newOrderOp));
newOrderOp.getInputs().add(inputOpRef);
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
index f06933a..066b6c1 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EnforceStructuralPropertiesRule.java
@@ -89,6 +89,7 @@
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
import org.apache.hyracks.algebricks.rewriter.util.PhysicalOptimizationsUtil;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.dataflow.common.data.partition.range.IRangeMap;
public class EnforceStructuralPropertiesRule implements IAlgebraicRewriteRule {
@@ -526,16 +527,20 @@
private Mutable<ILogicalOperator> enforceOrderProperties(List<LocalOrderProperty> oList,
Mutable<ILogicalOperator> topOp, boolean isMicroOp, IOptimizationContext context)
throws AlgebricksException {
+ SourceLocation sourceLoc = topOp.getValue().getSourceLocation();
List<Pair<IOrder, Mutable<ILogicalExpression>>> oe = new LinkedList<>();
for (LocalOrderProperty orderProperty : oList) {
for (OrderColumn oc : orderProperty.getOrderColumns()) {
IOrder ordType = (oc.getOrder() == OrderKind.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
- Pair<IOrder, Mutable<ILogicalExpression>> pair = new Pair<>(ordType,
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oc.getColumn())));
+ VariableReferenceExpression ocColumnRef = new VariableReferenceExpression(oc.getColumn());
+ ocColumnRef.setSourceLocation(sourceLoc);
+ Pair<IOrder, Mutable<ILogicalExpression>> pair =
+ new Pair<>(ordType, new MutableObject<ILogicalExpression>(ocColumnRef));
oe.add(pair);
}
}
OrderOperator oo = new OrderOperator(oe);
+ oo.setSourceLocation(sourceLoc);
oo.setExecutionMode(AbstractLogicalOperator.ExecutionMode.LOCAL);
if (isMicroOp) {
oo.setPhysicalOperator(new InMemoryStableSortPOperator());
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
index b95d6e4..87053c8 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
@@ -48,6 +48,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionReferenceTransform;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Factors out common sub-expressions by assigning them to a variables, and replacing the common sub-expressions with references to those variables.
@@ -255,7 +256,10 @@
// Also just replace the expr if we are replacing common exprs from within the same operator.
if (liveVars.contains(exprEqClass.getVariable()) || !liveVars.containsAll(usedVars)
|| op == exprEqClass.getFirstOperator()) {
- exprRef.setValue(new VariableReferenceExpression(exprEqClass.getVariable()));
+ VariableReferenceExpression varRef =
+ new VariableReferenceExpression(exprEqClass.getVariable());
+ varRef.setSourceLocation(expr.getSourceLocation());
+ exprRef.setValue(varRef);
// Do not descend into children since this expr has been completely replaced.
return true;
}
@@ -267,7 +271,10 @@
VariableUtilities.getLiveVariables(op, liveVars);
//rewrite only when the variable is live
if (liveVars.contains(exprEqClass.getVariable())) {
- exprRef.setValue(new VariableReferenceExpression(exprEqClass.getVariable()));
+ VariableReferenceExpression varRef =
+ new VariableReferenceExpression(exprEqClass.getVariable());
+ varRef.setSourceLocation(expr.getSourceLocation());
+ exprRef.setValue(varRef);
// Do not descend into children since this expr has been completely replaced.
return true;
}
@@ -295,6 +302,7 @@
private boolean assignCommonExpression(ExprEquivalenceClass exprEqClass, ILogicalExpression expr)
throws AlgebricksException {
+ SourceLocation sourceLoc = expr.getSourceLocation();
AbstractLogicalOperator firstOp = (AbstractLogicalOperator) exprEqClass.getFirstOperator();
Mutable<ILogicalExpression> firstExprRef = exprEqClass.getFirstExpression();
if (firstOp.getOperatorTag() == LogicalOperatorTag.INNERJOIN
@@ -313,6 +321,7 @@
// Place a Select operator beneath op that contains the enclosing expression.
SelectOperator selectOp =
new SelectOperator(new MutableObject<ILogicalExpression>(enclosingExpr), false, null);
+ selectOp.setSourceLocation(enclosingExpr.getSourceLocation());
selectOp.getInputs().add(new MutableObject<ILogicalOperator>(op.getInputs().get(0).getValue()));
op.getInputs().get(0).setValue(selectOp);
// Set firstOp to be the select below op, since we want to assign the common subexpr there.
@@ -324,12 +333,15 @@
LogicalVariable newVar = context.newVar();
AssignOperator newAssign = new AssignOperator(newVar,
new MutableObject<ILogicalExpression>(firstExprRef.getValue().cloneExpression()));
+ newAssign.setSourceLocation(sourceLoc);
// Place assign below firstOp.
newAssign.getInputs().add(new MutableObject<ILogicalOperator>(firstOp.getInputs().get(0).getValue()));
newAssign.setExecutionMode(firstOp.getExecutionMode());
firstOp.getInputs().get(0).setValue(newAssign);
// Replace original expr with variable reference, and set var in expression equivalence class.
- firstExprRef.setValue(new VariableReferenceExpression(newVar));
+ VariableReferenceExpression newVarRef = new VariableReferenceExpression(newVar);
+ newVarRef.setSourceLocation(sourceLoc);
+ firstExprRef.setValue(newVarRef);
exprEqClass.setVariable(newVar);
context.computeAndSetTypeEnvironmentForOperator(newAssign);
context.computeAndSetTypeEnvironmentForOperator(firstOp);
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
index 4c2d910..3335d71 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonOperatorsRule.java
@@ -50,6 +50,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.physical.StreamProjectPOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class ExtractCommonOperatorsRule implements IAlgebraicRewriteRule {
@@ -162,7 +163,9 @@
continue;
}
candidate = group.get(0);
+ SourceLocation candidateSourceLoc = candidate.getValue().getSourceLocation();
ReplicateOperator rop = new ReplicateOperator(group.size(), materializationFlags);
+ rop.setSourceLocation(candidateSourceLoc);
rop.setPhysicalOperator(new ReplicatePOperator());
Mutable<ILogicalOperator> ropRef = new MutableObject<ILogicalOperator>(rop);
AbstractLogicalOperator aopCandidate = (AbstractLogicalOperator) candidate.getValue();
@@ -204,7 +207,9 @@
VariableUtilities.getLiveVariables(candidate.getValue(), liveVarsNew);
ArrayList<Mutable<ILogicalExpression>> assignExprs = new ArrayList<Mutable<ILogicalExpression>>();
for (LogicalVariable liveVar : liveVarsNew) {
- assignExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(liveVar)));
+ VariableReferenceExpression liveVarRef = new VariableReferenceExpression(liveVar);
+ liveVarRef.setSourceLocation(candidateSourceLoc);
+ assignExprs.add(new MutableObject<ILogicalExpression>(liveVarRef));
}
for (Mutable<ILogicalOperator> ref : group) {
if (ref.equals(candidate)) {
@@ -218,10 +223,14 @@
liveVars.add(variableMappingBack.get(liveVarsNew.get(i)));
}
+ SourceLocation refSourceLoc = ref.getValue().getSourceLocation();
+
AbstractLogicalOperator assignOperator = new AssignOperator(liveVars, assignExprs);
+ assignOperator.setSourceLocation(refSourceLoc);
assignOperator.setExecutionMode(rop.getExecutionMode());
assignOperator.setPhysicalOperator(new AssignPOperator());
AbstractLogicalOperator projectOperator = new ProjectOperator(liveVars);
+ projectOperator.setSourceLocation(refSourceLoc);
projectOperator.setPhysicalOperator(new StreamProjectPOperator());
projectOperator.setExecutionMode(rop.getExecutionMode());
AbstractLogicalOperator exchOp = new ExchangeOperator();
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractFunctionsFromJoinConditionRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractFunctionsFromJoinConditionRule.java
index 198510a..d937eb1 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractFunctionsFromJoinConditionRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractFunctionsFromJoinConditionRule.java
@@ -40,6 +40,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Factors out function expressions from each comparison function or similarity function in join condition by
@@ -104,9 +105,11 @@
} else if (AlgebricksBuiltinFunctions.isComparisonFunction(fi) || isComparisonFunction(fi)) {
for (Mutable<ILogicalExpression> exprRef : fexp.getArguments()) {
if (exprRef.getValue().getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ SourceLocation exprRefSourceLoc = exprRef.getValue().getSourceLocation();
LogicalVariable newVar = context.newVar();
AssignOperator newAssign = new AssignOperator(newVar,
new MutableObject<ILogicalExpression>(exprRef.getValue().cloneExpression()));
+ newAssign.setSourceLocation(exprRefSourceLoc);
newAssign.setExecutionMode(joinOp.getExecutionMode());
// Place assign below joinOp.
@@ -137,7 +140,9 @@
if (modified) {
// Replace original expr with variable reference.
- exprRef.setValue(new VariableReferenceExpression(newVar));
+ VariableReferenceExpression newVarRef = new VariableReferenceExpression(newVar);
+ newVarRef.setSourceLocation(exprRefSourceLoc);
+ exprRef.setValue(newVarRef);
context.computeAndSetTypeEnvironmentForOperator(newAssign);
context.computeAndSetTypeEnvironmentForOperator(joinOp);
}
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGbyExpressionsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGbyExpressionsRule.java
index 7a0012a..eb2bee6 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGbyExpressionsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGbyExpressionsRule.java
@@ -73,7 +73,9 @@
ILogicalExpression expr = gbyPair.second.getValue();
if (expr.getExpressionTag() != LogicalExpressionTag.VARIABLE) {
LogicalVariable v = extractExprIntoAssignOpRef(expr, opRef2, context);
- gbyPair.second.setValue(new VariableReferenceExpression(v));
+ VariableReferenceExpression vRef = new VariableReferenceExpression(v);
+ vRef.setSourceLocation(expr.getSourceLocation());
+ gbyPair.second.setValue(vRef);
}
}
return true;
@@ -88,7 +90,9 @@
ILogicalExpression expr = decorPair.second.getValue();
if (expr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
LogicalVariable v = extractExprIntoAssignOpRef(expr, opRef2, context);
- decorPair.second.setValue(new VariableReferenceExpression(v));
+ VariableReferenceExpression vRef = new VariableReferenceExpression(v);
+ vRef.setSourceLocation(expr.getSourceLocation());
+ decorPair.second.setValue(vRef);
}
}
return true;
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java
index 05cc7b6..5bbc80d 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java
@@ -76,7 +76,9 @@
exprs.add(exprRef);
// Normalizes the decor entry -- expression be a variable reference
- decorVarExpr.second = new MutableObject<>(new VariableReferenceExpression(newVar));
+ VariableReferenceExpression newVarRef = new VariableReferenceExpression(newVar);
+ newVarRef.setSourceLocation(expr.getSourceLocation());
+ decorVarExpr.second = new MutableObject<>(newVarRef);
}
if (!changed) {
return false;
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/FactorRedundantGroupAndDecorVarsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/FactorRedundantGroupAndDecorVarsRule.java
index 2f28a84..d549b90 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/FactorRedundantGroupAndDecorVarsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/FactorRedundantGroupAndDecorVarsRule.java
@@ -39,6 +39,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class FactorRedundantGroupAndDecorVarsRule implements IAlgebraicRewriteRule {
@@ -78,8 +79,11 @@
LogicalVariable lhs = varRhsToLhs.get(v);
if (lhs != null) {
if (p.first != null) {
- AssignOperator assign = new AssignOperator(p.first,
- new MutableObject<ILogicalExpression>(new VariableReferenceExpression(lhs)));
+ VariableReferenceExpression lhsRef = new VariableReferenceExpression(lhs);
+ SourceLocation sourceLoc = p.second.getValue().getSourceLocation();
+ lhsRef.setSourceLocation(sourceLoc);
+ AssignOperator assign = new AssignOperator(p.first, new MutableObject<ILogicalExpression>(lhsRef));
+ assign.setSourceLocation(sourceLoc);
ILogicalOperator op = opRef.getValue();
assign.getInputs().add(new MutableObject<ILogicalOperator>(op));
opRef.setValue(assign);
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushFunctionsBelowJoin.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushFunctionsBelowJoin.java
index d7090d2..e8f701c 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushFunctionsBelowJoin.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushFunctionsBelowJoin.java
@@ -195,7 +195,9 @@
LogicalVariable replacementVar = context.newVar();
assignVars.add(replacementVar);
assignExprs.add(new MutableObject<ILogicalExpression>(funcExpr));
- funcExprRef.setValue(new VariableReferenceExpression(replacementVar));
+ VariableReferenceExpression replacementVarRef = new VariableReferenceExpression(replacementVar);
+ replacementVarRef.setSourceLocation(funcExpr.getSourceLocation());
+ funcExprRef.setValue(replacementVarRef);
funcIter.remove();
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/EliminateSubplanRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/EliminateSubplanRule.java
index 4cd15a0..2ce0e63 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/EliminateSubplanRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/EliminateSubplanRule.java
@@ -35,6 +35,7 @@
import org.apache.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public class EliminateSubplanRule implements IAlgebraicRewriteRule {
@@ -101,6 +102,7 @@
private void elimSubplanOverEts(Mutable<ILogicalOperator> opRef, IOptimizationContext ctx)
throws AlgebricksException {
SubplanOperator subplan = (SubplanOperator) opRef.getValue();
+ SourceLocation sourceLoc = subplan.getSourceLocation();
for (ILogicalPlan p : subplan.getNestedPlans()) {
for (Mutable<ILogicalOperator> r : p.getRoots()) {
OperatorManipulationUtil.ntsToEts(r, ctx);
@@ -117,6 +119,7 @@
} else {
InnerJoinOperator j =
new InnerJoinOperator(new MutableObject<ILogicalExpression>(ConstantExpression.TRUE));
+ j.setSourceLocation(sourceLoc);
j.getInputs().add(new MutableObject<ILogicalOperator>(topOp));
j.getInputs().add(r);
ctx.setOutputTypeEnvironment(j, j.computeOutputTypeEnvironment(ctx));
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceGroupByForSubplanRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceGroupByForSubplanRule.java
index 5118bf3..a988075 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceGroupByForSubplanRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceGroupByForSubplanRule.java
@@ -62,6 +62,7 @@
import org.apache.hyracks.algebricks.core.config.AlgebricksConfig;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
import org.apache.hyracks.algebricks.rewriter.util.PhysicalOptimizationsUtil;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* The rule searches for SUBPLAN operator with a optional PROJECT operator and
@@ -236,26 +237,35 @@
default:
break;
}
+
+ SourceLocation sourceLoc = subplan.getSourceLocation();
+
if (testForNull == null) {
testForNull = context.newVar();
AssignOperator tmpAsgn =
new AssignOperator(testForNull, new MutableObject<ILogicalExpression>(ConstantExpression.TRUE));
+ tmpAsgn.setSourceLocation(sourceLoc);
tmpAsgn.getInputs().add(new MutableObject<ILogicalOperator>(rightRef.getValue()));
rightRef.setValue(tmpAsgn);
context.computeAndSetTypeEnvironmentForOperator(tmpAsgn);
}
IFunctionInfo finfoEq = context.getMetadataProvider().lookupFunction(AlgebricksBuiltinFunctions.IS_MISSING);
- ILogicalExpression isNullTest = new ScalarFunctionCallExpression(finfoEq,
+ ScalarFunctionCallExpression isNullTest = new ScalarFunctionCallExpression(finfoEq,
new MutableObject<ILogicalExpression>(new VariableReferenceExpression(testForNull)));
+ isNullTest.setSourceLocation(sourceLoc);
IFunctionInfo finfoNot = context.getMetadataProvider().lookupFunction(AlgebricksBuiltinFunctions.NOT);
ScalarFunctionCallExpression nonNullTest =
new ScalarFunctionCallExpression(finfoNot, new MutableObject<ILogicalExpression>(isNullTest));
+ nonNullTest.setSourceLocation(sourceLoc);
SelectOperator selectNonNull =
new SelectOperator(new MutableObject<ILogicalExpression>(nonNullTest), false, null);
+ selectNonNull.setSourceLocation(sourceLoc);
GroupByOperator g = new GroupByOperator();
+ g.setSourceLocation(sourceLoc);
Mutable<ILogicalOperator> newSubplanRef = new MutableObject<ILogicalOperator>(subplan);
NestedTupleSourceOperator nts = new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(g));
+ nts.setSourceLocation(sourceLoc);
opRef.setValue(g);
selectNonNull.getInputs().add(new MutableObject<ILogicalOperator>(nts));
@@ -318,10 +328,12 @@
private Map<LogicalVariable, LogicalVariable> buildVarExprList(Collection<LogicalVariable> vars,
IOptimizationContext context, GroupByOperator g,
List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> outVeList) throws AlgebricksException {
+ SourceLocation sourceLoc = g.getSourceLocation();
Map<LogicalVariable, LogicalVariable> m = new HashMap<LogicalVariable, LogicalVariable>();
for (LogicalVariable ov : vars) {
LogicalVariable newVar = context.newVar();
ILogicalExpression varExpr = new VariableReferenceExpression(newVar);
+ ((VariableReferenceExpression) varExpr).setSourceLocation(sourceLoc);
outVeList.add(new Pair<LogicalVariable, Mutable<ILogicalExpression>>(ov,
new MutableObject<ILogicalExpression>(varExpr)));
for (ILogicalPlan p : g.getNestedPlans()) {
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceLeftOuterJoinForSubplanRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceLeftOuterJoinForSubplanRule.java
index f809e96..e37be1b 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceLeftOuterJoinForSubplanRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/IntroduceLeftOuterJoinForSubplanRule.java
@@ -88,6 +88,7 @@
}
ntsRef.setValue(opUnder.getValue());
LeftOuterJoinOperator loj = new LeftOuterJoinOperator(join.getCondition());
+ loj.setSourceLocation(join.getSourceLocation());
loj.getInputs().add(leftRef);
loj.getInputs().add(rightRef);
opRef.setValue(loj);
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/NestedSubplanToJoinRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/NestedSubplanToJoinRule.java
index d9acf53..53b8eff 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/NestedSubplanToJoinRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/NestedSubplanToJoinRule.java
@@ -39,6 +39,7 @@
import org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
import org.apache.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* replace Subplan operators with nested loop joins where the join condition is true, if the Subplan
@@ -103,20 +104,24 @@
continue;
}
+ SourceLocation sourceLoc = subplan.getSourceLocation();
+
/**
* Expends the input and roots into a DAG of nested loop joins.
* Though joins should be left-outer joins, a left-outer join with condition TRUE is equivalent to an inner join.
**/
Mutable<ILogicalExpression> expr = new MutableObject<ILogicalExpression>(ConstantExpression.TRUE);
Mutable<ILogicalOperator> nestedRootRef = nestedRoots.get(0);
- ILogicalOperator join =
+ InnerJoinOperator join =
new InnerJoinOperator(expr, new MutableObject<ILogicalOperator>(subplanInput), nestedRootRef);
+ join.setSourceLocation(sourceLoc);
/** rewrite the nested tuple source to be empty tuple source */
rewriteNestedTupleSource(nestedRootRef, context);
for (int i = 1; i < nestedRoots.size(); i++) {
join = new InnerJoinOperator(expr, new MutableObject<ILogicalOperator>(join), nestedRoots.get(i));
+ join.setSourceLocation(sourceLoc);
}
op1.getInputs().get(index).setValue(join);
context.computeAndSetTypeEnvironmentForOperator(join);
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/base/IPushRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/base/IPushRuntimeFactory.java
index f90de81..82b6f9c 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/base/IPushRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/base/IPushRuntimeFactory.java
@@ -22,7 +22,11 @@
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
public interface IPushRuntimeFactory extends Serializable {
IPushRuntime[] createPushRuntime(IHyracksTaskContext ctx) throws HyracksDataException;
+
+ default void setSourceLocation(SourceLocation sourceLoc) {
+ }
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java
index 0a578f6..b260a8a 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansAccumulatingAggregatorFactory.java
@@ -150,8 +150,8 @@
ArrayTupleBuilder tb = outputWriter.getTupleBuilder();
byte[] data = tb.getByteArray();
if (data.length > memoryBudget) {
- throw HyracksDataException.create(ErrorCode.GROUP_BY_MEMORY_BUDGET_EXCEEDS, data.length,
- memoryBudget);
+ throw HyracksDataException.create(ErrorCode.GROUP_BY_MEMORY_BUDGET_EXCEEDS, sourceLoc,
+ data.length, memoryBudget);
}
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java
index 75b2fb2..f057515 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/aggreg/NestedPlansRunningAggregatorFactory.java
@@ -37,11 +37,11 @@
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
import org.apache.hyracks.dataflow.common.comm.util.FrameUtils;
+import org.apache.hyracks.dataflow.std.group.AbstractAggregatorDescriptorFactory;
import org.apache.hyracks.dataflow.std.group.AggregateState;
import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptor;
-import org.apache.hyracks.dataflow.std.group.IAggregatorDescriptorFactory;
-public class NestedPlansRunningAggregatorFactory implements IAggregatorDescriptorFactory {
+public class NestedPlansRunningAggregatorFactory extends AbstractAggregatorDescriptorFactory {
private static final long serialVersionUID = 1L;
private final AlgebricksPipeline[] subplans;
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractOneInputOneOutputRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractOneInputOneOutputRuntimeFactory.java
index 7b3fb46..525e452 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractOneInputOneOutputRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractOneInputOneOutputRuntimeFactory.java
@@ -19,11 +19,10 @@
package org.apache.hyracks.algebricks.runtime.operators.base;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-public abstract class AbstractOneInputOneOutputRuntimeFactory implements IPushRuntimeFactory {
+public abstract class AbstractOneInputOneOutputRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractPushRuntimeFactory.java
similarity index 62%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractPushRuntimeFactory.java
index 0660f23..89f3696 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/AbstractPushRuntimeFactory.java
@@ -16,14 +16,20 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.hyracks.algebricks.runtime.operators.base;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.api.exceptions.SourceLocation;
- public TranslationException(String msg) {
- super(msg);
+public abstract class AbstractPushRuntimeFactory implements IPushRuntimeFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ protected SourceLocation sourceLoc;
+
+ @Override
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/SinkRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/SinkRuntimeFactory.java
index f0e9406..1aceadc 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/SinkRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/base/SinkRuntimeFactory.java
@@ -21,11 +21,10 @@
import java.nio.ByteBuffer;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-public class SinkRuntimeFactory implements IPushRuntimeFactory {
+public class SinkRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/AssignRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/AssignRuntimeFactory.java
index aefc99d..b1b652f 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/AssignRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/AssignRuntimeFactory.java
@@ -172,7 +172,7 @@
}
}
} catch (HyracksDataException e) {
- throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, tupleIndex);
+ throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, sourceLoc, tupleIndex);
}
}
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/EmptyTupleSourceRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/EmptyTupleSourceRuntimeFactory.java
index 67f4a77..7bd924d 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/EmptyTupleSourceRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/EmptyTupleSourceRuntimeFactory.java
@@ -19,15 +19,15 @@
package org.apache.hyracks.algebricks.runtime.operators.std;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputSourcePushRuntime;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.api.comm.VSizeFrame;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
-public class EmptyTupleSourceRuntimeFactory implements IPushRuntimeFactory {
+public class EmptyTupleSourceRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/NestedTupleSourceRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/NestedTupleSourceRuntimeFactory.java
index 8e64092..f94672d 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/NestedTupleSourceRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/NestedTupleSourceRuntimeFactory.java
@@ -21,12 +21,12 @@
import java.nio.ByteBuffer;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
import org.apache.hyracks.algebricks.runtime.operators.base.AbstractOneInputOneOutputOneFramePushRuntime;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-public class NestedTupleSourceRuntimeFactory implements IPushRuntimeFactory {
+public class NestedTupleSourceRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/PrinterRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/PrinterRuntimeFactory.java
index 8a06ecf..7d6f851 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/PrinterRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/PrinterRuntimeFactory.java
@@ -21,12 +21,12 @@
import org.apache.hyracks.algebricks.data.IAWriter;
import org.apache.hyracks.algebricks.data.IPrinterFactory;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.algebricks.runtime.writers.PrinterBasedWriterFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
-public class PrinterRuntimeFactory implements IPushRuntimeFactory {
+public class PrinterRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/SinkWriterRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/SinkWriterRuntimeFactory.java
index d41b464..eae8178 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/SinkWriterRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/std/SinkWriterRuntimeFactory.java
@@ -28,12 +28,12 @@
import org.apache.hyracks.algebricks.data.IAWriterFactory;
import org.apache.hyracks.algebricks.data.IPrinterFactory;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-public class SinkWriterRuntimeFactory implements IPushRuntimeFactory {
+public class SinkWriterRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/union/MicroUnionAllRuntimeFactory.java b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/union/MicroUnionAllRuntimeFactory.java
index 1706e59..e727551 100644
--- a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/union/MicroUnionAllRuntimeFactory.java
+++ b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/union/MicroUnionAllRuntimeFactory.java
@@ -24,13 +24,13 @@
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
import org.apache.hyracks.algebricks.runtime.base.IPushRuntime;
-import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import org.apache.hyracks.algebricks.runtime.operators.base.AbstractPushRuntimeFactory;
import org.apache.hyracks.api.comm.IFrameWriter;
import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-public class MicroUnionAllRuntimeFactory implements IPushRuntimeFactory {
+public class MicroUnionAllRuntimeFactory extends AbstractPushRuntimeFactory {
private static final long serialVersionUID = 1L;
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/IOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/IOperatorDescriptor.java
index 9148d6b..801dc37 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/IOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/dataflow/IOperatorDescriptor.java
@@ -20,11 +20,11 @@
import java.io.Serializable;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.hyracks.api.application.ICCServiceContext;
import org.apache.hyracks.api.constraints.IConstraintAcceptor;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
/**
* Descriptor for operators in Hyracks.
@@ -37,7 +37,7 @@
*
* @return operator id
*/
- public OperatorDescriptorId getOperatorId();
+ OperatorDescriptorId getOperatorId();
/**
* Sets the id of the operator.
@@ -51,21 +51,21 @@
*
* @return Number of inputs.
*/
- public int getInputArity();
+ int getInputArity();
/**
* Returns the number of outputs out of this operator.
*
* @return Number of outputs.
*/
- public int getOutputArity();
+ int getOutputArity();
/**
* Gets the output record descriptor
*
* @return Array of RecordDescriptor, one per output.
*/
- public RecordDescriptor[] getOutputRecordDescriptors();
+ RecordDescriptor[] getOutputRecordDescriptors();
/**
* Contributes the activity graph that describes the behavior of this
@@ -74,7 +74,7 @@
* @param builder
* - graph builder
*/
- public void contributeActivities(IActivityGraphBuilder builder);
+ void contributeActivities(IActivityGraphBuilder builder);
/**
* Contributes any scheduling constraints imposed by this operator.
@@ -84,20 +84,30 @@
* @param plan
* - Job Plan
*/
- public void contributeSchedulingConstraints(IConstraintAcceptor constraintAcceptor, ICCServiceContext ccServiceCtx);
+ void contributeSchedulingConstraints(IConstraintAcceptor constraintAcceptor, ICCServiceContext ccServiceCtx);
/**
* Gets the display name.
*/
- public String getDisplayName();
+ String getDisplayName();
/**
* Sets the display name.
*/
- public void setDisplayName(String displayName);
+ void setDisplayName(String displayName);
+
+ /**
+ * Gets the source location.
+ */
+ SourceLocation getSourceLocation();
+
+ /**
+ * Sets the source location.
+ */
+ void setSourceLocation(SourceLocation sourceLoc);
/**
* Translates this operator descriptor to JSON.
*/
- public ObjectNode toJSON();
+ ObjectNode toJSON();
}
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
index b9f84e8..54e4eaf 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
@@ -51,10 +51,21 @@
return new HyracksDataException(cause);
}
+ public static HyracksDataException create(int code, SourceLocation sourceLoc, Serializable... params) {
+ return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), null, sourceLoc,
+ params);
+ }
+
public static HyracksDataException create(int code, Serializable... params) {
return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), params);
}
+ public static HyracksDataException create(int code, Throwable cause, SourceLocation sourceLoc,
+ Serializable... params) {
+ return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), cause, sourceLoc,
+ params);
+ }
+
public static HyracksDataException create(int code, Throwable cause, Serializable... params) {
return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), cause, params);
}
@@ -111,6 +122,11 @@
super(component, errorCode, message, cause, null, params);
}
+ public HyracksDataException(String component, int errorCode, String message, Throwable cause,
+ SourceLocation sourceLoc, Serializable... params) {
+ super(component, errorCode, message, cause, sourceLoc, null, params);
+ }
+
public static HyracksDataException create(HyracksDataException e, String nodeId) {
return new HyracksDataException(e.getComponent(), e.getErrorCode(), e.getMessage(), e.getCause(), nodeId,
e.getStackTrace(), e.getParams());
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
index bf1f9dc..428e643 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
@@ -31,6 +31,7 @@
private final int errorCode;
private final Serializable[] params;
private final String nodeId;
+ private final SourceLocation sourceLoc;
private transient volatile String msgCache;
public static HyracksException create(Throwable cause) {
@@ -59,9 +60,10 @@
return new HyracksException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), cause, params);
}
- public HyracksException(String component, int errorCode, String message, Throwable cause, String nodeId,
- Serializable... params) {
+ public HyracksException(String component, int errorCode, String message, Throwable cause, SourceLocation sourceLoc,
+ String nodeId, Serializable... params) {
super(message, cause);
+ this.sourceLoc = sourceLoc;
this.component = component;
this.errorCode = errorCode;
this.nodeId = nodeId;
@@ -73,7 +75,7 @@
*/
@Deprecated
public HyracksException(String message) {
- this(ErrorMessageUtil.NONE, UNKNOWN, message, null, null);
+ this(ErrorMessageUtil.NONE, UNKNOWN, message, null, null, (Serializable[]) null);
}
/**
@@ -81,7 +83,7 @@
*/
@Deprecated
protected HyracksException(Throwable cause) {
- this(ErrorMessageUtil.NONE, UNKNOWN, String.valueOf(cause), cause, null);
+ this(ErrorMessageUtil.NONE, UNKNOWN, String.valueOf(cause), cause, (Serializable[]) null);
}
/**
@@ -112,6 +114,11 @@
this(component, errorCode, message, cause, null, params);
}
+ public HyracksException(String component, int errorCode, String message, Throwable cause, String nodeId,
+ Serializable... params) {
+ this(component, errorCode, message, cause, null, nodeId, params);
+ }
+
@Override
public String getComponent() {
return component;
@@ -130,10 +137,14 @@
return nodeId;
}
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+
@Override
public String getMessage() {
if (msgCache == null) {
- msgCache = ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), params);
+ msgCache = ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), sourceLoc, params);
}
return msgCache;
}
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/SourceLocation.java
similarity index 63%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/SourceLocation.java
index 0660f23..fd3992c 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/SourceLocation.java
@@ -16,14 +16,29 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.hyracks.api.exceptions;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import java.io.Serializable;
- public TranslationException(String msg) {
- super(msg);
+public final class SourceLocation implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private final int line;
+
+ private final int column;
+
+ public SourceLocation(int line, int column) {
+ this.line = line;
+ this.column = column;
+ }
+
+ public int getLine() {
+ return line;
+ }
+
+ public int getColumn() {
+ return column;
}
}
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java
index 26ce2c1..56dfe3f 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java
@@ -27,6 +27,7 @@
import java.util.Map;
import java.util.Properties;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -83,12 +84,15 @@
* @param errorCode
* the error code itself
* @param message
- * the user provided error message (a format string as specified in {@link java.util.Formatter})
+ * the user provided error message (a format string as specified in {@link Formatter})
+ * @param sourceLoc
+ * the source location where the error originated
* @param params
- * an array of objects taht will be provided to the {@link java.util.Formatter}
+ * an array of objects taht will be provided to the {@link Formatter}
* @return the formatted string
*/
- public static String formatMessage(String component, int errorCode, String message, Serializable... params) {
+ public static String formatMessage(String component, int errorCode, String message, SourceLocation sourceLoc,
+ Serializable... params) {
try (Formatter fmt = new Formatter()) {
if (!NONE.equals(component)) {
fmt.format("%1$s%2$04d: ", component, errorCode);
@@ -98,6 +102,10 @@
return message;
}
fmt.format(message == null ? "null" : message, (Object[]) params);
+ if (sourceLoc != null) {
+ fmt.out().append(" (in line ").append(String.valueOf(sourceLoc.getLine())).append(", at column ")
+ .append(String.valueOf(sourceLoc.getColumn())).append(')');
+ }
return fmt.out().toString();
} catch (Exception e) {
// Do not throw further exceptions during exception processing.
@@ -105,5 +113,4 @@
return e.getMessage();
}
}
-
}
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java b/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java
index 23a1caa..c8c1790 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java
@@ -36,7 +36,7 @@
@Test
public void returnedMessageWithNoComponentTest() {
HyracksDataException cause = new HyracksDataException(ErrorMessageUtil.NONE, ErrorCode.ERROR_PROCESSING_TUPLE,
- ErrorCode.getErrorMessage(ErrorCode.ERROR_PROCESSING_TUPLE), null, null, 2);
+ ErrorCode.getErrorMessage(ErrorCode.ERROR_PROCESSING_TUPLE), 2);
HyracksDataException causeWithNodeId = HyracksDataException.create(cause, "nc1");
Assert.assertEquals(cause.getMessage(), causeWithNodeId.getMessage());
}
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java
index c6512929..205d1ce 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/base/AbstractOperatorDescriptor.java
@@ -23,6 +23,7 @@
import org.apache.hyracks.api.dataflow.IOperatorDescriptor;
import org.apache.hyracks.api.dataflow.OperatorDescriptorId;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.SourceLocation;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -43,6 +44,8 @@
protected String displayName;
+ protected SourceLocation sourceLoc;
+
public AbstractOperatorDescriptor(IOperatorDescriptorRegistry spec, int inputArity, int outputArity) {
odId = spec.createOperatorDescriptorId(this);
this.inputArity = inputArity;
@@ -87,6 +90,16 @@
}
@Override
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+
+ @Override
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
+ }
+
+ @Override
public void contributeSchedulingConstraints(IConstraintAcceptor constraintAcceptor, ICCServiceContext serviceCtx) {
// do nothing
}
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAccumulatingAggregatorDescriptorFactory.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAccumulatingAggregatorDescriptorFactory.java
index d546e5e..4426acb 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAccumulatingAggregatorDescriptorFactory.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAccumulatingAggregatorDescriptorFactory.java
@@ -23,7 +23,7 @@
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
import org.apache.hyracks.api.exceptions.HyracksDataException;
-public abstract class AbstractAccumulatingAggregatorDescriptorFactory implements IAggregatorDescriptorFactory {
+public abstract class AbstractAccumulatingAggregatorDescriptorFactory extends AbstractAggregatorDescriptorFactory {
private static final long serialVersionUID = 1L;
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAggregatorDescriptorFactory.java
similarity index 62%
copy from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
copy to hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAggregatorDescriptorFactory.java
index 0660f23..12ad3ec 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/TranslationException.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/group/AbstractAggregatorDescriptorFactory.java
@@ -16,14 +16,21 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.translator;
-import org.apache.asterix.common.exceptions.CompilationException;
+package org.apache.hyracks.dataflow.std.group;
-public class TranslationException extends CompilationException {
- private static final long serialVersionUID = 685960054131778068L;
+import org.apache.hyracks.api.exceptions.SourceLocation;
- public TranslationException(String msg) {
- super(msg);
+public abstract class AbstractAggregatorDescriptorFactory implements IAggregatorDescriptorFactory {
+ private static final long serialVersionUID = 1L;
+
+ protected SourceLocation sourceLoc;
+
+ public SourceLocation getSourceLocation() {
+ return sourceLoc;
+ }
+
+ public void setSourceLocation(SourceLocation sourceLoc) {
+ this.sourceLoc = sourceLoc;
}
}
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
index bee0590..dc250e6 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/HybridHashJoinOperatorDescriptor.java
@@ -91,13 +91,12 @@
* @param hashFunctionFactories
* @param comparatorFactories
* @param recordDescriptor
- * @throws HyracksDataException
*/
public HybridHashJoinOperatorDescriptor(IOperatorDescriptorRegistry spec, int memsize, int inputsize0,
int recordsPerFrame, double factor, int[] keys0, int[] keys1,
IBinaryHashFunctionFactory[] hashFunctionFactories, IBinaryComparatorFactory[] comparatorFactories,
RecordDescriptor recordDescriptor, IPredicateEvaluatorFactory predEvalFactory, boolean isLeftOuter,
- IMissingWriterFactory[] nullWriterFactories1) throws HyracksDataException {
+ IMissingWriterFactory[] nullWriterFactories1) {
super(spec, 2, 1);
this.memsize = memsize;
this.inputsize0 = inputsize0;
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
index 9eeb363..b68e64e 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
@@ -144,7 +144,7 @@
IBinaryHashFunctionFamily[] hashFunctionGeneratorFactories, IBinaryComparatorFactory[] comparatorFactories,
RecordDescriptor recordDescriptor, ITuplePairComparatorFactory tupPaircomparatorFactory01,
ITuplePairComparatorFactory tupPaircomparatorFactory10, IPredicateEvaluatorFactory predEvaluatorFactory,
- boolean isLeftOuter, IMissingWriterFactory[] nonMatchWriterFactories) throws HyracksDataException {
+ boolean isLeftOuter, IMissingWriterFactory[] nonMatchWriterFactories) {
super(spec, 2, 1);
this.memSizeInFrames = memSizeInFrames;
this.inputsize0 = inputsize0;
@@ -165,8 +165,7 @@
int inputsize0, double factor, int[] keys0, int[] keys1,
IBinaryHashFunctionFamily[] hashFunctionGeneratorFactories, IBinaryComparatorFactory[] comparatorFactories,
RecordDescriptor recordDescriptor, ITuplePairComparatorFactory tupPaircomparatorFactory01,
- ITuplePairComparatorFactory tupPaircomparatorFactory10, IPredicateEvaluatorFactory predEvaluatorFactory)
- throws HyracksDataException {
+ ITuplePairComparatorFactory tupPaircomparatorFactory10, IPredicateEvaluatorFactory predEvaluatorFactory) {
this(spec, memSizeInFrames, inputsize0, factor, keys0, keys1, hashFunctionGeneratorFactories,
comparatorFactories, recordDescriptor, tupPaircomparatorFactory01, tupPaircomparatorFactory10,
predEvaluatorFactory, false, null);