>From Vijay Sarathy <[email protected]>: Vijay Sarathy has submitted this change. ( https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17301 )
Change subject: [ASTERIXDB-3094][COMP] Add cost and cardinality to explain ...................................................................... [ASTERIXDB-3094][COMP] Add cost and cardinality to explain Change-Id: I7b4a6c78dca3326f070e1dda888d774dc6100c0b Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17301 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java M hyracks-fullstack/algebricks/algebricks-core/src/test/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanVerifierTestBase.java M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/IPlanPrettyPrinter.java M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java M asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java M asterixdb/asterix-app/src/test/resources/runtimets/results/api/compileonly/compileonly.2.regexjson M hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanStabilityVerifier.java 11 files changed, 126 insertions(+), 55 deletions(-) Approvals: Ali Alsuliman: Looks good to me, approved Jenkins: Verified; Verified Objections: Anon. E. Moose #1000171: Violations found diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java index dc722e1..20b4d82 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EnumerateJoinsRule.java @@ -513,7 +513,7 @@ throws AlgebricksException { if (LOGGER.isTraceEnabled()) { pp.reset(); - pp.printOperator(op, true); + pp.printOperator(op, true, false); LOGGER.trace("---------------------------- {}\n{}\n----------------------------", text, pp); } } diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java index 9b9fd28..f9f34bf 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/cbo/EstimatedCostComputationVisitor.java @@ -86,7 +86,7 @@ public Pair<Double, Double> visitEmptyTupleSourceOperator(EmptyTupleSourceOperator op, Double arg) throws AlgebricksException { // Empty tuple source operator sends an empty tuple to downstream operators. - return new Pair<>(1.0, 1.0); + return new Pair<>(0.0, 0.0); } @Override @@ -220,7 +220,7 @@ @Override public Pair<Double, Double> visitDataScanOperator(DataSourceScanOperator op, Double arg) throws AlgebricksException { - Pair<Double, Double> cardCost = new Pair<>(1.0, 1.0); + Pair<Double, Double> cardCost = new Pair<>(0.0, 0.0); for (Map.Entry<String, Object> anno : op.getAnnotations().entrySet()) { if (anno.getValue() != null && anno.getKey().equals(OperatorAnnotations.OP_INPUT_CARDINALITY)) { @@ -250,7 +250,7 @@ op.getAnnotations().put(OperatorAnnotations.OP_COST_LOCAL, exchCost); op.getAnnotations().put(OperatorAnnotations.OP_COST_TOTAL, exchCost + cardCost.getSecond()); } else { - op.getAnnotations().put(OperatorAnnotations.OP_COST_LOCAL, cardCost.getSecond()); + op.getAnnotations().put(OperatorAnnotations.OP_COST_LOCAL, 0.0); op.getAnnotations().put(OperatorAnnotations.OP_COST_TOTAL, cardCost.getSecond()); } op.getAnnotations().put(OperatorAnnotations.OP_OUTPUT_CARDINALITY, cardCost.getFirst()); @@ -305,12 +305,12 @@ private static Pair<Double, Double> annotate(EstimatedCostComputationVisitor visitor, ILogicalOperator op, Double arg) throws AlgebricksException { if (op.getInputs().isEmpty()) { - return new Pair<>(1.0, 1.0); + return new Pair<>(0.0, 0.0); } Pair<Double, Double> cardCost = op.getInputs().get(0).getValue().accept(visitor, arg); op.getAnnotations().put(OperatorAnnotations.OP_OUTPUT_CARDINALITY, cardCost.getFirst()); op.getAnnotations().put(OperatorAnnotations.OP_COST_TOTAL, cardCost.getSecond()); - op.getAnnotations().put(OperatorAnnotations.OP_COST_LOCAL, cardCost.getSecond()); + op.getAnnotations().put(OperatorAnnotations.OP_COST_LOCAL, 0.0); return cardCost; } @@ -322,9 +322,9 @@ return operator.getInputs().get(0).getValue().accept(this, arg); } - // Visits an inner join operator, particularly, deals with the case the join is a cartesian product. + // Visits an inner join operator. private Pair<Double, Double> visitInnerJoin(InnerJoinOperator joinOperator, Double arg) throws AlgebricksException { - Pair<Double, Double> cardCost = new Pair<>(1.0, 1.0); + Pair<Double, Double> cardCost = new Pair<>(0.0, 0.0); ILogicalOperator left = joinOperator.getInputs().get(0).getValue(); ILogicalOperator right = joinOperator.getInputs().get(1).getValue(); 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 adcdcb2..597e7cc 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 @@ -212,7 +212,7 @@ if ((isQuery || isLoad) && !conf.is(SessionConfig.FORMAT_ONLY_PHYSICAL_OPS) && conf.is(SessionConfig.OOB_LOGICAL_PLAN)) { - generateLogicalPlan(plan, output.config().getPlanFormat()); + generateLogicalPlan(plan, output.config().getPlanFormat(), isExplainOnly); } ICcApplicationContext ccAppContext = metadataProvider.getApplicationContext(); CompilerProperties compilerProperties = ccAppContext.getCompilerProperties(); @@ -295,7 +295,7 @@ if (!conf.isGenerateJobSpec()) { if (isQuery || isLoad) { - generateOptimizedLogicalPlan(plan, output.config().getPlanFormat()); + generateOptimizedLogicalPlan(plan, output.config().getPlanFormat(), isExplainOnly); } return null; } @@ -320,7 +320,8 @@ if (conf.is(SessionConfig.OOB_OPTIMIZED_LOGICAL_PLAN) || isExplainOnly) { if (isQuery || isLoad) { - generateOptimizedLogicalPlan(plan, spec.getLogical2PhysicalMap(), output.config().getPlanFormat()); + generateOptimizedLogicalPlan(plan, spec.getLogical2PhysicalMap(), output.config().getPlanFormat(), + isExplainOnly); } } @@ -517,18 +518,22 @@ } } - private void generateLogicalPlan(ILogicalPlan plan, SessionConfig.PlanFormat format) throws AlgebricksException { - executionPlans.setLogicalPlan(getPrettyPrintVisitor(format).printPlan(plan).toString()); + private void generateLogicalPlan(ILogicalPlan plan, SessionConfig.PlanFormat format, + boolean printOptimizerEstimates) throws AlgebricksException { + executionPlans + .setLogicalPlan(getPrettyPrintVisitor(format).printPlan(plan, printOptimizerEstimates).toString()); } private void generateOptimizedLogicalPlan(ILogicalPlan plan, Map<Object, String> log2phys, - SessionConfig.PlanFormat format) throws AlgebricksException { - executionPlans.setOptimizedLogicalPlan(getPrettyPrintVisitor(format).printPlan(plan, log2phys).toString()); + SessionConfig.PlanFormat format, boolean printOptimizerEstimates) throws AlgebricksException { + executionPlans.setOptimizedLogicalPlan( + getPrettyPrintVisitor(format).printPlan(plan, log2phys, printOptimizerEstimates).toString()); } - private void generateOptimizedLogicalPlan(ILogicalPlan plan, SessionConfig.PlanFormat format) - throws AlgebricksException { - executionPlans.setOptimizedLogicalPlan(getPrettyPrintVisitor(format).printPlan(plan).toString()); + private void generateOptimizedLogicalPlan(ILogicalPlan plan, SessionConfig.PlanFormat format, + boolean printOptimizerEstimates) throws AlgebricksException { + executionPlans.setOptimizedLogicalPlan( + getPrettyPrintVisitor(format).printPlan(plan, printOptimizerEstimates).toString()); } private void generateJob(JobSpecification spec) { diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/compileonly/compileonly.2.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/compileonly/compileonly.2.regexjson index 40a764c..9856681 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/compileonly/compileonly.2.regexjson +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/compileonly/compileonly.2.regexjson @@ -4,6 +4,7 @@ "expressions":"R{.*}", "operatorId":"R{.*}", "execution-mode":"R{.*}", + "optimizer-estimates":{"cardinality":0.0,"op-cost":0.0,"total-cost":0.0}, "inputs":"R{.*}" } } \ No newline at end of file diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java index b5b01a0..1bf2579 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/ALogicalPlanImpl.java @@ -53,7 +53,7 @@ } public static String prettyPrintPlan(ILogicalPlan plan) throws AlgebricksException { - return PlanPrettyPrinter.createStringPlanPrettyPrinter().printPlan(plan).toString(); + return PlanPrettyPrinter.createStringPlanPrettyPrinter().printPlan(plan, true).toString(); } @Override diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanStabilityVerifier.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanStabilityVerifier.java index 65aa64a..d6ffe9e 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanStabilityVerifier.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanStabilityVerifier.java @@ -263,7 +263,7 @@ static String printOperator(ILogicalOperator op, IPlanPrettyPrinter printer) { try { - return printer.reset().printOperator((AbstractLogicalOperator) op, false).toString(); + return printer.reset().printOperator((AbstractLogicalOperator) op, false, false).toString(); } catch (AlgebricksException e) { // shouldn't happen return op.toString(); diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/IPlanPrettyPrinter.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/IPlanPrettyPrinter.java index 6afbabc..2b53de4 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/IPlanPrettyPrinter.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/IPlanPrettyPrinter.java @@ -32,20 +32,22 @@ /** Prints the plan rooted at the operator argument. */ default IPlanPrettyPrinter printOperator(AbstractLogicalOperator operator) throws AlgebricksException { - return printOperator(operator, true); + return printOperator(operator, true, false); } /** Prints given operator and optionally it's inputs */ - IPlanPrettyPrinter printOperator(AbstractLogicalOperator operator, boolean printInputs) throws AlgebricksException; + IPlanPrettyPrinter printOperator(AbstractLogicalOperator operator, boolean printInputs, + boolean printOptimizerEstimates) throws AlgebricksException; /** Prints given expression */ IPlanPrettyPrinter printExpression(ILogicalExpression expression) throws AlgebricksException; /** Prints the whole logical plan. */ - IPlanPrettyPrinter printPlan(ILogicalPlan plan) throws AlgebricksException; + IPlanPrettyPrinter printPlan(ILogicalPlan plan, boolean printOptimizerEstimates) throws AlgebricksException; /** Prints the logical plan, annotated with physical operator and connector ids */ - IPlanPrettyPrinter printPlan(ILogicalPlan plan, Map<Object, String> log2phys) throws AlgebricksException; + IPlanPrettyPrinter printPlan(ILogicalPlan plan, Map<Object, String> log2phys, boolean printOptimizerEstimates) + throws AlgebricksException; /** Resets the state of the pretty printer. */ IPlanPrettyPrinter reset() throws AlgebricksException; 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 430ca1c..e3f9eeb 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 @@ -91,22 +91,23 @@ } @Override - public final IPlanPrettyPrinter printPlan(ILogicalPlan plan) throws AlgebricksException { + public final IPlanPrettyPrinter printPlan(ILogicalPlan plan, boolean printOptimizerEstimates) + throws AlgebricksException { printPlanImpl(plan, 0); return this; } @Override - public final IPlanPrettyPrinter printPlan(ILogicalPlan plan, Map<Object, String> log2phys) - throws AlgebricksException { + public final IPlanPrettyPrinter printPlan(ILogicalPlan plan, Map<Object, String> log2phys, + boolean printOptimizerEstimates) throws AlgebricksException { //TODO(ian): would be nice if the text plan returned real operator ids too printPlanImpl(plan, 0); return this; } @Override - public final IPlanPrettyPrinter printOperator(AbstractLogicalOperator op, boolean printInputs) - throws AlgebricksException { + public final IPlanPrettyPrinter printOperator(AbstractLogicalOperator op, boolean printInputs, + boolean printOptimizerEstimates) throws AlgebricksException { printOperatorImpl(op, 0, printInputs); return this; } diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java index 14bac72..fa98091 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java @@ -159,37 +159,38 @@ } @Override - public final IPlanPrettyPrinter printPlan(ILogicalPlan plan) throws AlgebricksException { - printPlanImpl(plan); + public final IPlanPrettyPrinter printPlan(ILogicalPlan plan, boolean printOptimizerEstimates) + throws AlgebricksException { + printPlanImpl(plan, printOptimizerEstimates); flushContentToWriter(); return this; } @Override - public final IPlanPrettyPrinter printPlan(ILogicalPlan plan, Map<Object, String> log2phys) - throws AlgebricksException { + public final IPlanPrettyPrinter printPlan(ILogicalPlan plan, Map<Object, String> log2phys, + boolean printOptimizerEstimates) throws AlgebricksException { this.log2odid = log2phys; - printPlanImpl(plan); + printPlanImpl(plan, printOptimizerEstimates); flushContentToWriter(); return this; } @Override - public final IPlanPrettyPrinter printOperator(AbstractLogicalOperator op, boolean printInputs) - throws AlgebricksException { - printOperatorImpl(op, printInputs); + public final IPlanPrettyPrinter printOperator(AbstractLogicalOperator op, boolean printInputs, + boolean printOptimizerEstimates) throws AlgebricksException { + printOperatorImpl(op, printInputs, printOptimizerEstimates); flushContentToWriter(); return this; } - private void printPlanImpl(ILogicalPlan plan) throws AlgebricksException { + private void printPlanImpl(ILogicalPlan plan, boolean printOptimizerEstimates) throws AlgebricksException { try { boolean writeArrayOfRoots = plan.getRoots().size() > 1; if (writeArrayOfRoots) { jsonGenerator.writeStartArray(); } for (Mutable<ILogicalOperator> root : plan.getRoots()) { - printOperatorImpl((AbstractLogicalOperator) root.getValue(), true); + printOperatorImpl((AbstractLogicalOperator) root.getValue(), true, printOptimizerEstimates); } if (writeArrayOfRoots) { jsonGenerator.writeEndArray(); @@ -199,8 +200,11 @@ } } - private void printOperatorImpl(AbstractLogicalOperator op, boolean printInputs) throws AlgebricksException { + private void printOperatorImpl(AbstractLogicalOperator op, boolean printInputs, boolean printOptimizerEstimates) + throws AlgebricksException { try { + boolean nestPlanInPlanField = nestPlanInPlanField(op, printOptimizerEstimates); + jsonGenerator.writeStartObject(); op.accept(this, null); jsonGenerator.writeStringField("operatorId", idCounter.printOperatorId(op)); @@ -214,24 +218,71 @@ } jsonGenerator.writeStringField("execution-mode", op.getExecutionMode().toString()); + generateCardCostFields(op); + + if (printInputs && !op.getInputs().isEmpty()) { + jsonGenerator.writeArrayFieldStart("inputs"); + for (Mutable<ILogicalOperator> k : op.getInputs()) { + printOperatorImpl((AbstractLogicalOperator) k.getValue(), printInputs, printOptimizerEstimates); + } + jsonGenerator.writeEndArray(); + } + jsonGenerator.writeEndObject(); + if (nestPlanInPlanField) { + jsonGenerator.writeEndObject(); + } + } catch (IOException e) { + throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e)); + } + } + + private boolean nestPlanInPlanField(AbstractLogicalOperator op, boolean printOptimizerEstimates) + throws IOException { + if (op.getOperatorTag() == LogicalOperatorTag.DISTRIBUTE_RESULT && printOptimizerEstimates) { + double cardinality = 0.0; + double cost = 0.0; + for (Map.Entry<String, Object> anno : op.getAnnotations().entrySet()) { + if (anno.getValue() != null && anno.getKey().equals(OperatorAnnotations.OP_OUTPUT_CARDINALITY)) { + cardinality = (double) anno.getValue(); + } else if (anno.getValue() != null && anno.getKey().equals(OperatorAnnotations.OP_COST_TOTAL)) { + cost = (double) anno.getValue(); + } + } + + jsonGenerator.writeStartObject(); + jsonGenerator.writeNumberField("cardinality", cardinality); + jsonGenerator.writeNumberField("cost", cost); + jsonGenerator.writeFieldName("plan"); + return true; + } + return false; + } + + private void generateCardCostFields(AbstractLogicalOperator op) throws AlgebricksException { + try { + double opCard = 0.0; + double opCostLocal = 0.0; + double opCostTotal = 0.0; + for (Map.Entry<String, Object> anno : op.getAnnotations().entrySet()) { Object annotationVal = anno.getValue(); if (annotationVal != null) { String annotation = anno.getKey(); switch (annotation) { case OperatorAnnotations.OP_COST_LOCAL: + opCostLocal = (double) annotationVal; + break; case OperatorAnnotations.OP_COST_TOTAL: - jsonGenerator.writeStringField(annotation.toLowerCase().replace('_', '-'), - annotationVal.toString()); + opCostTotal = (double) annotationVal; break; case OperatorAnnotations.OP_INPUT_CARDINALITY: if (op.getOperatorTag() == LogicalOperatorTag.DATASOURCESCAN) { - jsonGenerator.writeStringField(OP_CARDINALITY, annotationVal.toString()); + opCard = (double) annotationVal; } break; case OperatorAnnotations.OP_OUTPUT_CARDINALITY: if (op.getOperatorTag() != LogicalOperatorTag.DATASOURCESCAN) { - jsonGenerator.writeStringField(OP_CARDINALITY, annotationVal.toString()); + opCard = (double) annotationVal; } break; default: @@ -239,14 +290,12 @@ } } } - - if (printInputs && !op.getInputs().isEmpty()) { - jsonGenerator.writeArrayFieldStart("inputs"); - for (Mutable<ILogicalOperator> k : op.getInputs()) { - printOperatorImpl((AbstractLogicalOperator) k.getValue(), printInputs); - } - jsonGenerator.writeEndArray(); - } + jsonGenerator.writeObjectFieldStart("optimizer-estimates"); + jsonGenerator.writeNumberField(OP_CARDINALITY, opCard); + jsonGenerator.writeNumberField(OperatorAnnotations.OP_COST_LOCAL.toLowerCase().replace('_', '-'), + opCostLocal); + jsonGenerator.writeNumberField(OperatorAnnotations.OP_COST_TOTAL.toLowerCase().replace('_', '-'), + opCostTotal); jsonGenerator.writeEndObject(); } catch (IOException e) { throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e)); @@ -811,7 +860,7 @@ jsonGenerator.writeArrayFieldStart("subplan"); List<ILogicalPlan> nestedPlans = op.getNestedPlans(); for (int i = 0, size = nestedPlans.size(); i < size; i++) { - printPlanImpl(nestedPlans.get(i)); + printPlanImpl(nestedPlans.get(i), false); } jsonGenerator.writeEndArray(); idCounter.previousPrefix(); diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java index a717295..676b9c7 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java @@ -69,7 +69,7 @@ private void logPlanAt(String name, Level lvl) throws AlgebricksException { if (AlgebricksConfig.ALGEBRICKS_LOGGER.isEnabled(lvl)) { - String planStr = context.getPrettyPrinter().reset().printPlan(plan).toString(); + String planStr = context.getPrettyPrinter().reset().printPlan(plan, true).toString(); AlgebricksConfig.ALGEBRICKS_LOGGER.log(lvl, name + ":\n" + LogRedactionUtil.userData(planStr)); } } diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/test/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanVerifierTestBase.java b/hyracks-fullstack/algebricks/algebricks-core/src/test/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanVerifierTestBase.java index 65d6460..2f7bc9b 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/test/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanVerifierTestBase.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/test/java/org/apache/hyracks/algebricks/core/algebra/plan/PlanVerifierTestBase.java @@ -71,7 +71,7 @@ String printOp(ILogicalOperator op) { try { - return planPrinter.reset().printOperator((AbstractLogicalOperator) op, false).toString(); + return planPrinter.reset().printOperator((AbstractLogicalOperator) op, false, false).toString(); } catch (AlgebricksException e) { throw new RuntimeException(e); } -- To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17301 To unsubscribe, or for help writing mail filters, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Change-Id: I7b4a6c78dca3326f070e1dda888d774dc6100c0b Gerrit-Change-Number: 17301 Gerrit-PatchSet: 9 Gerrit-Owner: Vijay Sarathy <[email protected]> Gerrit-Reviewer: Ali Alsuliman <[email protected]> Gerrit-Reviewer: Anon. E. Moose #1000171 Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Vijay Sarathy <[email protected]> Gerrit-MessageType: merged
