Skip to content

Commit fe6ec21

Browse files
Merge pull request #231 from slimbr/master
Compiler Compile Cte
2 parents 74a050d + 0b32fc3 commit fe6ec21

File tree

1 file changed

+28
-21
lines changed

1 file changed

+28
-21
lines changed

QueryBuilder/Compilers/Compiler.cs

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)