@@ -1036,10 +1036,29 @@ extension Connection {
10361036 let column = names. removeLast ( )
10371037 let namespace = names. joined ( separator: " . " )
10381038
1039+ // Return a copy of the input "with" clause stripping all subclauses besides "select", "join", and "with".
1040+ func strip( _ with: WithClauses ) -> WithClauses {
1041+ var stripped = WithClauses ( )
1042+ stripped. recursive = with. recursive
1043+ for subclause in with. clauses {
1044+ let query = subclause. query
1045+ var strippedQuery = type ( of: query) . init ( query. clauses. from. name, database: query. clauses. from. database)
1046+ strippedQuery. clauses. select = query. clauses. select
1047+ strippedQuery. clauses. join = query. clauses. join
1048+ strippedQuery. clauses. with = strip ( query. clauses. with)
1049+
1050+ var strippedSubclause = WithClauses . Clause ( alias: subclause. alias, query: strippedQuery)
1051+ strippedSubclause. columns = subclause. columns
1052+ stripped. clauses. append ( strippedSubclause)
1053+ }
1054+ return stripped
1055+ }
1056+
10391057 func expandGlob( _ namespace: Bool ) -> ( QueryType ) throws -> Void {
10401058 { ( queryType: QueryType ) throws -> Void in
10411059 var query = type ( of: queryType) . init ( queryType. clauses. from. name, database: queryType. clauses. from. database)
10421060 query. clauses. select = queryType. clauses. select
1061+ query. clauses. with = strip ( queryType. clauses. with)
10431062 let expression = query. expression
10441063 var names = try self . prepare ( expression. template, expression. bindings) . columnNames. map { $0. quote ( ) }
10451064 if namespace { names = names. map { " \( queryType. tableName ( ) . expression. template) . \( $0) " } }
0 commit comments