@@ -331,6 +331,25 @@ func (c *cc) convertMultiSelect_stmtContext(n *parser.Select_stmtContext) ast.No
331
331
var where ast.Node
332
332
var groups = []ast.Node {}
333
333
var having ast.Node
334
+ var ctes []ast.Node
335
+
336
+ if ct := n .Common_table_stmt (); ct != nil {
337
+ recursive := ct .RECURSIVE_ () != nil
338
+ for _ , cte := range ct .AllCommon_table_expression () {
339
+ tableName := identifier (cte .Table_name ().GetText ())
340
+ var cteCols ast.List
341
+ for _ , col := range cte .AllColumn_name () {
342
+ cteCols .Items = append (cteCols .Items , NewIdentifer (col .GetText ()))
343
+ }
344
+ ctes = append (ctes , & ast.CommonTableExpr {
345
+ Ctename : & tableName ,
346
+ Ctequery : c .convert (cte .Select_stmt ()),
347
+ Location : cte .GetStart ().GetStart (),
348
+ Cterecursive : recursive ,
349
+ Ctecolnames : & cteCols ,
350
+ })
351
+ }
352
+ }
334
353
335
354
for _ , icore := range n .AllSelect_core () {
336
355
core , ok := icore .(* parser.Select_coreContext )
@@ -377,6 +396,9 @@ func (c *cc) convertMultiSelect_stmtContext(n *parser.Select_stmtContext) ast.No
377
396
LimitCount : limitCount ,
378
397
LimitOffset : limitOffset ,
379
398
ValuesLists : & ast.List {},
399
+ WithClause : & ast.WithClause {
400
+ Ctes : & ast.List {Items : ctes },
401
+ },
380
402
}
381
403
}
382
404
0 commit comments