@@ -121,27 +121,7 @@ protected virtual SqlResult CompileRaw(Query query)
121121 // handle CTEs
122122 if ( query . HasComponent ( "cte" , EngineCode ) )
123123 {
124- var cteFinder = new CteFinder ( query , EngineCode ) ;
125- var cteSearchResult = cteFinder . Find ( ) ;
126-
127- var rawSql = new StringBuilder ( "WITH " ) ;
128- var cteBindings = new List < object > ( ) ;
129-
130- foreach ( var cte in cteSearchResult )
131- {
132- var cteCtx = CompileCte ( cte ) ;
133-
134- cteBindings . AddRange ( cteCtx . Bindings ) ;
135- rawSql . Append ( cteCtx . RawSql . Trim ( ) ) ;
136- rawSql . Append ( ",\n " ) ;
137- }
138-
139- rawSql . Length -= 2 ; // remove last comma
140- rawSql . Append ( '\n ' ) ;
141- rawSql . Append ( ctx . RawSql ) ;
142-
143- ctx . Bindings . InsertRange ( 0 , cteBindings ) ;
144- ctx . RawSql = rawSql . ToString ( ) ;
124+ ctx = CompileCteQuery ( ctx , query ) ;
145125 }
146126
147127 ctx . RawSql = Helper . ExpandParameters ( ctx . RawSql , "?" , ctx . Bindings . ToArray ( ) ) ;
@@ -361,6 +341,33 @@ protected virtual SqlResult CompileInsertQuery(Query query)
361341 return ctx ;
362342 }
363343
344+ protected virtual SqlResult CompileCteQuery ( SqlResult ctx , Query query )
345+ {
346+ var cteFinder = new CteFinder ( query , EngineCode ) ;
347+ var cteSearchResult = cteFinder . Find ( ) ;
348+
349+ var rawSql = new StringBuilder ( "WITH " ) ;
350+ var cteBindings = new List < object > ( ) ;
351+
352+ foreach ( var cte in cteSearchResult )
353+ {
354+ var cteCtx = CompileCte ( cte ) ;
355+
356+ cteBindings . AddRange ( cteCtx . Bindings ) ;
357+ rawSql . Append ( cteCtx . RawSql . Trim ( ) ) ;
358+ rawSql . Append ( ",\n " ) ;
359+ }
360+
361+ rawSql . Length -= 2 ; // remove last comma
362+ rawSql . Append ( '\n ' ) ;
363+ rawSql . Append ( ctx . RawSql ) ;
364+
365+ ctx . Bindings . InsertRange ( 0 , cteBindings ) ;
366+ ctx . RawSql = rawSql . ToString ( ) ;
367+
368+ return ctx ;
369+ }
370+
364371 /// <summary>
365372 /// Compile a single column clause
366373 /// </summary>
0 commit comments