|
29 | 29 | import org.apache.calcite.sql.SqlJoin; |
30 | 30 | import org.apache.calcite.sql.SqlKind; |
31 | 31 | import org.apache.calcite.sql.SqlNode; |
| 32 | +import org.apache.calcite.sql.SqlNodeList; |
32 | 33 | import org.apache.calcite.sql.SqlOperator; |
33 | 34 | import org.apache.calcite.sql.SqlSelect; |
| 35 | +import org.apache.calcite.sql.SqlWith; |
| 36 | +import org.apache.calcite.sql.SqlWithItem; |
34 | 37 | import org.apache.calcite.sql.parser.SqlParseException; |
35 | 38 | import org.apache.calcite.sql.parser.SqlParser; |
36 | 39 | import org.apache.calcite.sql.parser.SqlParserPos; |
@@ -66,6 +69,17 @@ public Queue<Object> getExeQueue(String exeSql, Set<String> sideTableSet) throws |
66 | 69 | private Object parseSql(SqlNode sqlNode, Set<String> sideTableSet, Queue<Object> queueInfo){ |
67 | 70 | SqlKind sqlKind = sqlNode.getKind(); |
68 | 71 | switch (sqlKind){ |
| 72 | + case WITH: { |
| 73 | + SqlWith sqlWith = (SqlWith) sqlNode; |
| 74 | + SqlNodeList sqlNodeList = sqlWith.withList; |
| 75 | + for (SqlNode withAsTable : sqlNodeList) { |
| 76 | + SqlWithItem sqlWithItem = (SqlWithItem) withAsTable; |
| 77 | + parseSql(sqlWithItem.query, sideTableSet, queueInfo); |
| 78 | + queueInfo.add(sqlWithItem); |
| 79 | + } |
| 80 | + parseSql(sqlWith.body, sideTableSet, queueInfo); |
| 81 | + break; |
| 82 | + } |
69 | 83 | case INSERT: |
70 | 84 | SqlNode sqlSource = ((SqlInsert)sqlNode).getSource(); |
71 | 85 | return parseSql(sqlSource, sideTableSet, queueInfo); |
|
0 commit comments