pretty-print path steps
Project: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/commit/a09d1f5d Tree: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/tree/a09d1f5d Diff: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/diff/a09d1f5d Branch: refs/heads/master Commit: a09d1f5ddccbf2f031424a79e764d220128863b6 Parents: 8cc2837 Author: Till Westmann <[email protected]> Authored: Wed Mar 19 16:45:32 2014 -0700 Committer: Till Westmann <[email protected]> Committed: Wed Mar 19 16:45:32 2014 -0700 ---------------------------------------------------------------------- .../java/org/apache/vxquery/cli/VXQuery.java | 3 +- ...ueryLogicalExpressionPrettyPrintVisitor.java | 45 ++++++++++++-------- .../org/apache/vxquery/types/AnyItemType.java | 10 ++--- .../org/apache/vxquery/types/AnyNodeType.java | 5 +++ .../org/apache/vxquery/types/AnySimpleType.java | 5 +++ .../java/org/apache/vxquery/types/AnyType.java | 5 +++ .../org/apache/vxquery/types/AttributeType.java | 10 +++++ .../org/apache/vxquery/types/CommentType.java | 5 +++ .../org/apache/vxquery/types/DocumentType.java | 7 +++ .../org/apache/vxquery/types/ElementType.java | 18 +++++--- .../types/ProcessingInstructionType.java | 11 +++++ .../java/org/apache/vxquery/types/TextType.java | 5 +++ .../xmlquery/query/XMLQueryCompiler.java | 2 +- 13 files changed, 101 insertions(+), 30 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java ---------------------------------------------------------------------- diff --git a/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java b/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java index 7e3abfc..de1f52f 100644 --- a/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java +++ b/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java @@ -236,9 +236,8 @@ public class VXQuery { private StringBuilder appendPrettyPlan(StringBuilder sb, Module module) { try { - StaticContext ctx = module.getCompilerControlBlock().getStaticContext(); ILogicalExpressionVisitor<String, Integer> ev = new VXQueryLogicalExpressionPrettyPrintVisitor( - ctx); + module.getModuleContext()); LogicalOperatorPrettyPrintVisitor v = new LogicalOperatorPrettyPrintVisitor(ev); PlanPrettyPrinter.printPlan(module.getBody(), sb, v, 0); } catch (AlgebricksException e) { http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/prettyprint/VXQueryLogicalExpressionPrettyPrintVisitor.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/prettyprint/VXQueryLogicalExpressionPrettyPrintVisitor.java b/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/prettyprint/VXQueryLogicalExpressionPrettyPrintVisitor.java index ccdfb6b..c630837 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/prettyprint/VXQueryLogicalExpressionPrettyPrintVisitor.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/prettyprint/VXQueryLogicalExpressionPrettyPrintVisitor.java @@ -96,21 +96,7 @@ public class VXQueryLogicalExpressionPrettyPrintVisitor implements ILogicalExpre @Override public String visitScalarFunctionCallExpression(ScalarFunctionCallExpression expr, Integer indent) throws AlgebricksException { - assert expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL; - - StringBuilder sb = new StringBuilder(); - - FunctionIdentifier fi = expr.getFunctionIdentifier(); - if (identifiesTypeOperator(fi)) { - final ILogicalExpression typeEx = expr.getArguments().get(1).getValue(); - assert typeEx.getExpressionTag() == LogicalExpressionTag.CONSTANT; - SequenceType type = getSequenceType((ConstantExpression) typeEx); - sb.append(fi + " <" + type + ">, Args:"); - appendArgument(sb, expr.getArguments().get(0), indent + 2); - } else { - appendFunction(sb, expr, indent); - } - return sb.toString(); + return appendFunction(new StringBuilder(), expr, indent).toString(); } @Override @@ -133,10 +119,35 @@ public class VXQueryLogicalExpressionPrettyPrintVisitor implements ILogicalExpre || BuiltinOperators.INSTANCE_OF.getFunctionIdentifier().equals(fi); } + protected boolean identifiesPathStep(FunctionIdentifier fi) { + return BuiltinOperators.CHILD.getFunctionIdentifier().equals(fi) + || BuiltinOperators.ATTRIBUTE.getFunctionIdentifier().equals(fi) + || BuiltinOperators.ANCESTOR.getFunctionIdentifier().equals(fi) + || BuiltinOperators.ANCESTOR_OR_SELF.getFunctionIdentifier().equals(fi) + || BuiltinOperators.DESCENDANT.getFunctionIdentifier().equals(fi) + || BuiltinOperators.DESCENDANT_OR_SELF.getFunctionIdentifier().equals(fi) + || BuiltinOperators.PARENT.getFunctionIdentifier().equals(fi) + || BuiltinOperators.FOLLOWING.getFunctionIdentifier().equals(fi) + || BuiltinOperators.FOLLOWING_SIBLING.getFunctionIdentifier().equals(fi) + || BuiltinOperators.PRECEDING.getFunctionIdentifier().equals(fi) + || BuiltinOperators.PRECEDING_SIBLING.getFunctionIdentifier().equals(fi) + || BuiltinOperators.SELF.getFunctionIdentifier().equals(fi); + } + protected StringBuilder appendFunction(StringBuilder sb, AbstractFunctionCallExpression expr, Integer indent) throws AlgebricksException { - sb.append("function-call: " + expr.getFunctionIdentifier() + ", Args:"); - appendArguments(sb, expr.getArguments(), indent + 2); + assert expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL; + FunctionIdentifier fi = expr.getFunctionIdentifier(); + if (identifiesTypeOperator(fi) || identifiesPathStep(fi)) { + final ILogicalExpression typeEx = expr.getArguments().get(1).getValue(); + assert typeEx.getExpressionTag() == LogicalExpressionTag.CONSTANT; + SequenceType type = getSequenceType((ConstantExpression) typeEx); + sb.append(fi + " <" + type + ">, Args:"); + appendArgument(sb, expr.getArguments().get(0), indent + 2); + } else { + sb.append("function-call: " + fi + ", Args:"); + appendArguments(sb, expr.getArguments(), indent + 2); + } return sb; } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/AnyItemType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/AnyItemType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/AnyItemType.java index 32cd3b0..c6db3ad 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/AnyItemType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/AnyItemType.java @@ -28,6 +28,11 @@ public final class AnyItemType implements ItemType { } @Override + public String toString() { + return "item"; + } + + @Override public int hashCode() { return AnyItemType.class.hashCode(); } @@ -36,9 +41,4 @@ public final class AnyItemType implements ItemType { public boolean equals(Object other) { return other instanceof AnyItemType; } - - @Override - public String toString() { - return String.valueOf(BuiltinTypeRegistry.INSTANCE.getTypeName(BuiltinTypeConstants.XS_ANY_TYPE_ID)); - } } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/AnyNodeType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/AnyNodeType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/AnyNodeType.java index a40e703..2f8ffce 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/AnyNodeType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/AnyNodeType.java @@ -28,6 +28,11 @@ public final class AnyNodeType extends AbstractNodeType { } @Override + public String toString() { + return "node"; + } + + @Override public int hashCode() { return AnyNodeType.class.hashCode(); } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/AnySimpleType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/AnySimpleType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/AnySimpleType.java index 7781656..bc5044c 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/AnySimpleType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/AnySimpleType.java @@ -53,6 +53,11 @@ public final class AnySimpleType implements SimpleType { } @Override + public String toString() { + return String.valueOf(BuiltinTypeRegistry.INSTANCE.getTypeName(getTypeId())); + } + + @Override public int hashCode() { return AnySimpleType.class.hashCode(); } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/AnyType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/AnyType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/AnyType.java index b8911fa..19519c2 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/AnyType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/AnyType.java @@ -53,6 +53,11 @@ public final class AnyType implements ComplexType { } @Override + public String toString() { + return String.valueOf(BuiltinTypeRegistry.INSTANCE.getTypeName(getTypeId())); + } + + @Override public int hashCode() { return AnyType.class.hashCode(); } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/AttributeType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/AttributeType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/AttributeType.java index 69f5e28..0cacd59 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/AttributeType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/AttributeType.java @@ -42,6 +42,16 @@ public final class AttributeType extends AbstractNodeType { } @Override + public String toString() { + StringBuilder sb = new StringBuilder("attribute("); + sb.append(nameTest != null ? nameTest : "*"); + if (contentType != null) { + sb.append(", ").append(contentType); + } + return sb.append(")").toString(); + } + + @Override public int hashCode() { final int prime = 31; int result = 1; http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/CommentType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/CommentType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/CommentType.java index 8300e0a..4ca4a7c 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/CommentType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/CommentType.java @@ -28,6 +28,11 @@ public final class CommentType extends AbstractNodeType { } @Override + public String toString() { + return "comment"; + } + + @Override public int hashCode() { return CommentType.class.hashCode(); } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/DocumentType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/DocumentType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/DocumentType.java index f06fb71..bc02842 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/DocumentType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/DocumentType.java @@ -35,6 +35,13 @@ public final class DocumentType extends AbstractNodeType { } @Override + public String toString() { + StringBuilder sb = new StringBuilder("document("); + sb.append(elementType != null ? elementType : "*"); + return sb.append(")").toString(); + } + + @Override public int hashCode() { final int prime = 31; int result = 1; http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/ElementType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/ElementType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/ElementType.java index 343f18b..26dffe9 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/ElementType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/ElementType.java @@ -47,6 +47,19 @@ public final class ElementType extends AbstractNodeType { } @Override + public String toString() { + StringBuilder sb = new StringBuilder("element("); + sb.append(nameTest != null ? nameTest : "*"); + if (contentType != null) { + sb.append(", ").append(contentType); + } + if (nilled) { + sb.append(", nilled"); + } + return sb.append(")").toString(); + } + + @Override public int hashCode() { final int prime = 31; int result = 1; @@ -79,9 +92,4 @@ public final class ElementType extends AbstractNodeType { return false; return true; } - - @Override - public String toString() { - return "NodeTest(" + nameTest + ", " + contentType + ", nilled = " + nilled + ")"; - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java index ce2ebcf..d1f294a 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java @@ -18,6 +18,8 @@ package org.apache.vxquery.types; import java.util.Arrays; +import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable; + public final class ProcessingInstructionType extends AbstractNodeType { public static final ProcessingInstructionType ANYPI = new ProcessingInstructionType(null); @@ -37,6 +39,15 @@ public final class ProcessingInstructionType extends AbstractNodeType { } @Override + public String toString() { + StringBuilder sb = new StringBuilder("processing-instruction("); + if (target != null) { + UTF8StringPointable.toString(sb, target, 0); + } + return sb.append(")").toString(); + } + + @Override public int hashCode() { final int prime = 31; int result = 1; http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/types/TextType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/TextType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/TextType.java index 1e55bda..0709245 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/TextType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/TextType.java @@ -28,6 +28,11 @@ public final class TextType extends AbstractNodeType { } @Override + public String toString() { + return "text"; + } + + @Override public int hashCode() { return TextType.class.hashCode(); } http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/a09d1f5d/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java index 8b10efc..e6a9007 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java @@ -155,7 +155,7 @@ public class XMLQueryCompiler { listener.notifyParseResult(moduleNode); module = new XMLQueryTranslator(ccb).translateModule(moduleNode); pprinter = new LogicalOperatorPrettyPrintVisitor(new VXQueryLogicalExpressionPrettyPrintVisitor(module - .getCompilerControlBlock().getStaticContext())); + .getModuleContext())); compiler = cFactory.createCompiler(module.getBody(), mdProvider, 0); listener.notifyTranslationResult(module); XMLQueryTypeChecker.typeCheckModule(module);
