diff --git a/QueryBuilder/Compilers/Compiler.cs b/QueryBuilder/Compilers/Compiler.cs index 98d26fd8..708ef99c 100644 --- a/QueryBuilder/Compilers/Compiler.cs +++ b/QueryBuilder/Compilers/Compiler.cs @@ -127,7 +127,7 @@ protected virtual SqlResult CompileRaw(Query query) ctx = CompileCteQuery(ctx, query); } - ctx.RawSql = Helper.ExpandParameters(ctx.RawSql, "?", ctx.Bindings.ToArray()); + ctx.RawSql = Helper.ExpandParameters(ctx.RawSql, parameterPlaceholder, ctx.Bindings.ToArray()); return ctx; } @@ -214,7 +214,7 @@ protected virtual SqlResult CompileAdHocQuery(AdHocTableFromClause adHoc) { var ctx = new SqlResult(); - var row = "SELECT " + string.Join(", ", adHoc.Columns.Select(col => $"? AS {Wrap(col)}")); + var row = "SELECT " + string.Join(", ", adHoc.Columns.Select(col => $"{parameterPlaceholder} AS {Wrap(col)}")); var fromTable = SingleRowDummyTableName; @@ -780,19 +780,19 @@ public virtual string CompileLimit(SqlResult ctx) if (offset == 0) { ctx.Bindings.Add(limit); - return "LIMIT ?"; + return $"LIMIT {parameterPlaceholder}"; } if (limit == 0) { ctx.Bindings.Add(offset); - return "OFFSET ?"; + return $"OFFSET {parameterPlaceholder}"; } ctx.Bindings.Add(limit); ctx.Bindings.Add(offset); - return "LIMIT ? OFFSET ?"; + return $"LIMIT {parameterPlaceholder} OFFSET {parameterPlaceholder}"; } /// @@ -935,11 +935,11 @@ public virtual string Parameter(SqlResult ctx, object parameter) { var value = ctx.Query.FindVariable(variable.Name); ctx.Bindings.Add(value); - return "?"; + return parameterPlaceholder; } ctx.Bindings.Add(parameter); - return "?"; + return parameterPlaceholder; } /// diff --git a/QueryBuilder/Compilers/FirebirdCompiler.cs b/QueryBuilder/Compilers/FirebirdCompiler.cs index 98702dbf..61ab9547 100644 --- a/QueryBuilder/Compilers/FirebirdCompiler.cs +++ b/QueryBuilder/Compilers/FirebirdCompiler.cs @@ -39,7 +39,7 @@ public override string CompileLimit(SqlResult ctx) ctx.Bindings.Add(offset + 1); ctx.Bindings.Add(limit + offset); - return "ROWS ? TO ?"; + return $"ROWS {parameterPlaceholder} TO {parameterPlaceholder}"; } return null; @@ -59,7 +59,7 @@ protected override string CompileColumns(SqlResult ctx) ctx.Query.ClearComponent("limit"); - return "SELECT FIRST ?" + compiled.Substring(6); + return $"SELECT FIRST {parameterPlaceholder}" + compiled.Substring(6); } else if (limit == 0 && offset > 0) { @@ -67,7 +67,7 @@ protected override string CompileColumns(SqlResult ctx) ctx.Query.ClearComponent("offset"); - return "SELECT SKIP ?" + compiled.Substring(6); + return $"SELECT SKIP {parameterPlaceholder}" + compiled.Substring(6); } return compiled; diff --git a/QueryBuilder/Compilers/MySqlCompiler.cs b/QueryBuilder/Compilers/MySqlCompiler.cs index f016f9f7..4729125b 100644 --- a/QueryBuilder/Compilers/MySqlCompiler.cs +++ b/QueryBuilder/Compilers/MySqlCompiler.cs @@ -24,7 +24,7 @@ public override string CompileLimit(SqlResult ctx) if (offset == 0) { ctx.Bindings.Add(limit); - return "LIMIT ?"; + return $"LIMIT {parameterPlaceholder}"; } if (limit == 0) @@ -34,7 +34,7 @@ public override string CompileLimit(SqlResult ctx) // to avoid this error. ctx.Bindings.Add(offset); - return "LIMIT 18446744073709551615 OFFSET ?"; + return $"LIMIT 18446744073709551615 OFFSET {parameterPlaceholder}"; } // We have both values @@ -42,7 +42,7 @@ public override string CompileLimit(SqlResult ctx) ctx.Bindings.Add(limit); ctx.Bindings.Add(offset); - return "LIMIT ? OFFSET ?"; + return $"LIMIT {parameterPlaceholder} OFFSET {parameterPlaceholder}"; } } diff --git a/QueryBuilder/Compilers/OracleCompiler.cs b/QueryBuilder/Compilers/OracleCompiler.cs index a48a13e7..3c0b7625 100644 --- a/QueryBuilder/Compilers/OracleCompiler.cs +++ b/QueryBuilder/Compilers/OracleCompiler.cs @@ -58,13 +58,13 @@ public override string CompileLimit(SqlResult ctx) if (limit == 0) { ctx.Bindings.Add(offset); - return $"{safeOrder}OFFSET ? ROWS"; + return $"{safeOrder}OFFSET {parameterPlaceholder} ROWS"; } ctx.Bindings.Add(offset); ctx.Bindings.Add(limit); - return $"{safeOrder}OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + return $"{safeOrder}OFFSET {parameterPlaceholder} ROWS FETCH NEXT {parameterPlaceholder} ROWS ONLY"; } internal void ApplyLegacyLimit(SqlResult ctx) @@ -80,17 +80,17 @@ internal void ApplyLegacyLimit(SqlResult ctx) string newSql; if (limit == 0) { - newSql = $"SELECT * FROM (SELECT \"results_wrapper\".*, ROWNUM \"row_num\" FROM ({ctx.RawSql}) \"results_wrapper\") WHERE \"row_num\" > ?"; + newSql = $"SELECT * FROM (SELECT \"results_wrapper\".*, ROWNUM \"row_num\" FROM ({ctx.RawSql}) \"results_wrapper\") WHERE \"row_num\" > {parameterPlaceholder}"; ctx.Bindings.Add(offset); } else if (offset == 0) { - newSql = $"SELECT * FROM ({ctx.RawSql}) WHERE ROWNUM <= ?"; + newSql = $"SELECT * FROM ({ctx.RawSql}) WHERE ROWNUM <= {parameterPlaceholder}"; ctx.Bindings.Add(limit); } else { - newSql = $"SELECT * FROM (SELECT \"results_wrapper\".*, ROWNUM \"row_num\" FROM ({ctx.RawSql}) \"results_wrapper\" WHERE ROWNUM <= ?) WHERE \"row_num\" > ?"; + newSql = $"SELECT * FROM (SELECT \"results_wrapper\".*, ROWNUM \"row_num\" FROM ({ctx.RawSql}) \"results_wrapper\" WHERE ROWNUM <= {parameterPlaceholder}) WHERE \"row_num\" > {parameterPlaceholder}"; ctx.Bindings.Add(limit + offset); ctx.Bindings.Add(offset); } diff --git a/QueryBuilder/Compilers/SqlServerCompiler.cs b/QueryBuilder/Compilers/SqlServerCompiler.cs index f9aee65e..0202f0f1 100644 --- a/QueryBuilder/Compilers/SqlServerCompiler.cs +++ b/QueryBuilder/Compilers/SqlServerCompiler.cs @@ -48,12 +48,12 @@ protected override SqlResult CompileSelectQuery(Query query) if (limit == 0) { - result.RawSql = $"SELECT * FROM ({result.RawSql}) AS [results_wrapper] WHERE [row_num] >= ?"; + result.RawSql = $"SELECT * FROM ({result.RawSql}) AS [results_wrapper] WHERE [row_num] >= {parameterPlaceholder}"; result.Bindings.Add(offset + 1); } else { - result.RawSql = $"SELECT * FROM ({result.RawSql}) AS [results_wrapper] WHERE [row_num] BETWEEN ? AND ?"; + result.RawSql = $"SELECT * FROM ({result.RawSql}) AS [results_wrapper] WHERE [row_num] BETWEEN {parameterPlaceholder} AND {parameterPlaceholder}"; result.Bindings.Add(offset + 1); result.Bindings.Add(limit + offset); } @@ -86,10 +86,10 @@ protected override string CompileColumns(SqlResult ctx) // handle distinct if (compiled.IndexOf("SELECT DISTINCT") == 0) { - return "SELECT DISTINCT TOP (?)" + compiled.Substring(15); + return $"SELECT DISTINCT TOP ({parameterPlaceholder}){compiled.Substring(15)}"; } - return "SELECT TOP (?)" + compiled.Substring(6); + return $"SELECT TOP ({parameterPlaceholder}){compiled.Substring(6)}"; } return compiled; @@ -121,13 +121,13 @@ public override string CompileLimit(SqlResult ctx) if (limit == 0) { ctx.Bindings.Add(offset); - return $"{safeOrder}OFFSET ? ROWS"; + return $"{safeOrder}OFFSET {parameterPlaceholder} ROWS"; } ctx.Bindings.Add(offset); ctx.Bindings.Add(limit); - return $"{safeOrder}OFFSET ? ROWS FETCH NEXT ? ROWS ONLY"; + return $"{safeOrder}OFFSET {parameterPlaceholder} ROWS FETCH NEXT {parameterPlaceholder} ROWS ONLY"; } public override string CompileRandom(string seed) @@ -177,7 +177,7 @@ protected override SqlResult CompileAdHocQuery(AdHocTableFromClause adHoc) var colNames = string.Join(", ", adHoc.Columns.Select(Wrap)); - var valueRow = string.Join(", ", Enumerable.Repeat("?", adHoc.Columns.Count)); + var valueRow = string.Join(", ", Enumerable.Repeat(parameterPlaceholder, adHoc.Columns.Count)); var valueRows = string.Join(", ", Enumerable.Repeat($"({valueRow})", adHoc.Values.Count / adHoc.Columns.Count)); var sql = $"SELECT {colNames} FROM (VALUES {valueRows}) AS tbl ({colNames})"; diff --git a/QueryBuilder/Compilers/SqliteCompiler.cs b/QueryBuilder/Compilers/SqliteCompiler.cs index f8bb8ee7..6d8a5d30 100644 --- a/QueryBuilder/Compilers/SqliteCompiler.cs +++ b/QueryBuilder/Compilers/SqliteCompiler.cs @@ -7,8 +7,6 @@ namespace SqlKata.Compilers public class SqliteCompiler : Compiler { public override string EngineCode { get; } = EngineCodes.Sqlite; - protected override string parameterPlaceholder { get; set; } = "?"; - protected override string parameterPrefix { get; set; } = "@p"; protected override string OpeningIdentifier { get; set; } = "\""; protected override string ClosingIdentifier { get; set; } = "\""; protected override string LastId { get; set; } = "select last_insert_rowid() as id"; @@ -31,7 +29,7 @@ public override string CompileLimit(SqlResult ctx) if (limit == 0 && offset > 0) { ctx.Bindings.Add(offset); - return "LIMIT -1 OFFSET ?"; + return $"LIMIT -1 OFFSET {parameterPlaceholder}"; } return base.CompileLimit(ctx);