>From Ali Alsuliman <[email protected]>:

Ali Alsuliman has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20956?usp=email )


Change subject: [ASTERIXDB-3700][RT] Extend BTree search tuple filter
......................................................................

[ASTERIXDB-3700][RT] Extend BTree search tuple filter

- user model changes: no
- storage format changes: no
- interface changes: yes

Details:
Allow extension to provide additional tuple filter for BTree search.

- Add ICompilationContext that can hold information about the request
and compilation.
- Provide this ICompilationContext to Job compilation.

Ext-ref: MB-67953

Change-Id: Ic4791ce4934ff3a1dd9051ddb13847a4bea4e7c2
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExpressionToPlanTranslatorFactory.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
A 
asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
M 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
M 
hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
M 
hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
A 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
12 files changed, 120 insertions(+), 19 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/56/20956/1

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExpressionToPlanTranslatorFactory.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExpressionToPlanTranslatorFactory.java
index c29dee8..1bb5ff0 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExpressionToPlanTranslatorFactory.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/base/ILangExpressionToPlanTranslatorFactory.java
@@ -25,6 +25,7 @@
 import org.apache.asterix.om.base.IAObject;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;

+@FunctionalInterface
 public interface ILangExpressionToPlanTranslatorFactory {

     /**
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
index 30c6623..4c809b4 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/ILangCompilationProvider.java
@@ -23,6 +23,7 @@
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslatorFactory;
 import org.apache.asterix.algebra.base.ILangExtension;
 import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
+import org.apache.asterix.lang.common.base.ICompilationContextFactory;
 import org.apache.asterix.lang.common.base.IParserFactory;
 import org.apache.asterix.lang.common.base.IRewriterFactory;

@@ -58,6 +59,11 @@
     IRuleSetFactory getRuleSetFactory();

     /**
+     * @return the compilation context containing information useful during 
compilation and job generation
+     */
+    ICompilationContextFactory getCompilationContextFactory();
+
+    /**
      * @return all configurable parameters of a language implementation.
      */
     Set<String> getCompilerOptions();
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
index b6a9295..8d24f65 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/compiler/provider/SqlppCompilationProvider.java
@@ -27,6 +27,7 @@
 import org.apache.asterix.common.config.CompilerProperties;
 import org.apache.asterix.external.feed.watch.FeedActivityDetails;
 import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
+import org.apache.asterix.lang.common.base.ICompilationContextFactory;
 import org.apache.asterix.lang.common.base.IParserFactory;
 import org.apache.asterix.lang.common.base.IRewriterFactory;
 import org.apache.asterix.lang.common.statement.StartFeedStatement;
@@ -42,6 +43,7 @@
 import org.apache.asterix.optimizer.rules.util.EquivalenceClassUtils;
 import org.apache.asterix.translator.SqlppExpressionToPlanTranslator;
 import org.apache.asterix.translator.SqlppExpressionToPlanTranslatorFactory;
+import org.apache.hyracks.algebricks.core.jobgen.impl.ICompilationContext;

 public class SqlppCompilationProvider implements ILangCompilationProvider {

@@ -82,6 +84,11 @@
     }

     @Override
+    public ICompilationContextFactory getCompilationContextFactory() {
+        return request -> ICompilationContext.INSTANCE;
+    }
+
+    @Override
     public Set<String> getCompilerOptions() {
         return new HashSet<>(Set.of(CompilerProperties.COMPILER_JOINMEMORY_KEY,
                 CompilerProperties.COMPILER_GROUPMEMORY_KEY, 
CompilerProperties.COMPILER_SORTMEMORY_KEY,
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
index fe4ada5..2acc502 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/visitor/ConstantFoldingVisitor.java
@@ -159,7 +159,7 @@
                 UnnestingPositionWriterFactory.INSTANCE, null,
                 new ExpressionRuntimeProvider(new 
QueryLogicalExpressionJobGen(metadataProvider.getFunctionManager())),
                 ExpressionTypeComputer.INSTANCE, null, null, null, null, 
GlobalConfig.DEFAULT_FRAME_SIZE, null,
-                NoOpWarningCollector.INSTANCE, 0, new 
PhysicalOptimizationConfig());
+                NoOpWarningCollector.INSTANCE, 0, new 
PhysicalOptimizationConfig(), null);
     }

     public void reset(IOptimizationContext context) {
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 2988c97..ad5b7f9 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
@@ -63,6 +63,7 @@
 import org.apache.asterix.formats.base.IDataFormat;
 import org.apache.asterix.jobgen.QueryLogicalExpressionJobGen;
 import org.apache.asterix.lang.common.base.IAstPrintVisitorFactory;
+import org.apache.asterix.lang.common.base.ICompilationContextFactory;
 import org.apache.asterix.lang.common.base.IQueryRewriter;
 import org.apache.asterix.lang.common.base.IReturningStatement;
 import org.apache.asterix.lang.common.base.IRewriterFactory;
@@ -146,6 +147,7 @@
     private final IRuleSetFactory ruleSetFactory;
     private final Set<String> configurableParameterNames;
     private final ExecutionPlans executionPlans;
+    private final ICompilationContextFactory compilationContextFactory;
     private PlanInfo lastPlan;

     public APIFramework(ILangCompilationProvider compilationProvider) {
@@ -154,6 +156,7 @@
         this.translatorFactory = 
compilationProvider.getExpressionToPlanTranslatorFactory();
         this.ruleSetFactory = compilationProvider.getRuleSetFactory();
         this.configurableParameterNames = 
compilationProvider.getCompilerOptions();
+        this.compilationContextFactory = 
compilationProvider.getCompilationContextFactory();
         executionPlans = new ExecutionPlans();
         lastPlan = null;
     }
@@ -321,6 +324,7 @@
             
builder.setSerializerDeserializerProvider(format.getSerdeProvider());
             builder.setTypeTraitProvider(format.getTypeTraitProvider());
             
builder.setNormalizedKeyComputerFactoryProvider(format.getNormalizedKeyComputerFactoryProvider());
+            
builder.setCompilationContext(compilationContextFactory.createCompilationContext(requestParameters));

             IndexAdvisor indexAdvisor = new IndexAdvisor(isAdviceOnly);

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 de65cb0..d980a0b 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
@@ -4158,7 +4158,7 @@
                     loadStmt.getDatasetName(), loadStmt.getAdapter(), 
properties, loadStmt.dataIsAlreadySorted());
             cls.setSourceLocation(stmt.getSourceLocation());
             JobSpecification spec = apiFramework.compileQuery(hcc, 
metadataProvider, null, 0, null, sessionOutput, cls,
-                    null, responsePrinter, warningCollector, null, jobFlags);
+                    null, responsePrinter, warningCollector, 
requestParameters, jobFlags);
             afterCompile();
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             bActiveTxn = false;
@@ -4237,7 +4237,7 @@
                     copyStmt.getDatasetName(), itemType, 
externalDetails.getAdapter(), properties);
             cls.setSourceLocation(stmt.getSourceLocation());
             JobSpecification spec = apiFramework.compileQuery(hcc, 
metadataProvider, null, 0, null, sessionOutput, cls,
-                    null, responsePrinter, warningCollector, null, jobFlags);
+                    null, responsePrinter, warningCollector, 
requestParameters, jobFlags);
             afterCompile();
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             bActiveTxn = false;
@@ -4421,7 +4421,7 @@
             try {
                 metadataProvider.setWriteTransaction(true);
                 final JobSpecification jobSpec =
-                        rewriteCompileInsertUpsert(hcc, metadataProvider, 
stmtInsertUpsert, stmtParams);
+                        rewriteCompileInsertUpsert(hcc, metadataProvider, 
stmtInsertUpsert, stmtParams, reqParams);
                 appCtx.getReceptionist().ensureAuthorized(reqParams, 
metadataProvider);
                 MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
                 bActiveTxn = false;
@@ -4509,8 +4509,8 @@
                     new CompiledDeleteStatement(stmtDelete.getVariableExpr(), 
databaseName, dataverseName, datasetName,
                             stmtDelete.getCondition(), 
stmtDelete.getVarCounter(), stmtDelete.getQuery());
             clfrqs.setSourceLocation(stmt.getSourceLocation());
-            JobSpecification jobSpec =
-                    rewriteCompileQuery(hcc, metadataProvider, 
clfrqs.getQuery(), clfrqs, stmtParams, null);
+            JobSpecification jobSpec = rewriteCompileQuery(hcc, 
metadataProvider, clfrqs.getQuery(), clfrqs, stmtParams,
+                    requestParameters);
             appCtx.getReceptionist().ensureAuthorized(requestParameters, 
metadataProvider);
             afterCompile();

@@ -4600,8 +4600,8 @@
     }

     protected JobSpecification 
rewriteCompileInsertUpsert(IClusterInfoCollector clusterInfoCollector,
-            MetadataProvider metadataProvider, InsertStatement insertUpsert, 
Map<String, IAObject> stmtParams)
-            throws AlgebricksException, ACIDException {
+            MetadataProvider metadataProvider, InsertStatement insertUpsert, 
Map<String, IAObject> stmtParams,
+            IRequestParameters reqParams) throws AlgebricksException, 
ACIDException {
         SourceLocation sourceLoc = insertUpsert.getSourceLocation();

         Map<VarIdentifier, IAObject> externalVars = 
createExternalVariables(insertUpsert, stmtParams);
@@ -4644,7 +4644,7 @@
         // transaction)
         return apiFramework.compileQuery(clusterInfoCollector, 
metadataProvider, rewrittenInsertUpsert.getQuery(),
                 rewrittenResult.second, datasetName, sessionOutput, clfrqs, 
externalVars, responsePrinter,
-                warningCollector, null, jobFlags);
+                warningCollector, reqParams, jobFlags);
     }

     protected void handleCreateFeedStatement(MetadataProvider 
metadataProvider, Statement stmt) throws Exception {
diff --git 
a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
new file mode 100644
index 0000000..7b45418
--- /dev/null
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.common.base;
+
+import org.apache.asterix.common.api.ICommonRequestParameters;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.hyracks.algebricks.core.jobgen.impl.ICompilationContext;
+
+@FunctionalInterface
+public interface ICompilationContextFactory {
+
+    ICompilationContext createCompilationContext(ICommonRequestParameters 
request) throws CompilationException;
+
+}
diff --git 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
index 8963ed1..e160a9a 100644
--- 
a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
+++ 
b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/MetadataProvider.java
@@ -169,6 +169,7 @@
 import 
org.apache.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor;
 import 
org.apache.hyracks.storage.am.common.api.IModificationOperationCallbackFactory;
 import 
org.apache.hyracks.storage.am.common.api.ISearchOperationCallbackFactory;
+import org.apache.hyracks.storage.am.common.api.ITupleFilter;
 import org.apache.hyracks.storage.am.common.api.ITupleFilterFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IIndexDataflowHelperFactory;
 import 
org.apache.hyracks.storage.am.common.dataflow.IndexDataflowHelperFactory;
@@ -350,10 +351,6 @@
         return dataFormat;
     }

-    public void setDataFormat(IDataFormat dataFormat) {
-        this.dataFormat = dataFormat;
-    }
-
     public INamespaceResolver getNamespaceResolver() {
         return namespaceResolver;
     }
@@ -702,6 +699,12 @@
                     datasetPartitioningProp.getNumberOfPartitions());
         }

+        ITupleFilterFactory extTupleFilterFactory = 
getExtTupleFilterFactory(context, dataset, primaryKeyFields);
+        if (extTupleFilterFactory != null) {
+            tupleFilterFactory = tupleFilterFactory == null ? 
extTupleFilterFactory
+                    : andTupleFilter(tupleFilterFactory, 
extTupleFilterFactory);
+        }
+
         if (dataset.getDatasetType() == DatasetType.INTERNAL) {
             btreeSearchOp = !isSecondary && isPrimaryIndexPointSearch
                     ? new LSMBTreeBatchPointSearchOperatorDescriptor(jobSpec, 
outputRecDesc, lowKeyFields,
@@ -728,6 +731,16 @@
         return new Pair<>(btreeSearchOp, 
datasetPartitioningProp.getConstraints());
     }

+    private static ITupleFilterFactory andTupleFilter(ITupleFilterFactory 
tupleFilterFactory,
+            ITupleFilterFactory extTupleFilterFactory) {
+        return ctx -> {
+            ITupleFilter tupleFilter = 
tupleFilterFactory.createTupleFilter(ctx);
+            ITupleFilter extTupleFilter = 
extTupleFilterFactory.createTupleFilter(ctx);
+
+            return (ITupleFilter) tuple -> tupleFilter.accept(tuple) && 
extTupleFilter.accept(tuple);
+        };
+    }
+
     public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> 
getRtreeSearchRuntime(JobSpecification jobSpec,
             List<LogicalVariable> outputVars, IOperatorSchema opSchema, 
IVariableTypeEnvironment typeEnv,
             JobGenContext context, boolean retainInput, boolean retainMissing,
@@ -2023,6 +2036,11 @@
         return Collections.unmodifiableSet(accessedEntities);
     }

+    protected ITupleFilterFactory getExtTupleFilterFactory(JobGenContext ctx, 
Dataset ds, int[] pkFields)
+            throws AlgebricksException {
+        return null;
+    }
+
     private void validateDatabaseObjectNameImpl(String name, SourceLocation 
sourceLoc) throws AlgebricksException {
         if (name == null || name.isEmpty()) {
             throw new AsterixException(ErrorCode.INVALID_DATABASE_OBJECT_NAME, 
sourceLoc, "");
diff --git 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
index b2b223e..8ec2a6f 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/AbstractCompilerFactoryBuilder.java
@@ -32,6 +32,7 @@
 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.IPartialAggregationTypeComputer;
+import org.apache.hyracks.algebricks.core.jobgen.impl.ICompilationContext;
 import org.apache.hyracks.algebricks.core.rewriter.base.AbstractRuleController;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 import org.apache.hyracks.algebricks.core.rewriter.base.IRuleSetKind;
@@ -84,6 +85,7 @@
     protected AlgebricksAbsolutePartitionConstraint clusterLocations;
     protected IWarningCollector warningCollector;
     protected long maxWarnings;
+    protected ICompilationContext compilationContext;

     public abstract ICompilerFactory create();

@@ -316,4 +318,8 @@
     public long getMaxWarnings() {
         return maxWarnings;
     }
+
+    public void setCompilationContext(ICompilationContext compilationContext) {
+        this.compilationContext = compilationContext;
+    }
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
index a994fa3..6ab2fb3 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
@@ -84,10 +84,6 @@

     private final IOptimizationContextFactory optCtxFactory;

-    public HeuristicCompilerFactoryBuilder() {
-        this.optCtxFactory = DefaultOptimizationContextFactory.INSTANCE;
-    }
-
     public HeuristicCompilerFactoryBuilder(IOptimizationContextFactory 
optCtxFactory) {
         this.optCtxFactory = optCtxFactory;
     }
@@ -131,7 +127,7 @@
                     normalizedKeyComputerFactoryProvider, 
expressionRuntimeProvider, expressionTypeComputer, oc,
                     expressionEvalSizeComputer, 
partialAggregationTypeComputer, predEvaluatorFactoryProvider,
                     physicalOptimizationConfig.getFrameSize(), 
clusterLocations, warningCollector, maxWarnings,
-                    physicalOptimizationConfig);
+                    physicalOptimizationConfig, compilationContext);
             return new PlanCompiler(context);
         }
     }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
new file mode 100644
index 0000000..c52477b
--- /dev/null
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/ICompilationContext.java
@@ -0,0 +1,26 @@
+/*
+ * 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.hyracks.algebricks.core.jobgen.impl;
+
+public interface ICompilationContext {
+
+    ICompilationContext INSTANCE = new ICompilationContext() {
+    };
+
+}
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
index 471380c..85036bb 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java
@@ -82,6 +82,7 @@
     private final ITypingContext typingContext;
     private final IWarningCollector warningCollector;
     private final long maxWarnings;
+    private final ICompilationContext compilationContext;

     public JobGenContext(IOperatorSchema outerFlowSchema, IMetadataProvider<?, 
?> metadataProvider, Object appContext,
             ISerializerDeserializerProvider serializerDeserializerProvider,
@@ -99,7 +100,8 @@
             IPartialAggregationTypeComputer partialAggregationTypeComputer,
             IPredicateEvaluatorFactoryProvider predEvaluatorFactoryProvider, 
int frameSize,
             AlgebricksAbsolutePartitionConstraint clusterLocations, 
IWarningCollector warningCollector,
-            long maxWarnings, PhysicalOptimizationConfig 
physicalOptimizationConfig) {
+            long maxWarnings, PhysicalOptimizationConfig 
physicalOptimizationConfig,
+            ICompilationContext compilationContext) {
         this.outerFlowSchema = outerFlowSchema;
         this.metadataProvider = metadataProvider;
         this.appContext = appContext;
@@ -126,6 +128,7 @@
         this.predEvaluatorFactoryProvider = predEvaluatorFactoryProvider;
         this.frameSize = frameSize;
         this.physicalOptimizationConfig = physicalOptimizationConfig;
+        this.compilationContext = compilationContext;
         this.varCounter = 0;
         this.warningCollector = warningCollector;
         this.maxWarnings = maxWarnings;
@@ -256,4 +259,8 @@
     public PhysicalOptimizationConfig getPhysicalOptimizationConfig() {
         return physicalOptimizationConfig;
     }
+
+    public ICompilationContext getCompilationContext() {
+        return compilationContext;
+    }
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20956?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: lumina
Gerrit-Change-Id: Ic4791ce4934ff3a1dd9051ddb13847a4bea4e7c2
Gerrit-Change-Number: 20956
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>

Reply via email to