http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java ---------------------------------------------------------------------- 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 dc1cb65..741ce56 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 @@ -85,7 +85,7 @@ import org.apache.asterix.metadata.entities.Feed; import org.apache.asterix.metadata.entities.Function; import org.apache.asterix.metadata.entities.InternalDatasetDetails; import org.apache.asterix.metadata.functions.ExternalFunctionCompilerUtil; -import org.apache.asterix.metadata.utils.DatasetUtils; +import org.apache.asterix.metadata.utils.DatasetUtil; import org.apache.asterix.om.base.AInt64; import org.apache.asterix.om.base.AString; import org.apache.asterix.om.constants.AsterixConstantValue; @@ -94,7 +94,7 @@ import org.apache.asterix.om.functions.FunctionInfo; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.runtime.formats.FormatUtils; -import org.apache.asterix.runtime.util.AppContextInfo; +import org.apache.asterix.runtime.utils.AppContextInfo; import org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement; import org.apache.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement; import org.apache.asterix.translator.CompiledStatements.CompiledSubscribeFeedStatement; @@ -199,11 +199,11 @@ class LangExpressionToPlanTranslator "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()); - List<List<String>> partitionKeys = DatasetUtils.getPartitioningKeys(targetDatasource.getDataset()); + IAType metaItemType = + metadataProvider.findType(dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); + DatasetDataSource targetDatasource = + validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName()); + List<List<String>> partitionKeys = DatasetUtil.getPartitioningKeys(targetDatasource.getDataset()); if (dataset.hasMetaPart()) { throw new AlgebricksException( dataset.getDatasetName() + ": load dataset is not supported on Datasets with Meta records"); @@ -254,7 +254,7 @@ class LangExpressionToPlanTranslator assign.setExplicitOrderingProperty(new LocalOrderProperty(orderColumns)); } - List<String> additionalFilteringField = DatasetUtils.getFilterField(targetDatasource.getDataset()); + List<String> additionalFilteringField = DatasetUtil.getFilterField(targetDatasource.getDataset()); List<LogicalVariable> additionalFilteringVars; List<Mutable<ILogicalExpression>> additionalFilteringAssignExpressions; List<Mutable<ILogicalExpression>> additionalFilteringExpressions = null; @@ -265,8 +265,8 @@ class LangExpressionToPlanTranslator additionalFilteringExpressions = new ArrayList<>(); PlanTranslationUtil.prepareVarAndExpression(additionalFilteringField, payloadVar, additionalFilteringVars, additionalFilteringAssignExpressions, additionalFilteringExpressions, context); - additionalFilteringAssign = new AssignOperator(additionalFilteringVars, - additionalFilteringAssignExpressions); + additionalFilteringAssign = + new AssignOperator(additionalFilteringVars, additionalFilteringAssignExpressions); } InsertDeleteUpsertOperator insertOp = new InsertDeleteUpsertOperator(targetDatasource, payloadRef, @@ -345,14 +345,15 @@ class LangExpressionToPlanTranslator ProjectOperator projectOperator = (ProjectOperator) topOp; projectOperator.getVariables().set(0, seqVar); resVar = seqVar; - DatasetDataSource targetDatasource = validateDatasetInfo(metadataProvider, stmt.getDataverseName(), - stmt.getDatasetName()); - List<Integer> keySourceIndicator = ((InternalDatasetDetails) targetDatasource.getDataset() - .getDatasetDetails()).getKeySourceIndicator(); + DatasetDataSource targetDatasource = + validateDatasetInfo(metadataProvider, stmt.getDataverseName(), stmt.getDatasetName()); + List<Integer> keySourceIndicator = + ((InternalDatasetDetails) targetDatasource.getDataset().getDatasetDetails()) + .getKeySourceIndicator(); ArrayList<LogicalVariable> vars = new ArrayList<>(); ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<>(); List<Mutable<ILogicalExpression>> varRefsForLoading = new ArrayList<>(); - List<List<String>> partitionKeys = DatasetUtils.getPartitioningKeys(targetDatasource.getDataset()); + List<List<String>> partitionKeys = DatasetUtil.getPartitioningKeys(targetDatasource.getDataset()); int numOfPrimaryKeys = partitionKeys.size(); for (int i = 0; i < numOfPrimaryKeys; i++) { if (keySourceIndicator == null || keySourceIndicator.get(i).intValue() == 0) { @@ -367,7 +368,7 @@ class LangExpressionToPlanTranslator } AssignOperator assign = new AssignOperator(vars, exprs); - List<String> additionalFilteringField = DatasetUtils.getFilterField(targetDatasource.getDataset()); + List<String> additionalFilteringField = DatasetUtil.getFilterField(targetDatasource.getDataset()); List<LogicalVariable> additionalFilteringVars; List<Mutable<ILogicalExpression>> additionalFilteringAssignExpressions; List<Mutable<ILogicalExpression>> additionalFilteringExpressions = null; @@ -380,8 +381,8 @@ class LangExpressionToPlanTranslator PlanTranslationUtil.prepareVarAndExpression(additionalFilteringField, resVar, additionalFilteringVars, additionalFilteringAssignExpressions, additionalFilteringExpressions, context); - additionalFilteringAssign = new AssignOperator(additionalFilteringVars, - additionalFilteringAssignExpressions); + additionalFilteringAssign = + new AssignOperator(additionalFilteringVars, additionalFilteringAssignExpressions); additionalFilteringAssign.getInputs().add(new MutableObject<>(topOp)); assign.getInputs().add(new MutableObject<>(additionalFilteringAssign)); } else { @@ -439,7 +440,7 @@ class LangExpressionToPlanTranslator private ILogicalOperator translateDelete(DatasetDataSource targetDatasource, Mutable<ILogicalExpression> varRef, List<Mutable<ILogicalExpression>> varRefsForLoading, List<Mutable<ILogicalExpression>> additionalFilteringExpressions, ILogicalOperator assign) - throws AlgebricksException { + throws AlgebricksException { if (targetDatasource.getDataset().hasMetaPart()) { throw new AlgebricksException(targetDatasource.getDataset().getDatasetName() + ": delete from dataset is not supported on Datasets with Meta records"); @@ -526,8 +527,8 @@ class LangExpressionToPlanTranslator feedModificationOp.getInputs().add(assign.getInputs().get(0)); } } else { - final InsertDeleteUpsertOperator.Kind opKind = isUpsertFeed ? InsertDeleteUpsertOperator.Kind.UPSERT - : InsertDeleteUpsertOperator.Kind.INSERT; + final InsertDeleteUpsertOperator.Kind opKind = + isUpsertFeed ? InsertDeleteUpsertOperator.Kind.UPSERT : InsertDeleteUpsertOperator.Kind.INSERT; feedModificationOp = new InsertDeleteUpsertOperator(targetDatasource, varRef, varRefsForLoading, metaExpSingletonList, opKind, false); if (isUpsertFeed) { @@ -553,7 +554,7 @@ class LangExpressionToPlanTranslator List<String> additionalFilteringField, LogicalVariable unnestVar, ILogicalOperator topOp, List<Mutable<ILogicalExpression>> exprs, LogicalVariable resVar, AssignOperator additionalFilteringAssign, ICompiledDmlStatement stmt) throws AlgebricksException { - if (!targetDatasource.getDataset().allow(topOp, Dataset.OP_UPSERT)) { + 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"); } @@ -597,8 +598,8 @@ class LangExpressionToPlanTranslator } } // A change feed, we don't need the assign to access PKs - upsertOp = new InsertDeleteUpsertOperator(targetDatasource, varRef, varRefsForLoading, metaExpSingletonList, - InsertDeleteUpsertOperator.Kind.UPSERT, false); + upsertOp = new InsertDeleteUpsertOperator(targetDatasource, varRef, varRefsForLoading, + metaExpSingletonList, InsertDeleteUpsertOperator.Kind.UPSERT, false); // Create and add a new variable used for representing the original record upsertOp.setPrevRecordVar(context.newVar()); upsertOp.setPrevRecordType(targetDatasource.getItemType()); @@ -664,8 +665,8 @@ class LangExpressionToPlanTranslator // Adds the commit operator. CompiledInsertStatement compiledInsert = (CompiledInsertStatement) stmt; Expression returnExpression = compiledInsert.getReturnExpression(); - ILogicalOperator rootOperator = new DelegateOperator( - new CommitOperator(returnExpression == null ? true : false)); + ILogicalOperator rootOperator = + new DelegateOperator(new CommitOperator(returnExpression == null ? true : false)); rootOperator.getInputs().add(new MutableObject<>(insertOp)); // Compiles the return expression. @@ -685,8 +686,8 @@ class LangExpressionToPlanTranslator context.newVar(compiledInsert.getVar()); context.setVar(compiledInsert.getVar(), ((VariableReferenceExpression) insertOp.getPayloadExpression().getValue()).getVariableReference()); - Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(returnExpression, - new MutableObject<>(rootOperator)); + Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = + langExprToAlgExpression(returnExpression, new MutableObject<>(rootOperator)); // Adds an assign operator for the returning expression. LogicalVariable resultVar = context.newVar(); @@ -714,8 +715,8 @@ class LangExpressionToPlanTranslator } DataSourceId sourceId = new DataSourceId(dataverseName, datasetName); IAType itemType = metadataProvider.findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); - IAType metaItemType = metadataProvider.findType(dataset.getMetaItemTypeDataverseName(), - dataset.getMetaItemTypeName()); + IAType metaItemType = + metadataProvider.findType(dataset.getMetaItemTypeDataverseName(), dataset.getMetaItemTypeName()); INodeDomain domain = metadataProvider.findNodeDomain(dataset.getNodeGroupName()); return new DatasetDataSource(sourceId, dataset, itemType, metaItemType, DataSource.Type.INTERNAL_DATASET, dataset.getDatasetDetails(), domain); @@ -723,8 +724,8 @@ class LangExpressionToPlanTranslator private FileSplit getDefaultOutputFileLocation() throws MetadataException { String outputDir = System.getProperty("java.io.tmpDir"); - String filePath = outputDir + System.getProperty("file.separator") + OUTPUT_FILE_PREFIX - + outputFileID.incrementAndGet(); + String filePath = + outputDir + System.getProperty("file.separator") + OUTPUT_FILE_PREFIX + outputFileID.incrementAndGet(); MetadataProperties metadataProperties = AppContextInfo.INSTANCE.getMetadataProperties(); return new ManagedFileSplit(metadataProperties.getMetadataNodeName(), filePath); } @@ -741,8 +742,8 @@ class LangExpressionToPlanTranslator returnedOp.getInputs().add(tupSource); } else { v = context.newVar(lc.getVarExpr()); - Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(lc.getBindingExpr(), - tupSource); + Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = + langExprToAlgExpression(lc.getBindingExpr(), tupSource); returnedOp = new AssignOperator(v, new MutableObject<>(eo.first)); returnedOp.getInputs().add(eo.second); } @@ -754,11 +755,11 @@ class LangExpressionToPlanTranslator throws CompilationException { Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = langExprToAlgExpression(fa.getExpr(), tupSource); LogicalVariable v = context.newVar(); - AbstractFunctionCallExpression fldAccess = new ScalarFunctionCallExpression( - FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME)); + AbstractFunctionCallExpression fldAccess = + new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME)); fldAccess.getArguments().add(new MutableObject<>(p.first)); - ILogicalExpression faExpr = new ConstantExpression( - new AsterixConstantValue(new AString(fa.getIdent().getValue()))); + 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); @@ -772,12 +773,11 @@ class LangExpressionToPlanTranslator LogicalVariable v = context.newVar(); AbstractFunctionCallExpression f; if (ia.isAny()) { - f = new ScalarFunctionCallExpression( - FunctionUtil.getFunctionInfo(BuiltinFunctions.ANY_COLLECTION_MEMBER)); + f = new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.ANY_COLLECTION_MEMBER)); f.getArguments().add(new MutableObject<>(p.first)); } else { - Pair<ILogicalExpression, Mutable<ILogicalOperator>> indexPair = langExprToAlgExpression(ia.getIndexExpr(), - tupSource); + 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)); @@ -884,8 +884,8 @@ class LangExpressionToPlanTranslator if (BuiltinFunctions.isBuiltinAggregateFunction(fi)) { f = BuiltinFunctions.makeAggregateFunctionExpression(fi, args); } else if (BuiltinFunctions.isBuiltinUnnestingFunction(fi)) { - UnnestingFunctionCallExpression ufce = new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), - args); + UnnestingFunctionCallExpression ufce = + new UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args); ufce.setReturnsUniqueValues(BuiltinFunctions.returnsUniqueValues(fi)); f = ufce; } else { @@ -907,8 +907,9 @@ class LangExpressionToPlanTranslator List<Pair<Expression, Identifier>> groupFieldList = gc.getGroupFieldList(); List<Mutable<ILogicalExpression>> groupRecordConstructorArgList = new ArrayList<>(); for (Pair<Expression, Identifier> groupField : groupFieldList) { - ILogicalExpression groupFieldNameExpr = langExprToAlgExpression( - new LiteralExpr(new StringLiteral(groupField.second.getValue())), topOp).first; + ILogicalExpression groupFieldNameExpr = + langExprToAlgExpression(new LiteralExpr(new StringLiteral(groupField.second.getValue())), + topOp).first; groupRecordConstructorArgList.add(new MutableObject<>(groupFieldNameExpr)); ILogicalExpression groupFieldExpr = langExprToAlgExpression(groupField.first, topOp).first; groupRecordConstructorArgList.add(new MutableObject<>(groupFieldExpr)); @@ -944,8 +945,8 @@ class LangExpressionToPlanTranslator new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(gOp)))); List<Mutable<ILogicalExpression>> flArgs = new ArrayList<>(1); flArgs.add(new MutableObject<>(listifyInput.first)); - AggregateFunctionCallExpression fListify = BuiltinFunctions - .makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, flArgs); + AggregateFunctionCallExpression fListify = + BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, flArgs); LogicalVariable aggVar = context.newVar(); AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar), mkSingletonArrayList(new MutableObject<>(fListify))); @@ -1005,14 +1006,14 @@ class LangExpressionToPlanTranslator 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)))))); + FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), Collections + .singletonList(new MutableObject<>(new VariableReferenceExpression(selectVar)))))); unnestOp.getInputs().add(new MutableObject<>(assignOp)); // Produces the final result. LogicalVariable resultVar = context.newVar(); - AssignOperator finalAssignOp = new AssignOperator(resultVar, - new MutableObject<>(new VariableReferenceExpression(unnestVar))); + AssignOperator finalAssignOp = + new AssignOperator(resultVar, new MutableObject<>(new VariableReferenceExpression(unnestVar))); finalAssignOp.getInputs().add(new MutableObject<>(unnestOp)); return new Pair<>(finalAssignOp, resultVar); } @@ -1167,7 +1168,8 @@ class LangExpressionToPlanTranslator firstOp.getInputs().add(topOp); topOp = lastOp; - Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = langExprToAlgExpression(qe.getSatisfiesExpr(), topOp); + Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = + langExprToAlgExpression(qe.getSatisfiesExpr(), topOp); AggregateFunctionCallExpression fAgg; SelectOperator s; @@ -1182,8 +1184,7 @@ class LangExpressionToPlanTranslator s = new SelectOperator(new MutableObject<>(new ScalarFunctionCallExpression( FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), satExprList)), false, null); s.getInputs().add(eo2.second); - fAgg = BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.EMPTY_STREAM, - new ArrayList<>()); + fAgg = BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.EMPTY_STREAM, new ArrayList<>()); } LogicalVariable qeVar = context.newVar(); AggregateOperator a = new AggregateOperator(mkSingletonArrayList(qeVar), @@ -1210,7 +1211,8 @@ class LangExpressionToPlanTranslator Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = langExprToAlgExpression(fb.getLeftExpr(), topOp); f.getArguments().add(new MutableObject<>(eo1.first)); topOp = eo1.second; - Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = langExprToAlgExpression(fb.getRightExpr(), topOp); + Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = + langExprToAlgExpression(fb.getRightExpr(), topOp); f.getArguments().add(new MutableObject<>(eo2.first)); topOp = eo2.second; } @@ -1379,8 +1381,8 @@ class LangExpressionToPlanTranslator Mutable<ILogicalOperator> topOpRef) throws CompilationException { switch (expr.getKind()) { case VARIABLE_EXPRESSION: - VariableReferenceExpression ve = new VariableReferenceExpression( - context.getVar(((VariableExpr) expr).getVar().getId())); + VariableReferenceExpression ve = + new VariableReferenceExpression(context.getVar(((VariableExpr) expr).getVar().getId())); return new Pair<>(ve, topOpRef); case LITERAL_EXPRESSION: LiteralExpr val = (LiteralExpr) expr; @@ -1417,8 +1419,8 @@ class LangExpressionToPlanTranslator protected Pair<ILogicalOperator, LogicalVariable> aggListifyForSubquery(LogicalVariable var, Mutable<ILogicalOperator> opRef, boolean bProject) { - AggregateFunctionCallExpression funAgg = BuiltinFunctions - .makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, new ArrayList<>()); + AggregateFunctionCallExpression funAgg = + BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, new ArrayList<>()); funAgg.getArguments().add(new MutableObject<>(new VariableReferenceExpression(var))); LogicalVariable varListified = context.newSubplanOutputVar(); @@ -1575,10 +1577,10 @@ class LangExpressionToPlanTranslator // There is a shared operator reference in the query plan. // Deep copies the child plan. LogicalOperatorDeepCopyWithNewVariablesVisitor visitor = - new LogicalOperatorDeepCopyWithNewVariablesVisitor(context, null); + new LogicalOperatorDeepCopyWithNewVariablesVisitor(context, null); ILogicalOperator newChild = childRef.getValue().accept(visitor, null); - LinkedHashMap<LogicalVariable, LogicalVariable> cloneVarMap = visitor - .getInputToOutputVariableMapping(); + LinkedHashMap<LogicalVariable, LogicalVariable> cloneVarMap = + visitor.getInputToOutputVariableMapping(); // Substitute variables according to the deep copy which generates new variables. VariableUtilities.substituteVariables(currentOperator, cloneVarMap, null); @@ -1591,8 +1593,8 @@ class LangExpressionToPlanTranslator // Recursively eliminate shared operator reference for the operator subtree, // even if it is a deep copy of some other one. - LinkedHashMap<LogicalVariable, LogicalVariable> childVarMap = eliminateSharedOperatorReference(childRef, - opRefSet); + LinkedHashMap<LogicalVariable, LogicalVariable> childVarMap = + eliminateSharedOperatorReference(childRef, opRefSet); // Substitute variables according to the new subtree. VariableUtilities.substituteVariables(currentOperator, childVarMap, null); @@ -1635,8 +1637,8 @@ class LangExpressionToPlanTranslator context.enterSubplan(); SubplanOperator subplanOp = new SubplanOperator(); subplanOp.getInputs().add(new MutableObject<>(inputOp)); - Mutable<ILogicalOperator> nestedSource = new MutableObject<>( - new NestedTupleSourceOperator(new MutableObject<>(subplanOp))); + Mutable<ILogicalOperator> nestedSource = + new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(subplanOp))); 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); @@ -1656,8 +1658,8 @@ class LangExpressionToPlanTranslator // Processes EXISTS and NOT EXISTS. private AssignOperator processExists(ILogicalExpression inputExpr, LogicalVariable v1, boolean not) { - AbstractFunctionCallExpression count = new ScalarFunctionCallExpression( - FunctionUtil.getFunctionInfo(BuiltinFunctions.SCALAR_COUNT)); + AbstractFunctionCallExpression count = + new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCALAR_COUNT)); count.getArguments().add(new MutableObject<>(inputExpr)); AbstractFunctionCallExpression comparison = new ScalarFunctionCallExpression( FunctionUtil.getFunctionInfo(not ? BuiltinFunctions.EQ : BuiltinFunctions.NEQ)); @@ -1678,9 +1680,8 @@ class LangExpressionToPlanTranslator } 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)))); + return new MutableObject<>(new ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT), + new ArrayList<>(Collections.singletonList(hasBeenExecutedExprRef)))); } // For an input expression `expr`, return `expr AND expr IS NOT UNKOWN`. @@ -1729,8 +1730,8 @@ class LangExpressionToPlanTranslator while (inputOpRefIterator.hasNext()) { // Generates the variable triple <leftVar, rightVar, outputVar> . topUnionVar = context.newVar(); - Triple<LogicalVariable, LogicalVariable, LogicalVariable> varTriple = new Triple<>(leftInputVar, - inputVarIterator.next(), topUnionVar); + Triple<LogicalVariable, LogicalVariable, LogicalVariable> varTriple = + new Triple<>(leftInputVar, inputVarIterator.next(), topUnionVar); List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> varTriples = new ArrayList<>(); varTriples.add(varTriple);
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java ---------------------------------------------------------------------- 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 065b1b0..3d0315c 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 @@ -23,34 +23,44 @@ import java.util.List; import org.apache.asterix.common.config.DatasetConfig.IndexType; import org.apache.asterix.common.exceptions.AsterixException; -import org.apache.asterix.metadata.utils.KeyFieldTypeUtils; +import org.apache.asterix.common.exceptions.CompilationException; +import org.apache.asterix.common.exceptions.ErrorCode; +import org.apache.asterix.metadata.utils.KeyFieldTypeUtil; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.utils.RecordUtil; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; /** * A util that can verify if a filter field, a list of partitioning expressions, * or a list of key fields are valid in a record type. */ public class ValidateUtil { + private ValidateUtil() { + } /** * Validates the field that will be used as filter for the components of an LSM index. * - * @param recType + * @param dataset + * the dataset + * @param recordType * the record type - * @param keyFieldNames - * a list of key fields that will be validated - * @param indexType - * the type of the index that its key fields is being validated - * @throws AsterixException - * (if the validation failed), IOException + * @param filterField + * the full name of the field + * @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 recType, List<String> filterField) throws AsterixException { - IAType fieldType = recType.getSubFieldType(filterField); + public static void validateFilterField(ARecordType recordType, List<String> filterField) + throws AlgebricksException { + IAType fieldType = recordType.getSubFieldType(filterField); if (fieldType == null) { - throw new AsterixException("A field with this name \"" + filterField + "\" could not be found."); + throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, + RecordUtil.toFullyQualifiedName(filterField)); } switch (fieldType.getTypeTag()) { case INT8: @@ -69,47 +79,59 @@ public class ValidateUtil { case DAYTIMEDURATION: break; case UNION: - throw new AsterixException("The filter field \"" + filterField + "\" cannot be nullable"); + throw new CompilationException(ErrorCode.COMPILATION_FILTER_CANNOT_BE_NULLABLE, + RecordUtil.toFullyQualifiedName(filterField)); default: - throw new AsterixException("The field \"" + filterField + "\" which is of type " - + fieldType.getTypeTag() + " cannot be used as a filter for a dataset."); + throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_FILTER_TYPE, + fieldType.getTypeTag().name()); } } /** * Validates the partitioning expression that will be used to partition a dataset and returns expression type. * + * @param recType + * the record type + * @param metaRecType + * the meta record type * @param partitioningExprs * a list of partitioning expressions that will be validated + * @param keySourceIndicators + * the key sources (record vs. meta) + * @param autogenerated + * true if auto generated, false otherwise * @return a list of partitioning expressions types - * @throws AsterixException - * (if the validation failed), IOException + * @throws AlgebricksException + * if composite key is autogenerated. + * if autogenerated and of a type that can't be autogenerated. + * if a field could not be found in its record type. + * if partitioning key is nullable. + * 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 AsterixException { - List<IAType> partitioningExprTypes = new ArrayList<IAType>(partitioningExprs.size()); + throws AlgebricksException { + List<IAType> partitioningExprTypes = new ArrayList<>(partitioningExprs.size()); if (autogenerated) { if (partitioningExprs.size() > 1) { - throw new AsterixException("Cannot autogenerate a composite primary key"); + throw new CompilationException(ErrorCode.COMPILATION_CANNOT_AUTOGENERATE_COMPOSITE_PRIMARY_KEY); } List<String> fieldName = partitioningExprs.get(0); IAType fieldType = recType.getSubFieldType(fieldName); partitioningExprTypes.add(fieldType); - ATypeTag pkTypeTag = fieldType.getTypeTag(); if (pkTypeTag != ATypeTag.UUID) { - throw new AsterixException("Cannot autogenerate a primary key for type " + pkTypeTag - + ". Autogenerated primary keys must be of type " + ATypeTag.UUID + "."); + throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_AUTOGENERATED_TYPE, pkTypeTag.name(), + ATypeTag.UUID.name()); } } else { - partitioningExprTypes = KeyFieldTypeUtils.getKeyTypes(recType, metaRecType, partitioningExprs, - keySourceIndicators); + partitioningExprTypes = + KeyFieldTypeUtil.getKeyTypes(recType, metaRecType, partitioningExprs, keySourceIndicators); for (int fidx = 0; fidx < partitioningExprTypes.size(); ++fidx) { IAType fieldType = partitioningExprTypes.get(fidx); if (fieldType == null) { - throw new AsterixException( - "Type not found for partitioning key " + partitioningExprs.get(fidx)); + throw new CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND, + RecordUtil.toFullyQualifiedName(partitioningExprs.get(fidx))); } switch (fieldType.getTypeTag()) { case INT8: @@ -128,11 +150,11 @@ public class ValidateUtil { case DAYTIMEDURATION: break; case UNION: - throw new AsterixException( - "The partitioning key " + partitioningExprs.get(fidx) + " cannot be nullable"); + throw new CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE, + RecordUtil.toFullyQualifiedName(partitioningExprs.get(fidx))); default: - throw new AsterixException("The partitioning key " + partitioningExprs.get(fidx) - + " cannot be of type " + fieldType.getTypeTag() + "."); + throw new CompilationException(ErrorCode.COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE, + fieldType.getTypeTag().name()); } } } @@ -150,14 +172,13 @@ public class ValidateUtil { * a map of key types (if provided) that will be validated * @param indexType * the type of the index that its key fields is being validated - * @throws AsterixException - * (if the validation failed), IOException + * @throws AlgebricksException */ - public static void validateKeyFields(ARecordType recType, ARecordType metaRecType, List<List<String>> keyFieldNames, - List<Integer> keySourceIndicators, List<IAType> keyFieldTypes, IndexType indexType) - throws AsterixException { - List<IAType> fieldTypes = KeyFieldTypeUtils.getKeyTypes(recType, metaRecType, keyFieldNames, - keySourceIndicators); + public static void validateKeyFields(ARecordType recType, ARecordType metaRecType, + List<List<String>> keyFieldNames, List<Integer> keySourceIndicators, List<IAType> keyFieldTypes, + IndexType indexType) throws AlgebricksException { + List<IAType> fieldTypes = + KeyFieldTypeUtil.getKeyTypes(recType, metaRecType, keyFieldNames, keySourceIndicators); int pos = 0; boolean openFieldCompositeIdx = false; for (IAType fieldType : fieldTypes) { http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/pom.xml ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml index 77ca6ef..282181c 100644 --- a/asterixdb/asterix-app/pom.xml +++ b/asterixdb/asterix-app/pom.xml @@ -147,7 +147,6 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> - <version>2.10</version> <configuration> <ignoredUsedUndeclaredDependencies> <ignoredUsedUndeclaredDependency>commons-logging:commons-logging-api:*</ignoredUsedUndeclaredDependency> @@ -351,10 +350,6 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.hyracks</groupId> - <artifactId>hyracks-storage-am-lsm-rtree</artifactId> - </dependency> - <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.4.1</version> @@ -409,10 +404,6 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.apache.hyracks</groupId> - <artifactId>hyracks-storage-am-rtree</artifactId> - </dependency> - <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> </dependency> @@ -435,10 +426,6 @@ </dependency> <dependency> <groupId>org.apache.hyracks</groupId> - <artifactId>hyracks-storage-am-lsm-invertedindex</artifactId> - </dependency> - <dependency> - <groupId>org.apache.hyracks</groupId> <artifactId>hyracks-storage-am-btree</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java ---------------------------------------------------------------------- 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 c4535cf..0f16179 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 @@ -31,7 +31,6 @@ import java.util.Set; import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslator; import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslatorFactory; -import org.apache.asterix.api.common.Job.SubmissionMode; import org.apache.asterix.app.result.ResultUtil; import org.apache.asterix.common.config.CompilerProperties; import org.apache.asterix.common.config.ExternalProperties; @@ -40,6 +39,8 @@ import org.apache.asterix.common.config.OptimizationConfUtil; import org.apache.asterix.common.config.PropertyInterpreters; import org.apache.asterix.common.exceptions.ACIDException; import org.apache.asterix.common.exceptions.CompilationException; +import org.apache.asterix.common.utils.Job; +import org.apache.asterix.common.utils.Job.SubmissionMode; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.compiler.provider.IRuleSetFactory; import org.apache.asterix.dataflow.data.common.ConflictingTypeResolver; @@ -59,12 +60,12 @@ import org.apache.asterix.lang.common.statement.FunctionDecl; import org.apache.asterix.lang.common.statement.Query; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.runtime.job.listener.JobEventListenerFactory; -import org.apache.asterix.runtime.util.AppContextInfo; +import org.apache.asterix.runtime.utils.AppContextInfo; import org.apache.asterix.transaction.management.service.transaction.JobIdFactory; import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement; import org.apache.asterix.translator.IStatementExecutor.Stats; +import org.apache.asterix.utils.ResourceUtils; import org.apache.asterix.translator.SessionConfig; -import org.apache.asterix.util.ResourceUtils; import org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint; import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -79,7 +80,7 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionEvalSiz import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionTypeComputer; import org.apache.hyracks.algebricks.core.algebra.expressions.IMergeAggregationExpressionFactory; import org.apache.hyracks.algebricks.core.algebra.expressions.IMissableTypeComputer; -import org.apache.hyracks.algebricks.core.algebra.expressions.LogicalExpressionJobGenToExpressionRuntimeProviderAdapter; +import org.apache.hyracks.algebricks.core.algebra.expressions.ExpressionRuntimeProvider; import org.apache.hyracks.algebricks.core.algebra.prettyprint.AlgebricksAppendable; import org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor; import org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPlotter; @@ -126,7 +127,8 @@ public class APIFramework { IExpressionEvalSizeComputer expressionEvalSizeComputer, IMergeAggregationExpressionFactory mergeAggregationExpressionFactory, IExpressionTypeComputer expressionTypeComputer, IMissableTypeComputer missableTypeComputer, - IConflictingTypeResolver conflictingTypeResolver, PhysicalOptimizationConfig physicalOptimizationConfig, + IConflictingTypeResolver conflictingTypeResolver, + PhysicalOptimizationConfig physicalOptimizationConfig, AlgebricksPartitionConstraint clusterLocations) { return new AlgebricksOptimizationContext(varCounter, expressionEvalSizeComputer, mergeAggregationExpressionFactory, expressionTypeComputer, missableTypeComputer, @@ -181,8 +183,8 @@ public class APIFramework { org.apache.asterix.common.transactions.JobId asterixJobId = JobIdFactory.generateJobId(); metadataProvider.setJobId(asterixJobId); - ILangExpressionToPlanTranslator t = translatorFactory.createExpressionToPlanTranslator(metadataProvider, - varCounter); + ILangExpressionToPlanTranslator t = + translatorFactory.createExpressionToPlanTranslator(metadataProvider, varCounter); ILogicalPlan plan; // statement = null when it's a query @@ -224,8 +226,8 @@ public class APIFramework { OptimizationConfUtil.getPhysicalOptimizationConfig().setMaxFramesExternalGroupBy(groupFrameLimit); OptimizationConfUtil.getPhysicalOptimizationConfig().setMaxFramesForJoin(joinFrameLimit); - HeuristicCompilerFactoryBuilder builder = new HeuristicCompilerFactoryBuilder( - OptimizationContextFactory.INSTANCE); + HeuristicCompilerFactoryBuilder builder = + new HeuristicCompilerFactoryBuilder(OptimizationContextFactory.INSTANCE); builder.setPhysicalOptimizationConfig(OptimizationConfUtil.getPhysicalOptimizationConfig()); builder.setLogicalRewrites(ruleSetFactory.getLogicalRewrites()); builder.setPhysicalRewrites(ruleSetFactory.getPhysicalRewrites()); @@ -240,8 +242,8 @@ public class APIFramework { int parallelism = getParallelism(querySpecificConfig.get(CompilerProperties.COMPILER_PARALLELISM_KEY), compilerProperties.getParallelism()); - AlgebricksAbsolutePartitionConstraint computationLocations = chooseLocations(clusterInfoCollector, parallelism, - metadataProvider.getClusterLocations()); + AlgebricksAbsolutePartitionConstraint computationLocations = + chooseLocations(clusterInfoCollector, parallelism, metadataProvider.getClusterLocations()); builder.setClusterLocations(computationLocations); ICompiler compiler = compilerFactory.createCompiler(plan, metadataProvider, t.getVarCounter()); @@ -285,7 +287,7 @@ public class APIFramework { builder.setBinaryIntegerInspectorFactory(format.getBinaryIntegerInspectorFactory()); builder.setComparatorFactoryProvider(format.getBinaryComparatorFactoryProvider()); builder.setExpressionRuntimeProvider( - new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter(QueryLogicalExpressionJobGen.INSTANCE)); + new ExpressionRuntimeProvider(QueryLogicalExpressionJobGen.INSTANCE)); builder.setHashFunctionFactoryProvider(format.getBinaryHashFunctionFactoryProvider()); builder.setHashFunctionFamilyProvider(format.getBinaryHashFunctionFamilyProvider()); builder.setMissingWriterFactory(format.getMissingWriterFactory()); @@ -313,8 +315,8 @@ public class APIFramework { builder.setTypeTraitProvider(format.getTypeTraitProvider()); builder.setNormalizedKeyComputerFactoryProvider(format.getNormalizedKeyComputerFactoryProvider()); - JobEventListenerFactory jobEventListenerFactory = new JobEventListenerFactory(asterixJobId, - metadataProvider.isWriteTransaction()); + JobEventListenerFactory jobEventListenerFactory = + new JobEventListenerFactory(asterixJobId, metadataProvider.isWriteTransaction()); JobSpecification spec = compiler.createJob(AppContextInfo.INSTANCE, jobEventListenerFactory); // When the top-level statement is a query, the statement parameter is null. @@ -427,10 +429,10 @@ public class APIFramework { for (Map.Entry<String, NodeControllerInfo> entry : ncMap.entrySet()) { String nodeId = entry.getKey(); int availableCores = entry.getValue().getNumAvailableCores(); - int nodeParallelism = selectedNodesWithOneMorePartition.contains(nodeId) ? perNodeParallelismMax - : perNodeParallelismMin; - int coresToUse = nodeParallelism >= 0 && nodeParallelism < availableCores ? nodeParallelism - : availableCores; + int nodeParallelism = + selectedNodesWithOneMorePartition.contains(nodeId) ? perNodeParallelismMax : perNodeParallelismMin; + int coresToUse = + nodeParallelism >= 0 && nodeParallelism < availableCores ? nodeParallelism : availableCores; for (int count = 0; count < coresToUse; ++count) { locations.add(nodeId); } @@ -450,15 +452,15 @@ public class APIFramework { // Gets the frame limit. private int getFrameLimit(String parameter, long memBudgetInConfiguration, int frameSize) { IPropertyInterpreter<Long> longBytePropertyInterpreter = PropertyInterpreters.getLongBytePropertyInterpreter(); - long memBudget = parameter == null ? memBudgetInConfiguration - : longBytePropertyInterpreter.interpret(parameter); + long memBudget = + parameter == null ? memBudgetInConfiguration : longBytePropertyInterpreter.interpret(parameter); return (int) (memBudget / frameSize); } // Gets the parallelism parameter. private int getParallelism(String parameter, int parallelismInConfiguration) { - IPropertyInterpreter<Integer> integerIPropertyInterpreter = PropertyInterpreters - .getIntegerPropertyInterpreter(); + IPropertyInterpreter<Integer> integerIPropertyInterpreter = + PropertyInterpreters.getIntegerPropertyInterpreter(); return parameter == null ? parallelismInConfiguration : integerIPropertyInterpreter.interpret(parameter); } } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java deleted file mode 100644 index 8eebdd0..0000000 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.asterix.api.common; - -import org.apache.hyracks.api.job.JobSpecification; - -public class Job { - - public enum SubmissionMode { - SYNCHRONOUS, - ASYNCHRONOUS - } - - private final JobSpecification jobSpec; - private final SubmissionMode submissionMode; - - public Job(JobSpecification jobSpecification, SubmissionMode submissionMode) { - this.jobSpec = jobSpecification; - this.submissionMode = submissionMode; - } - - public Job(JobSpecification jobSpec) { - this.jobSpec = jobSpec; - this.submissionMode = SubmissionMode.SYNCHRONOUS; - } - - public JobSpecification getJobSpec() { - return jobSpec; - } - - public SubmissionMode getSubmissionMode() { - return submissionMode; - } - -} http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java index ab05f10..95eb6fb 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java @@ -38,6 +38,7 @@ import javax.imageio.ImageIO; import org.apache.asterix.app.result.ResultReader; import org.apache.asterix.app.result.ResultUtil; import org.apache.asterix.common.config.GlobalConfig; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.aql.parser.TokenMgrError; @@ -69,14 +70,16 @@ public class ApiServlet extends AbstractServlet { private final ILangCompilationProvider aqlCompilationProvider; private final ILangCompilationProvider sqlppCompilationProvider; private final IStatementExecutorFactory statementExectorFactory; + private final IStorageComponentProvider componentProvider; public ApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, ILangCompilationProvider aqlCompilationProvider, ILangCompilationProvider sqlppCompilationProvider, - IStatementExecutorFactory statementExecutorFactory) { + IStatementExecutorFactory statementExecutorFactory, IStorageComponentProvider componentProvider) { super(ctx, paths); this.aqlCompilationProvider = aqlCompilationProvider; this.sqlppCompilationProvider = sqlppCompilationProvider; this.statementExectorFactory = statementExecutorFactory; + this.componentProvider = componentProvider; } public void doPost(IServletRequest request, IServletResponse response) { @@ -135,8 +138,8 @@ public class ApiServlet extends AbstractServlet { sessionConfig.setOOBData(isSet(printExprParam), isSet(printRewrittenExprParam), isSet(printLogicalPlanParam), isSet(printOptimizedLogicalPlanParam), isSet(printJob)); MetadataManager.INSTANCE.init(); - IStatementExecutor translator = - statementExectorFactory.create(aqlStatements, sessionConfig, compilationProvider); + IStatementExecutor translator = statementExectorFactory.create(aqlStatements, sessionConfig, + compilationProvider, componentProvider); double duration; long startTime = System.currentTimeMillis(); translator.compileAndExecute(hcc, hds, IStatementExecutor.ResultDelivery.IMMEDIATE); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java index 038ed2f..e93108d 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java @@ -31,7 +31,7 @@ import java.util.regex.Pattern; import org.apache.asterix.common.config.AbstractProperties; import org.apache.asterix.common.config.ReplicationProperties; import org.apache.asterix.common.utils.JSONUtil; -import org.apache.asterix.runtime.util.ClusterStateManager; +import org.apache.asterix.runtime.utils.ClusterStateManager; import org.apache.hyracks.http.api.IServlet; import org.apache.hyracks.http.api.IServletRequest; import org.apache.hyracks.http.api.IServletResponse; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java index caa00f1..66064aa 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java @@ -28,13 +28,14 @@ import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.asterix.file.StorageComponentProvider; import org.apache.asterix.metadata.MetadataManager; import org.apache.asterix.metadata.MetadataTransactionContext; import org.apache.asterix.metadata.declared.MetadataProvider; import org.apache.asterix.metadata.entities.Dataset; -import org.apache.asterix.metadata.utils.DatasetUtils; +import org.apache.asterix.metadata.utils.DatasetUtil; import org.apache.asterix.om.types.ARecordType; -import org.apache.asterix.util.FlushDatasetUtils; +import org.apache.asterix.utils.FlushDatasetUtil; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.api.client.NodeControllerInfo; import org.apache.hyracks.api.io.FileSplit; @@ -97,7 +98,7 @@ public class ConnectorApiServlet extends AbstractServlet { MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction(); // Retrieves file splits of the dataset. - MetadataProvider metadataProvider = new MetadataProvider(null); + MetadataProvider metadataProvider = new MetadataProvider(null, new StorageComponentProvider()); metadataProvider.setMetadataTxnContext(mdTxnCtx); Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName); if (dataset == null) { @@ -112,7 +113,7 @@ public class ConnectorApiServlet extends AbstractServlet { metadataProvider.splitsForDataset(mdTxnCtx, dataverseName, datasetName, datasetName, temp); ARecordType recordType = (ARecordType) metadataProvider.findType(dataset.getItemTypeDataverseName(), dataset.getItemTypeName()); - List<List<String>> primaryKeys = DatasetUtils.getPartitioningKeys(dataset); + List<List<String>> primaryKeys = DatasetUtil.getPartitioningKeys(dataset); StringBuilder pkStrBuf = new StringBuilder(); for (List<String> keys : primaryKeys) { for (String key : keys) { @@ -126,7 +127,7 @@ public class ConnectorApiServlet extends AbstractServlet { hcc.getNodeControllerInfos()); // Flush the cached contents of the dataset to file system. - FlushDatasetUtils.flushDataset(hcc, metadataProvider, mdTxnCtx, dataverseName, datasetName, datasetName); + FlushDatasetUtil.flushDataset(hcc, metadataProvider, dataverseName, datasetName, datasetName); // Metadata transaction commits. MetadataManager.INSTANCE.commitTransaction(mdTxnCtx); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java index be6e280..a994470 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java @@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server; import java.util.concurrent.ConcurrentMap; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.translator.IStatementExecutorFactory; @@ -30,8 +31,9 @@ public class DdlApiServlet extends RestApiServlet { Statement.Category.QUERY | Statement.Category.UPDATE | Statement.Category.DDL; public DdlApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { - super(ctx, paths, compilationProvider, statementExecutorFactory); + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider componentProvider) { + super(ctx, paths, compilationProvider, statementExecutorFactory, componentProvider); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java index e6a32a3..709db4b 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java @@ -35,7 +35,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.asterix.api.http.servlet.ServletConstants; -import org.apache.asterix.runtime.util.AppContextInfo; +import org.apache.asterix.runtime.utils.AppContextInfo; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.http.api.IServlet; import org.apache.hyracks.http.api.IServletRequest; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java index 9c08fbd..eafae35 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java @@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server; import java.util.concurrent.ConcurrentMap; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.translator.IStatementExecutorFactory; @@ -32,8 +33,9 @@ public class FullApiServlet extends RestApiServlet { | Statement.Category.DDL | Statement.Category.PROCEDURE; public FullApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { - super(ctx, paths, compilationProvider, statementExecutorFactory); + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider componentProvider) { + super(ctx, paths, compilationProvider, statementExecutorFactory, componentProvider); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java index 2dbaa54..f6b80fc 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java @@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; import java.util.logging.Logger; -import org.apache.asterix.runtime.util.ClusterStateManager; +import org.apache.asterix.runtime.utils.ClusterStateManager; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.http.api.IServlet; import org.apache.hyracks.http.api.IServletRequest; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java index 160c801..5075795 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java @@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server; import java.util.concurrent.ConcurrentMap; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.translator.IStatementExecutorFactory; @@ -29,8 +30,9 @@ public class QueryApiServlet extends RestApiServlet { private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY; public QueryApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { - super(ctx, paths, compilationProvider, statementExecutorFactory); + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider componentProvider) { + super(ctx, paths, compilationProvider, statementExecutorFactory, componentProvider); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java index 43530ea..410fd1e 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java @@ -36,6 +36,7 @@ import org.apache.asterix.app.result.ResultUtil; import org.apache.asterix.app.translator.QueryTranslator; import org.apache.asterix.common.api.IClusterManagementWork; import org.apache.asterix.common.config.GlobalConfig; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.common.utils.JSONUtil; import org.apache.asterix.compiler.provider.ILangCompilationProvider; @@ -43,7 +44,7 @@ import org.apache.asterix.lang.aql.parser.TokenMgrError; import org.apache.asterix.lang.common.base.IParser; import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.metadata.MetadataManager; -import org.apache.asterix.runtime.util.ClusterStateManager; +import org.apache.asterix.runtime.utils.ClusterStateManager; import org.apache.asterix.translator.IStatementExecutor; import org.apache.asterix.translator.IStatementExecutor.Stats; import org.apache.asterix.translator.IStatementExecutorFactory; @@ -73,12 +74,15 @@ public class QueryServiceServlet extends AbstractServlet { private static final Logger LOGGER = Logger.getLogger(QueryServiceServlet.class.getName()); private final ILangCompilationProvider compilationProvider; private final IStatementExecutorFactory statementExecutorFactory; + private final IStorageComponentProvider componentProvider; public QueryServiceServlet(ConcurrentMap<String, Object> ctx, String[] paths, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider componentProvider) { super(ctx, paths); this.compilationProvider = compilationProvider; this.statementExecutorFactory = statementExecutorFactory; + this.componentProvider = componentProvider; } @Override @@ -310,19 +314,10 @@ public class QueryServiceServlet extends AbstractServlet { } }; - SessionConfig.ResultDecorator resultPostfix = (AlgebricksAppendable app) -> app.append("\t,\n"); - - SessionConfig.ResultDecorator handlePrefix = new SessionConfig.ResultDecorator() { - @Override - public AlgebricksAppendable append(AlgebricksAppendable app) throws AlgebricksException { - app.append("\t\""); - app.append(ResultFields.HANDLE.str()); - app.append("\": "); - return app; - } - }; - - SessionConfig.ResultDecorator handlePostfix = (AlgebricksAppendable app) -> app.append(",\n"); + SessionConfig.ResultDecorator resultPostfix = app -> app.append("\t,\n"); + SessionConfig.ResultDecorator handlePrefix = + app -> app.append("\t\"").append(ResultFields.HANDLE.str()).append("\": "); + SessionConfig.ResultDecorator handlePostfix = app -> app.append(",\n"); SessionConfig.OutputFormat format = getFormat(param.format); SessionConfig sessionConfig = @@ -518,7 +513,7 @@ public class QueryServiceServlet extends AbstractServlet { List<Statement> statements = parser.parse(); MetadataManager.INSTANCE.init(); IStatementExecutor translator = - statementExecutorFactory.create(statements, sessionConfig, compilationProvider); + statementExecutorFactory.create(statements, sessionConfig, compilationProvider, componentProvider); execStart = System.nanoTime(); translator.compileAndExecute(hcc, hds, delivery, stats); execEnd = System.nanoTime(); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java index fac5883..96df30f 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java @@ -27,7 +27,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.asterix.common.config.ExternalProperties; -import org.apache.asterix.runtime.util.AppContextInfo; +import org.apache.asterix.runtime.utils.AppContextInfo; import org.apache.commons.io.IOUtils; import org.apache.hyracks.http.api.IServlet; import org.apache.hyracks.http.api.IServletRequest; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java index 787ff47..b069efe 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java @@ -32,6 +32,7 @@ import org.apache.asterix.app.result.ResultReader; import org.apache.asterix.app.result.ResultUtil; import org.apache.asterix.app.translator.QueryTranslator; import org.apache.asterix.common.config.GlobalConfig; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.aql.parser.TokenMgrError; @@ -66,13 +67,16 @@ public abstract class RestApiServlet extends AbstractServlet { private final ILangCompilationProvider compilationProvider; private final IParserFactory parserFactory; private final IStatementExecutorFactory statementExecutorFactory; + private final IStorageComponentProvider componentProvider; public RestApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider componentProvider) { super(ctx, paths); this.compilationProvider = compilationProvider; this.parserFactory = compilationProvider.getParserFactory(); this.statementExecutorFactory = statementExecutorFactory; + this.componentProvider = componentProvider; } /** @@ -189,8 +193,8 @@ public abstract class RestApiServlet extends AbstractServlet { List<Statement> aqlStatements = parser.parse(); validate(aqlStatements); MetadataManager.INSTANCE.init(); - IStatementExecutor translator = - statementExecutorFactory.create(aqlStatements, sessionConfig, compilationProvider); + IStatementExecutor translator = statementExecutorFactory.create(aqlStatements, sessionConfig, + compilationProvider, componentProvider); translator.compileAndExecute(hcc, hds, resultDelivery); } catch (AsterixException | TokenMgrError | org.apache.asterix.aqlplus.parser.TokenMgrError pe) { response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java index dc48288..5c569ed 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java @@ -28,7 +28,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.apache.asterix.common.config.GlobalConfig; -import org.apache.asterix.runtime.util.ClusterStateManager; +import org.apache.asterix.runtime.utils.ClusterStateManager; import org.apache.hyracks.api.client.IHyracksClientConnection; import org.apache.hyracks.http.api.IServlet; import org.apache.hyracks.http.api.IServletRequest; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java index 0a0e680..ad2c128 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java @@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server; import java.util.concurrent.ConcurrentMap; +import org.apache.asterix.common.context.IStorageComponentProvider; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.translator.IStatementExecutorFactory; @@ -29,8 +30,9 @@ public class UpdateApiServlet extends RestApiServlet { private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY | Statement.Category.UPDATE; public UpdateApiServlet(ConcurrentMap<String, Object> ctx, String[] paths, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { - super(ctx, paths, compilationProvider, statementExecutorFactory); + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider componentProvider) { + super(ctx, paths, compilationProvider, statementExecutorFactory, componentProvider); } @Override http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java index 5899660..1b2c2e6 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java @@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; import java.util.logging.Logger; -import org.apache.asterix.runtime.util.AppContextInfo; +import org.apache.asterix.runtime.utils.AppContextInfo; import org.apache.hyracks.http.api.IServlet; import org.apache.hyracks.http.api.IServletRequest; import org.apache.hyracks.http.api.IServletResponse; http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java index 3d240f8..c09f8cb 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java @@ -23,8 +23,9 @@ import java.io.Reader; import java.util.List; import org.apache.asterix.api.common.APIFramework; -import org.apache.asterix.api.common.Job; import org.apache.asterix.app.translator.QueryTranslator; +import org.apache.asterix.common.context.IStorageComponentProvider; +import org.apache.asterix.common.utils.Job; import org.apache.asterix.compiler.provider.ILangCompilationProvider; import org.apache.asterix.lang.common.base.IParser; import org.apache.asterix.lang.common.base.IParserFactory; @@ -49,21 +50,28 @@ public class AsterixJavaClient { private final IParserFactory parserFactory; private final APIFramework apiFramework; private final IStatementExecutorFactory statementExecutorFactory; + private final IStorageComponentProvider storageComponentProvider; public AsterixJavaClient(IHyracksClientConnection hcc, Reader queryText, PrintWriter writer, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider storageComponentProvider) { this.hcc = hcc; this.queryText = queryText; this.writer = writer; this.compilationProvider = compilationProvider; - this.apiFramework = new APIFramework(compilationProvider); this.statementExecutorFactory = statementExecutorFactory; + this.storageComponentProvider = storageComponentProvider; + apiFramework = new APIFramework(compilationProvider); parserFactory = compilationProvider.getParserFactory(); } public AsterixJavaClient(IHyracksClientConnection hcc, Reader queryText, - ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory) { - this(hcc, queryText, new PrintWriter(System.out, true), compilationProvider, statementExecutorFactory); + ILangCompilationProvider compilationProvider, IStatementExecutorFactory statementExecutorFactory, + IStorageComponentProvider storageComponentProvider) { + this(hcc, queryText, + // This is a commandline client and so System.out is appropriate + new PrintWriter(System.out, true), // NOSONAR + compilationProvider, statementExecutorFactory, storageComponentProvider); } public void compile() throws Exception { @@ -94,7 +102,8 @@ public class AsterixJavaClient { conf.set(SessionConfig.FORMAT_ONLY_PHYSICAL_OPS, true); } - IStatementExecutor translator = statementExecutorFactory.create(statements, conf, compilationProvider); + IStatementExecutor translator = + statementExecutorFactory.create(statements, conf, compilationProvider, storageComponentProvider); translator.compileAndExecute(hcc, null, QueryTranslator.ResultDelivery.IMMEDIATE); writer.flush(); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java new file mode 100644 index 0000000..31ace22 --- /dev/null +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.app.cc; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.asterix.algebra.base.ILangExtension; +import org.apache.asterix.algebra.base.ILangExtension.Language; +import org.apache.asterix.algebra.extension.IAlgebraExtensionManager; +import org.apache.asterix.app.translator.DefaultStatementExecutorFactory; +import org.apache.asterix.common.api.ExtensionId; +import org.apache.asterix.common.api.IExtension; +import org.apache.asterix.common.config.AsterixExtension; +import org.apache.asterix.common.exceptions.ErrorCode; +import org.apache.asterix.common.exceptions.RuntimeDataException; +import org.apache.asterix.compiler.provider.AqlCompilationProvider; +import org.apache.asterix.compiler.provider.ILangCompilationProvider; +import org.apache.asterix.compiler.provider.SqlppCompilationProvider; +import org.apache.asterix.translator.IStatementExecutorFactory; +import org.apache.asterix.utils.ExtensionUtil; +import org.apache.hyracks.algebricks.common.utils.Pair; +import org.apache.hyracks.api.exceptions.HyracksDataException; + +/** + * AsterixDB's implementation of {@code IAlgebraExtensionManager} which takes care of + * initializing extensions for App and Compilation purposes + */ +public class CCExtensionManager implements IAlgebraExtensionManager { + + private final Map<ExtensionId, IExtension> extensions = new HashMap<>(); + + private final IStatementExecutorExtension statementExecutorExtension; + private final ILangCompilationProvider aqlCompilationProvider; + private final ILangCompilationProvider sqlppCompilationProvider; + private final DefaultStatementExecutorFactory defaultQueryTranslatorFactory; + + /** + * Initialize {@code CompilerExtensionManager} from configuration + * + * @param list + * @throws InstantiationException + * @throws IllegalAccessException + * @throws ClassNotFoundException + * @throws HyracksDataException + */ + public CCExtensionManager(List<AsterixExtension> list) + throws InstantiationException, IllegalAccessException, ClassNotFoundException, HyracksDataException { + Pair<ExtensionId, ILangCompilationProvider> aqlcp = null; + Pair<ExtensionId, ILangCompilationProvider> sqlppcp = null; + IStatementExecutorExtension see = null; + defaultQueryTranslatorFactory = new DefaultStatementExecutorFactory(); + if (list != null) { + for (AsterixExtension extensionConf : list) { + IExtension extension = (IExtension) Class.forName(extensionConf.getClassName()).newInstance(); + extension.configure(extensionConf.getArgs()); + if (extensions.containsKey(extension.getId())) { + throw new RuntimeDataException(ErrorCode.EXTENSION_ID_CONFLICT, extension.getId()); + } + extensions.put(extension.getId(), extension); + switch (extension.getExtensionKind()) { + case STATEMENT_EXECUTOR: + see = ExtensionUtil.extendStatementExecutor(see, (IStatementExecutorExtension) extension); + break; + case LANG: + ILangExtension le = (ILangExtension) extension; + aqlcp = ExtensionUtil.extendLangCompilationProvider(Language.AQL, aqlcp, le); + sqlppcp = ExtensionUtil.extendLangCompilationProvider(Language.SQLPP, sqlppcp, le); + break; + default: + break; + } + } + } + this.statementExecutorExtension = see; + this.aqlCompilationProvider = aqlcp == null ? new AqlCompilationProvider() : aqlcp.second; + this.sqlppCompilationProvider = sqlppcp == null ? new SqlppCompilationProvider() : sqlppcp.second; + } + + public IStatementExecutorFactory getQueryTranslatorFactory() { + return statementExecutorExtension == null ? defaultQueryTranslatorFactory + : statementExecutorExtension.getQueryTranslatorFactory(); + } + + public ILangCompilationProvider getAqlCompilationProvider() { + return aqlCompilationProvider; + } + + public ILangCompilationProvider getSqlppCompilationProvider() { + return sqlppCompilationProvider; + } +}
