>From Ali Alsuliman <[email protected]>:

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


Change subject: WIP: metadata auth
......................................................................

WIP: metadata auth

Change-Id: Ic4791ce4934ff3a1dd9051ddb13847a4bea4e7c2
---
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
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
10 files changed, 112 insertions(+), 11 deletions(-)



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

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 ca97aa6..8281860 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;
@@ -82,6 +83,11 @@
     }

     @Override
+    public ICompilationContextFactory getCompilationContextFactory() {
+        return ICompilationContextFactory.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-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..8dba1d2
--- /dev/null
+++ 
b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/ICompilationContextFactory.java
@@ -0,0 +1,32 @@
+/*
+ * 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 {
+
+    ICompilationContextFactory INSTANCE = request -> 
ICompilationContext.INSTANCE;
+
+    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 1d6d1a2..099c91b 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 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..254fe7c 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 geCompilationContext() {
+        return compilationContext;
+    }
 }

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20832?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: master
Gerrit-Change-Id: Ic4791ce4934ff3a1dd9051ddb13847a4bea4e7c2
Gerrit-Change-Number: 20832
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>

Reply via email to