@@ -1036,10 +1036,29 @@ extension Connection {
1036
1036
let column = names. removeLast ( )
1037
1037
let namespace = names. joined ( separator: " . " )
1038
1038
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
+
1039
1057
func expandGlob( _ namespace: Bool ) -> ( QueryType ) throws -> Void {
1040
1058
{ ( queryType: QueryType ) throws -> Void in
1041
1059
var query = type ( of: queryType) . init ( queryType. clauses. from. name, database: queryType. clauses. from. database)
1042
1060
query. clauses. select = queryType. clauses. select
1061
+ query. clauses. with = strip ( queryType. clauses. with)
1043
1062
let expression = query. expression
1044
1063
var names = try self . prepare ( expression. template, expression. bindings) . columnNames. map { $0. quote ( ) }
1045
1064
if namespace { names = names. map { " \( queryType. tableName ( ) . expression. template) . \( $0) " } }
0 commit comments