Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 234E1200B14 for ; Sat, 4 Jun 2016 04:44:25 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 215C0160A5A; Sat, 4 Jun 2016 02:44:25 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id BA652160A57 for ; Sat, 4 Jun 2016 04:44:22 +0200 (CEST) Received: (qmail 69723 invoked by uid 500); 4 Jun 2016 02:44:21 -0000 Mailing-List: contact commits-help@asterixdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@asterixdb.apache.org Delivered-To: mailing list commits@asterixdb.apache.org Received: (qmail 69714 invoked by uid 99); 4 Jun 2016 02:44:21 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 04 Jun 2016 02:44:21 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 677C0180219 for ; Sat, 4 Jun 2016 02:44:21 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.646 X-Spam-Level: X-Spam-Status: No, score=-4.646 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx2-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id aNC7yuj5vCWx for ; Sat, 4 Jun 2016 02:44:09 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx2-lw-eu.apache.org (ASF Mail Server at mx2-lw-eu.apache.org) with SMTP id 7ACFE5F54F for ; Sat, 4 Jun 2016 02:44:07 +0000 (UTC) Received: (qmail 69086 invoked by uid 99); 4 Jun 2016 02:44:06 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 04 Jun 2016 02:44:06 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 1E702DFE61; Sat, 4 Jun 2016 02:44:05 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: buyingyi@apache.org To: commits@asterixdb.incubator.apache.org Date: Sat, 04 Jun 2016 02:44:06 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [02/29] incubator-asterixdb git commit: Supports Left Outer Join and Left Outer Unnest in SQL++. archived-at: Sat, 04 Jun 2016 02:44:25 -0000 http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java index 9a6411b..85c55ec 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/FDsAndEquivClassesVisitor.java @@ -61,11 +61,11 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.InsertDelete import org.apache.hyracks.algebricks.core.algebra.operators.logical.IntersectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestMapOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -800,7 +800,8 @@ public class FDsAndEquivClassesVisitor implements ILogicalOperatorVisitor> listLeft = new ArrayList>(); List> listRight = new ArrayList>(); - for (Pair> pair : keyLists) + for (Pair> pair : keyLists) { listLeft.add(new Pair(pair.first, pair.second.getValue())); - for (Pair> pair : keyListsArg) + } + for (Pair> pair : keyListsArg) { listRight.add(new Pair(pair.first, pair.second.getValue())); + } boolean isomorphic = VariableUtilities.varListEqualUnordered(listLeft, listRight); @@ -634,8 +636,9 @@ public class IsomorphismOperatorVisitor implements ILogicalOperatorVisitor liveVars = new ArrayList(); if (argOp.getInputs().size() > 0) { - for (int i = 0; i < argOp.getInputs().size(); i++) + for (int i = 0; i < argOp.getInputs().size(); i++) { VariableUtilities.getLiveVariables(argOp.getInputs().get(i).getValue(), liveVars); + } } List producedVars = new ArrayList(); VariableUtilities.getProducedVariables(argOp, producedVars); @@ -650,8 +653,9 @@ public class IsomorphismOperatorVisitor implements ILogicalOperatorVisitor> inputs = op.getInputs(); List> inputsArg = opArg.getInputs(); - if (inputs.size() != inputsArg.size()) + if (inputs.size() != inputsArg.size()) { throw new AlgebricksException("children are not isomoprhic"); + } for (int i = 0; i < inputs.size(); i++) { ILogicalOperator input = inputs.get(i).getValue(); ILogicalOperator inputArg = inputsArg.get(i).getValue(); @@ -311,8 +312,9 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito } private void mapVariables(List variablesLeft, List variablesRight) { - if (variablesLeft.size() != variablesRight.size()) + if (variablesLeft.size() != variablesRight.size()) { return; + } int size = variablesLeft.size(); for (int i = 0; i < size; i++) { LogicalVariable left = variablesLeft.get(i); @@ -346,8 +348,9 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito private void mapVarExprPairList(List>> leftPairs, List>> rightPairs) { - if (leftPairs.size() != rightPairs.size()) + if (leftPairs.size() != rightPairs.size()) { return; + } for (int i = 0; i < leftPairs.size(); i++) { ILogicalExpression exprLeft = leftPairs.get(i).second.getValue(); LogicalVariable leftVar = leftPairs.get(i).first; @@ -367,8 +370,9 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito private void mapVariablesForAbstractAssign(List variablesLeft, List> exprsLeft, List variablesRight, List> exprsRight) { - if (variablesLeft.size() != variablesRight.size()) + if (variablesLeft.size() != variablesRight.size()) { return; + } int size = variablesLeft.size(); for (int i = 0; i < size; i++) { ILogicalExpression exprLeft = exprsLeft.get(i).getValue(); @@ -389,13 +393,15 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito AbstractOperatorWithNestedPlans argOp = (AbstractOperatorWithNestedPlans) arg; List plans = op.getNestedPlans(); List plansArg = argOp.getNestedPlans(); - if (plans.size() != plansArg.size()) + if (plans.size() != plansArg.size()) { return; + } for (int i = 0; i < plans.size(); i++) { List> roots = plans.get(i).getRoots(); List> rootsArg = plansArg.get(i).getRoots(); - if (roots.size() != rootsArg.size()) + if (roots.size() != rootsArg.size()) { return; + } for (int j = 0; j < roots.size(); j++) { ILogicalOperator topOp1 = roots.get(j).getValue(); ILogicalOperator topOp2 = rootsArg.get(j).getValue(); @@ -411,8 +417,9 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito private Mutable copyExpressionAndSubtituteVars(Mutable expr) { ILogicalExpression copy = ((AbstractLogicalExpression) expr.getValue()).cloneExpression(); - for (Entry entry : variableMapping.entrySet()) + for (Entry entry : variableMapping.entrySet()) { copy.substituteVar(entry.getKey(), entry.getValue()); + } return new MutableObject(copy); } @@ -424,8 +431,9 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito private void mapVarTripleList(List> leftTriples, List> rightTriples) { - if (leftTriples.size() != rightTriples.size()) + if (leftTriples.size() != rightTriples.size()) { return; + } for (int i = 0; i < leftTriples.size(); i++) { LogicalVariable leftFirstVar = leftTriples.get(i).first; LogicalVariable leftSecondVar = leftTriples.get(i).second; @@ -459,12 +467,10 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito } private boolean varEquivalent(LogicalVariable left, LogicalVariable right) { - if (variableMapping.get(right) == null) - return false; - if (variableMapping.get(right).equals(left)) - return true; - else + if (variableMapping.get(right) == null) { return false; + } + return variableMapping.get(right).equals(left); } @Override @@ -474,7 +480,8 @@ public class IsomorphismVariableMappingVisitor implements ILogicalOperatorVisito } @Override - public Void visitOuterUnnestOperator(OuterUnnestOperator op, ILogicalOperator arg) throws AlgebricksException { + public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, ILogicalOperator arg) + throws AlgebricksException { mapVariablesStandard(op, arg); return null; } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java index b1d8610..2c4dacf 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalOperatorDeepCopyWithNewVariablesVisitor.java @@ -52,7 +52,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeO import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -433,7 +433,7 @@ public class LogicalOperatorDeepCopyWithNewVariablesVisitor @Override public ILogicalOperator visitSelectOperator(SelectOperator op, ILogicalOperator arg) throws AlgebricksException { SelectOperator opCopy = new SelectOperator(exprDeepCopyVisitor.deepCopyExpressionReference(op.getCondition()), - op.getRetainNull(), deepCopyVariable(op.getNullPlaceholderVariable())); + op.getRetainMissing(), deepCopyVariable(op.getMissingPlaceholderVariable())); deepCopyInputsAnnotationsAndExecutionMode(op, arg, opCopy); return opCopy; } @@ -551,9 +551,9 @@ public class LogicalOperatorDeepCopyWithNewVariablesVisitor } @Override - public ILogicalOperator visitOuterUnnestOperator(OuterUnnestOperator op, ILogicalOperator arg) + public ILogicalOperator visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, ILogicalOperator arg) throws AlgebricksException { - OuterUnnestOperator opCopy = new OuterUnnestOperator(deepCopyVariable(op.getVariable()), + LeftOuterUnnestOperator opCopy = new LeftOuterUnnestOperator(deepCopyVariable(op.getVariable()), exprDeepCopyVisitor.deepCopyExpressionReference(op.getExpressionRef()), deepCopyVariable(op.getPositionalVariable()), op.getPositionalVariableType(), op.getPositionWriter()); deepCopyInputsAnnotationsAndExecutionMode(op, arg, opCopy); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java index 7ef76ee..8d3644d 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/LogicalPropertiesVisitor.java @@ -42,11 +42,11 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.InsertDelete import org.apache.hyracks.algebricks.core.algebra.operators.logical.IntersectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestMapOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -358,7 +358,8 @@ public class LogicalPropertiesVisitor implements ILogicalOperatorVisitor pair) + public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, Pair pair) throws AlgebricksException { return visitUnnestNonMapOperator(op, pair); } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java index 9f62124..efb45de 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/UsedVariableVisitor.java @@ -51,7 +51,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeO import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -451,7 +451,7 @@ public class UsedVariableVisitor implements ILogicalOperatorVisitor } @Override - public Void visitOuterUnnestOperator(OuterUnnestOperator op, Void arg) throws AlgebricksException { + public Void visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, Void arg) throws AlgebricksException { op.getExpressionRef().getValue().getUsedVariables(usedVariables); return null; } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java new file mode 100644 index 0000000..4a177f7 --- /dev/null +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractUnnestPOperator.java @@ -0,0 +1,89 @@ +/* + * 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.algebra.operators.physical; + +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.IHyracksJobBuilder; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator; +import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext; +import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag; +import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind; +import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider; +import org.apache.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestNonMapOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema; +import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext; +import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenHelper; +import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory; +import org.apache.hyracks.algebricks.runtime.operators.std.UnnestRuntimeFactory; +import org.apache.hyracks.api.dataflow.value.RecordDescriptor; + +public abstract class AbstractUnnestPOperator extends AbstractScanPOperator { + private final boolean leftOuter; + + public AbstractUnnestPOperator(boolean leftOuter) { + this.leftOuter = leftOuter; + } + + @Override + public boolean isMicroOperator() { + return true; + } + + @Override + public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) { + AbstractLogicalOperator op2 = (AbstractLogicalOperator) op.getInputs().get(0).getValue(); + deliveredProperties = op2.getDeliveredPhysicalProperties().clone(); + } + + @Override + public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op, + IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema) + throws AlgebricksException { + AbstractUnnestNonMapOperator unnest = (AbstractUnnestNonMapOperator) op; + int outCol = opSchema.findVariable(unnest.getVariable()); + ILogicalExpression unnestExpr = unnest.getExpressionRef().getValue(); + IExpressionRuntimeProvider expressionRuntimeProvider = context.getExpressionRuntimeProvider(); + boolean exit = false; + if (unnestExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { + exit = true; + } else { + AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) unnestExpr; + if (fce.getKind() != FunctionKind.UNNEST) { + exit = true; + } + } + if (exit) { + throw new AlgebricksException("Unnest expression " + unnestExpr + " is not an unnesting function call."); + } + UnnestingFunctionCallExpression agg = (UnnestingFunctionCallExpression) unnestExpr; + IUnnestingEvaluatorFactory unnestingFactory = expressionRuntimeProvider.createUnnestingFunctionFactory(agg, + context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas, context); + int[] projectionList = JobGenHelper.projectAllVariables(opSchema); + UnnestRuntimeFactory unnestRuntime = new UnnestRuntimeFactory(outCol, unnestingFactory, projectionList, + unnest.getPositionWriter(), leftOuter, context.getMissingWriterFactory()); + RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context); + builder.contributeMicroOperator(unnest, unnestRuntime, recDesc); + ILogicalOperator src = unnest.getInputs().get(0).getValue(); + builder.contributeGraphEdge(src, 0, unnest, 0); + } +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java index 359cdb3..248bc4f 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/HybridHashJoinPOperator.java @@ -174,7 +174,7 @@ public class HybridHashJoinPOperator extends AbstractHashJoinPOperator { IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1] .getSize()]; for (int j = 0; j < nonMatchWriterFactories.length; j++) { - nonMatchWriterFactories[j] = context.getNullWriterFactory(); + nonMatchWriterFactories[j] = context.getMissingWriterFactory(); } opDesc = new HybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(), maxInputBuildSizeInFrames, aveRecordsPerFrame, getFudgeFactor(), keysLeft, keysRight, hashFunFactories, @@ -208,7 +208,7 @@ public class HybridHashJoinPOperator extends AbstractHashJoinPOperator { IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1] .getSize()]; for (int j = 0; j < nonMatchWriterFactories.length; j++) { - nonMatchWriterFactories[j] = context.getNullWriterFactory(); + nonMatchWriterFactories[j] = context.getMissingWriterFactory(); } opDesc = new OptimizedHybridHashJoinOperatorDescriptor(spec, getMemSizeInFrames(), maxInputBuildSizeInFrames, getFudgeFactor(), keysLeft, keysRight, hashFunFamilies, http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java index 49a087f..fff0fb4 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/InMemoryHashJoinPOperator.java @@ -83,8 +83,8 @@ public class InMemoryHashJoinPOperator extends AbstractHashJoinPOperator { int[] keysLeft = JobGenHelper.variablesToFieldIndexes(keysLeftBranch, inputSchemas[0]); int[] keysRight = JobGenHelper.variablesToFieldIndexes(keysRightBranch, inputSchemas[1]); IVariableTypeEnvironment env = context.getTypeEnvironment(op); - IBinaryHashFunctionFactory[] hashFunFactories = JobGenHelper.variablesToBinaryHashFunctionFactories( - keysLeftBranch, env, context); + IBinaryHashFunctionFactory[] hashFunFactories = JobGenHelper + .variablesToBinaryHashFunctionFactories(keysLeftBranch, env, context); IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[keysLeft.length]; int i = 0; IBinaryComparatorFactoryProvider bcfp = context.getBinaryComparatorFactoryProvider(); @@ -93,8 +93,10 @@ public class InMemoryHashJoinPOperator extends AbstractHashJoinPOperator { comparatorFactories[i++] = bcfp.getBinaryComparatorFactory(t, true); } - IPredicateEvaluatorFactoryProvider predEvaluatorFactoryProvider = context.getPredicateEvaluatorFactoryProvider(); - IPredicateEvaluatorFactory predEvaluatorFactory = ( predEvaluatorFactoryProvider == null ? null : predEvaluatorFactoryProvider.getPredicateEvaluatorFactory(keysLeft, keysRight)); + IPredicateEvaluatorFactoryProvider predEvaluatorFactoryProvider = context + .getPredicateEvaluatorFactoryProvider(); + IPredicateEvaluatorFactory predEvaluatorFactory = (predEvaluatorFactoryProvider == null ? null + : predEvaluatorFactoryProvider.getPredicateEvaluatorFactory(keysLeft, keysRight)); RecordDescriptor recDescriptor = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), propagatedSchema, context); @@ -108,12 +110,13 @@ public class InMemoryHashJoinPOperator extends AbstractHashJoinPOperator { break; } case LEFT_OUTER: { - IMissingWriterFactory[] nullWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()]; - for (int j = 0; j < nullWriterFactories.length; j++) { - nullWriterFactories[j] = context.getNullWriterFactory(); + IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()]; + for (int j = 0; j < nonMatchWriterFactories.length; j++) { + nonMatchWriterFactories[j] = context.getMissingWriterFactory(); } opDesc = new InMemoryHashJoinOperatorDescriptor(spec, keysLeft, keysRight, hashFunFactories, - comparatorFactories, predEvaluatorFactory, recDescriptor, true, nullWriterFactories, tableSize); + comparatorFactories, predEvaluatorFactory, recDescriptor, true, nonMatchWriterFactories, + tableSize); break; } default: { @@ -129,7 +132,8 @@ public class InMemoryHashJoinPOperator extends AbstractHashJoinPOperator { } @Override - protected List deliveredLocalProperties(ILogicalOperator op, IOptimizationContext context) { + protected List deliveredLocalProperties(ILogicalOperator op, + IOptimizationContext context) { AbstractLogicalOperator op0 = (AbstractLogicalOperator) op.getInputs().get(0).getValue(); IPhysicalPropertiesVector pv0 = op0.getPhysicalOperator().getDeliveredProperties(); List lp0 = pv0.getLocalProperties(); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/LeftOuterUnnestPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/LeftOuterUnnestPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/LeftOuterUnnestPOperator.java new file mode 100644 index 0000000..74d67bc --- /dev/null +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/LeftOuterUnnestPOperator.java @@ -0,0 +1,34 @@ +/* + * 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.algebra.operators.physical; + +import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag; + +public class LeftOuterUnnestPOperator extends AbstractUnnestPOperator { + + public LeftOuterUnnestPOperator() { + super(true); + } + + @Override + public PhysicalOperatorTag getOperatorTag() { + return PhysicalOperatorTag.LEFT_OUTER_UNNEST; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NLJoinPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NLJoinPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NLJoinPOperator.java index c2b78a0..5384347 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NLJoinPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/NLJoinPOperator.java @@ -145,12 +145,12 @@ public class NLJoinPOperator extends AbstractJoinPOperator { break; } case LEFT_OUTER: { - IMissingWriterFactory[] nullWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()]; - for (int j = 0; j < nullWriterFactories.length; j++) { - nullWriterFactories[j] = context.getNullWriterFactory(); + IMissingWriterFactory[] nonMatchWriterFactories = new IMissingWriterFactory[inputSchemas[1].getSize()]; + for (int j = 0; j < nonMatchWriterFactories.length; j++) { + nonMatchWriterFactories[j] = context.getMissingWriterFactory(); } opDesc = new NestedLoopJoinOperatorDescriptor(spec, comparatorFactory, recDescriptor, memSize, true, - nullWriterFactories); + nonMatchWriterFactories); break; } default: { http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java index 9b35922..e87f3f6 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/StreamSelectPOperator.java @@ -64,11 +64,12 @@ public class StreamSelectPOperator extends AbstractPhysicalOperator { throws AlgebricksException { SelectOperator select = (SelectOperator) op; IExpressionRuntimeProvider expressionRuntimeProvider = context.getExpressionRuntimeProvider(); - IScalarEvaluatorFactory cond = expressionRuntimeProvider.createEvaluatorFactory(select.getCondition() - .getValue(), context.getTypeEnvironment(op), inputSchemas, context); + IScalarEvaluatorFactory cond = expressionRuntimeProvider.createEvaluatorFactory( + select.getCondition().getValue(), context.getTypeEnvironment(op), inputSchemas, context); StreamSelectRuntimeFactory runtime = new StreamSelectRuntimeFactory(cond, null, - context.getBinaryBooleanInspectorFactory(), select.getRetainNull(), inputSchemas[0].findVariable(select - .getNullPlaceholderVariable()), context.getNullWriterFactory()); + context.getBinaryBooleanInspectorFactory(), select.getRetainMissing(), + inputSchemas[0].findVariable(select.getMissingPlaceholderVariable()), + context.getMissingWriterFactory()); // contribute one Asterix framewriter RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context); builder.contributeMicroOperator(select, runtime, recDesc); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java index a67efd6..d43ddab 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/SubplanPOperator.java @@ -59,7 +59,7 @@ public class SubplanPOperator extends AbstractPhysicalOperator { public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) { AbstractLogicalOperator op2 = (AbstractLogicalOperator) op.getInputs().get(0).getValue(); IPhysicalPropertiesVector childsProperties = op2.getPhysicalOperator().getDeliveredProperties(); - List propsLocal = new ArrayList(); + List propsLocal = new ArrayList<>(); if (childsProperties.getLocalProperties() != null) { propsLocal.addAll(childsProperties.getLocalProperties()); } @@ -84,21 +84,21 @@ public class SubplanPOperator extends AbstractPhysicalOperator { @Override public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op, IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema) - throws AlgebricksException { + throws AlgebricksException { SubplanOperator subplan = (SubplanOperator) op; if (subplan.getNestedPlans().size() != 1) { throw new NotImplementedException("Subplan currently works only for one nested plan with one root."); } AlgebricksPipeline[] subplans = compileSubplans(inputSchemas[0], subplan, opSchema, context); - assert (subplans.length == 1); + assert subplans.length == 1; AlgebricksPipeline np = subplans[0]; RecordDescriptor inputRecordDesc = JobGenHelper.mkRecordDescriptor( context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas[0], context); - IMissingWriterFactory[] nullWriterFactories = new IMissingWriterFactory[np.getOutputWidth()]; - for (int i = 0; i < nullWriterFactories.length; i++) { - nullWriterFactories[i] = context.getNullWriterFactory(); + IMissingWriterFactory[] missingWriterFactories = new IMissingWriterFactory[np.getOutputWidth()]; + for (int i = 0; i < missingWriterFactories.length; i++) { + missingWriterFactories[i] = context.getMissingWriterFactory(); } - SubplanRuntimeFactory runtime = new SubplanRuntimeFactory(np, nullWriterFactories, inputRecordDesc, null); + SubplanRuntimeFactory runtime = new SubplanRuntimeFactory(np, missingWriterFactories, inputRecordDesc, null); RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context); builder.contributeMicroOperator(subplan, runtime, recDesc); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnnestPOperator.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnnestPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnnestPOperator.java index 31178a0..7ebf684 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnnestPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/UnnestPOperator.java @@ -18,84 +18,17 @@ */ package org.apache.hyracks.algebricks.core.algebra.operators.physical; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.core.algebra.base.IHyracksJobBuilder; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator; -import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext; -import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag; import org.apache.hyracks.algebricks.core.algebra.base.PhysicalOperatorTag; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind; -import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider; -import org.apache.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator; -import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext; -import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenHelper; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory; -import org.apache.hyracks.algebricks.runtime.operators.std.UnnestRuntimeFactory; -import org.apache.hyracks.api.dataflow.value.RecordDescriptor; -public class UnnestPOperator extends AbstractScanPOperator { +public class UnnestPOperator extends AbstractUnnestPOperator { - @Override - public PhysicalOperatorTag getOperatorTag() { - return PhysicalOperatorTag.UNNEST; + public UnnestPOperator() { + super(false); } @Override - public boolean isMicroOperator() { - return true; - } - - @Override - public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) { - AbstractLogicalOperator op2 = (AbstractLogicalOperator) op.getInputs().get(0).getValue(); - deliveredProperties = op2.getDeliveredPhysicalProperties().clone(); + public PhysicalOperatorTag getOperatorTag() { + return PhysicalOperatorTag.UNNEST; } - @Override - public void contributeRuntimeOperator(IHyracksJobBuilder builder, JobGenContext context, ILogicalOperator op, - IOperatorSchema opSchema, IOperatorSchema[] inputSchemas, IOperatorSchema outerPlanSchema) - throws AlgebricksException { - UnnestOperator unnest = (UnnestOperator) op; - - int outCol = opSchema.findVariable(unnest.getVariable()); - ILogicalExpression unnestExpr = unnest.getExpressionRef().getValue(); - IExpressionRuntimeProvider expressionRuntimeProvider = context.getExpressionRuntimeProvider(); - boolean exit = false; - if (unnestExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) { - exit = true; - } else { - AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) unnestExpr; - if (fce.getKind() != FunctionKind.UNNEST) { - exit = true; - } - } - if (exit) { - throw new AlgebricksException("Unnest expression " + unnestExpr + " is not an unnesting function call."); - } - UnnestingFunctionCallExpression agg = (UnnestingFunctionCallExpression) unnestExpr; - IUnnestingEvaluatorFactory unnestingFactory = expressionRuntimeProvider.createUnnestingFunctionFactory(agg, - context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas, context); - - // for position offset - ILogicalExpression posOffsetExpr = unnest.getPositionOffsetExpr(); - IScalarEvaluatorFactory posOffsetExprEvalFactory = null; - if (posOffsetExpr != null) { - posOffsetExprEvalFactory = expressionRuntimeProvider.createEvaluatorFactory(posOffsetExpr, - context.getTypeEnvironment(op.getInputs().get(0).getValue()), inputSchemas, context); - } - - int[] projectionList = JobGenHelper.projectAllVariables(opSchema); - UnnestRuntimeFactory unnestRuntime = new UnnestRuntimeFactory(outCol, unnestingFactory, projectionList, - unnest.getPositionWriter(), posOffsetExprEvalFactory); - RecordDescriptor recDesc = JobGenHelper.mkRecordDescriptor(context.getTypeEnvironment(op), opSchema, context); - builder.contributeMicroOperator(unnest, unnestRuntime, recDesc); - ILogicalOperator src = unnest.getInputs().get(0).getValue(); - builder.contributeGraphEdge(src, 0, unnest, 0); - } } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java index a7ea706..f1f6217 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java @@ -49,7 +49,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperato import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -296,7 +296,7 @@ public class LogicalOperatorPrettyPrintVisitor implements ILogicalOperatorVisito } @Override - public String visitOuterUnnestOperator(OuterUnnestOperator op, Integer indent) throws AlgebricksException { + public String visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, Integer indent) throws AlgebricksException { StringBuilder buffer = new StringBuilder(); addIndent(buffer, indent).append("outer-unnest " + op.getVariable()); if (op.getPositionalVariable() != null) { http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/typing/PropagatingTypeEnvironment.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/typing/PropagatingTypeEnvironment.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/typing/PropagatingTypeEnvironment.java index a1be35d..fee9174 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/typing/PropagatingTypeEnvironment.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/typing/PropagatingTypeEnvironment.java @@ -58,7 +58,7 @@ public class PropagatingTypeEnvironment extends AbstractTypeEnvironment { return nonNullVariables; } - public List> getCorrelatedNullableVariableLists() { + public List> getCorrelatedMissableVariableLists() { return correlatedNullableVariableLists; } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/visitors/ILogicalOperatorVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/visitors/ILogicalOperatorVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/visitors/ILogicalOperatorVisitor.java index 298daf9..c0f9718 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/visitors/ILogicalOperatorVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/visitors/ILogicalOperatorVisitor.java @@ -38,7 +38,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperato import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -100,7 +100,7 @@ public interface ILogicalOperatorVisitor { public R visitUnnestOperator(UnnestOperator op, T arg) throws AlgebricksException; - public R visitOuterUnnestOperator(OuterUnnestOperator op, T arg) throws AlgebricksException; + public R visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, T arg) throws AlgebricksException; public R visitUnnestMapOperator(UnnestMapOperator op, T arg) throws AlgebricksException; http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobGenContext.java ---------------------------------------------------------------------- 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 caa46c8..f46fcaa 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 @@ -183,7 +183,7 @@ public class JobGenContext { return expressionTypeComputer.getType(expr, typingContext.getMetadataProvider(), env); } - public IMissingWriterFactory getNullWriterFactory() { + public IMissingWriterFactory getMissingWriterFactory() { return nonMatchWriterFactory; } http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java index aeeaf4e..f5bec22 100644 --- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java +++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/BreakSelectIntoConjunctsRule.java @@ -68,7 +68,7 @@ public class BreakSelectIntoConjunctsRule implements IAlgebraicRewriteRule { firstExpr = e; } else { SelectOperator newSelect = new SelectOperator(new MutableObject(e), - select.getRetainNull(), select.getNullPlaceholderVariable()); + select.getRetainMissing(), select.getMissingPlaceholderVariable()); List> botInpList = botOp.getInputs(); botInpList.clear(); botInpList.add(new MutableObject(newSelect)); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushSelectIntoJoinRule.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushSelectIntoJoinRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushSelectIntoJoinRule.java index 44c76e0..d0cd006 100644 --- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushSelectIntoJoinRule.java +++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/PushSelectIntoJoinRule.java @@ -253,8 +253,8 @@ public class PushSelectIntoJoinRule implements IAlgebraicRewriteRule { private static void copySelectToBranch(SelectOperator select, Mutable branch, IOptimizationContext context) throws AlgebricksException { - ILogicalOperator newSelect = new SelectOperator(select.getCondition(), select.getRetainNull(), - select.getNullPlaceholderVariable()); + ILogicalOperator newSelect = new SelectOperator(select.getCondition(), select.getRetainMissing(), + select.getMissingPlaceholderVariable()); Mutable newRef = new MutableObject(branch.getValue()); newSelect.getInputs().add(newRef); branch.setValue(newSelect); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java index 6524d87..6d3692f 100644 --- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java +++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java @@ -65,6 +65,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.physical.IndexBulklo import org.apache.hyracks.algebricks.core.algebra.operators.physical.IndexInsertDeleteUpsertPOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.InsertDeleteUpsertPOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.IntersectPOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.physical.LeftOuterUnnestPOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.MicroPreclusteredGroupByPOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.NestedTupleSourcePOperator; import org.apache.hyracks.algebricks.core.algebra.operators.physical.PreSortedDistinctByPOperator; @@ -261,6 +262,9 @@ public class SetAlgebricksPhysicalOperatorsRule implements IAlgebraicRewriteRule op.setPhysicalOperator(new UnnestPOperator()); break; } + case LEFT_OUTER_UNNEST: + op.setPhysicalOperator(new LeftOuterUnnestPOperator()); + break; case DATASOURCESCAN: { DataSourceScanOperator scan = (DataSourceScanOperator) op; IDataSource dataSource = scan.getDataSource(); http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/b0fe0ac0/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/ReplaceNtsWithSubplanInputOperatorVisitor.java ---------------------------------------------------------------------- diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/ReplaceNtsWithSubplanInputOperatorVisitor.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/ReplaceNtsWithSubplanInputOperatorVisitor.java index d36bff9..7eb9ac8 100644 --- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/ReplaceNtsWithSubplanInputOperatorVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/subplan/ReplaceNtsWithSubplanInputOperatorVisitor.java @@ -42,11 +42,11 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOpe import org.apache.hyracks.algebricks.core.algebra.operators.logical.IntersectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestMapOperator; +import org.apache.hyracks.algebricks.core.algebra.operators.logical.LeftOuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.MaterializeOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator; -import org.apache.hyracks.algebricks.core.algebra.operators.logical.OuterUnnestOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator; import org.apache.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator; @@ -209,7 +209,8 @@ class ReplaceNtsWithSubplanInputOperatorVisitor implements IQueryOperatorVisitor } @Override - public ILogicalOperator visitOuterUnnestOperator(OuterUnnestOperator op, Void arg) throws AlgebricksException { + public ILogicalOperator visitLeftOuterUnnestOperator(LeftOuterUnnestOperator op, Void arg) + throws AlgebricksException { return visit(op); }