MCPcopy Create free account
hub / github.com/apache/calcite / handle

Method handle

piglet/src/main/java/org/apache/calcite/piglet/Handler.java:53–177  ·  view source on GitHub ↗

Creates relational expressions for a given AST node.

(Ast.Node node)

Source from the content-addressed store, hash-verified

51
52 /** Creates relational expressions for a given AST node. */
53 public Handler handle(Ast.Node node) {
54 final RelNode input;
55 final List<RexNode> rexNodes;
56 switch (node.op) {
57 case LOAD:
58 final Ast.LoadStmt load = (Ast.LoadStmt) node;
59 builder.scan((String) load.name.value);
60 register(load.target.value);
61 return this;
62 case VALUES:
63 final Ast.ValuesStmt values = (Ast.ValuesStmt) node;
64 final RelDataType rowType = toType(values.schema);
65 builder.values(tuples(values, rowType), rowType);
66 register(values.target.value);
67 return this;
68 case FOREACH:
69 final Ast.ForeachStmt foreach = (Ast.ForeachStmt) node;
70 builder.clear();
71 input = map.get(foreach.source.value);
72 builder.push(input);
73 rexNodes = new ArrayList<>();
74 for (Ast.Node exp : foreach.expList) {
75 rexNodes.add(toRex(exp));
76 }
77 builder.project(rexNodes);
78 register(foreach.target.value);
79 return this;
80 case FOREACH_NESTED:
81 final Ast.ForeachNestedStmt foreachNested = (Ast.ForeachNestedStmt) node;
82 builder.clear();
83 input = map.get(foreachNested.source.value);
84 builder.push(input);
85 System.out.println(input.getRowType());
86 for (RelDataTypeField field : input.getRowType().getFieldList()) {
87 switch (field.getType().getSqlTypeName()) {
88 case ARRAY:
89 System.out.println(field);
90 break;
91 default:
92 break;
93 }
94 }
95 for (Ast.Stmt stmt : foreachNested.nestedStmtList) {
96 handle(stmt);
97 }
98 rexNodes = new ArrayList<>();
99 for (Ast.Node exp : foreachNested.expList) {
100 rexNodes.add(toRex(exp));
101 }
102 builder.project(rexNodes);
103 register(foreachNested.target.value);
104 return this;
105 case FILTER:
106 final Ast.FilterStmt filter = (Ast.FilterStmt) node;
107 builder.clear();
108 input = map.get(filter.source.value);
109 builder.push(input);
110 RexNode rexNode = toRex(filter.condition);

Callers 2

explainContainsMethod · 0.45
returnsMethod · 0.45

Calls 15

registerMethod · 0.95
toTypeMethod · 0.95
tuplesMethod · 0.95
toRexMethod · 0.95
getRowTypeMethod · 0.95
getTypeMethod · 0.95
toSortRexMethod · 0.95
dumpMethod · 0.95
makeCastMethod · 0.80
groupKeyMethod · 0.80
scanMethod · 0.65
clearMethod · 0.65

Tested by 2

explainContainsMethod · 0.36
returnsMethod · 0.36