Skip to content

Commit 014d56d

Browse files
Sithara N. ASithara N. A
authored andcommitted
Escape parameter place holder
1 parent 422878c commit 014d56d

18 files changed

+107
-77
lines changed

QueryBuilder.Tests/Firebird/FirebirdLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public FirebirdLimitTests()
1717
public void NoLimitNorOffset()
1818
{
1919
var query = new Query("Table");
20-
var ctx = new SqlResult {Query = query};
20+
var ctx = new SqlResult("?", "\\") {Query = query};
2121

2222
Assert.Null(compiler.CompileLimit(ctx));
2323
}
@@ -26,7 +26,7 @@ public void NoLimitNorOffset()
2626
public void LimitOnly()
2727
{
2828
var query = new Query("Table").Limit(10);
29-
var ctx = new SqlResult {Query = query};
29+
var ctx = new SqlResult("?", "\\") {Query = query};
3030

3131
Assert.Null(compiler.CompileLimit(ctx));
3232
}
@@ -35,7 +35,7 @@ public void LimitOnly()
3535
public void OffsetOnly()
3636
{
3737
var query = new Query("Table").Offset(20);
38-
var ctx = new SqlResult {Query = query};
38+
var ctx = new SqlResult("?", "\\") {Query = query};
3939

4040
Assert.Null(compiler.CompileLimit(ctx));
4141
}
@@ -44,7 +44,7 @@ public void OffsetOnly()
4444
public void LimitAndOffset()
4545
{
4646
var query = new Query("Table").Limit(5).Offset(20);
47-
var ctx = new SqlResult {Query = query};
47+
var ctx = new SqlResult("?", "\\") {Query = query};
4848

4949
Assert.Equal("ROWS ? TO ?", compiler.CompileLimit(ctx));
5050
Assert.Equal(21, ctx.Bindings[0]);

QueryBuilder.Tests/HelperTests.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class HelperTests
1414
[InlineData(" ")]
1515
public void ItShouldKeepItAsIs(string input)
1616
{
17-
var output = Helper.ReplaceAll(input, "any", x => x + "");
17+
var output = Helper.ReplaceAll(input, "any", "\\", x => x + "");
1818

1919
Assert.Equal(input, output);
2020
}
@@ -28,7 +28,7 @@ public void ItShouldKeepItAsIs(string input)
2828
[InlineData(" ? ? hello", " @ @ hello")]
2929
public void ReplaceOnTheBegining(string input, string expected)
3030
{
31-
var output = Helper.ReplaceAll(input, "?", x => "@");
31+
var output = Helper.ReplaceAll(input, "?", "\\", x => "@");
3232
Assert.Equal(expected, output);
3333
}
3434

@@ -39,19 +39,21 @@ public void ReplaceOnTheBegining(string input, string expected)
3939
[InlineData("hello ? ?? ? ", "hello @ @@ @ ")]
4040
public void ReplaceOnTheEnd(string input, string expected)
4141
{
42-
var output = Helper.ReplaceAll(input, "?", x => "@");
42+
var output = Helper.ReplaceAll(input, "?", "\\", x => "@");
4343
Assert.Equal(expected, output);
4444
}
4545

4646
[Theory]
47+
[InlineData("hel\\?o ??? ", "hel\\?o 012 ")]
48+
[InlineData("hel\\?o ?? \\?", "hel\\?o 01 \\?")]
4749
[InlineData("hello?", "hello0")]
4850
[InlineData("hello? ", "hello0 ")]
4951
[InlineData("hello??? ", "hello012 ")]
5052
[InlineData("hel?lo ? ?? ? ", "hel0lo 1 23 4 ")]
5153
[InlineData("????", "0123")]
5254
public void ReplaceWithPositions(string input, string expected)
5355
{
54-
var output = Helper.ReplaceAll(input, "?", x => x + "");
56+
var output = Helper.ReplaceAll(input, "?", "\\", x => x + "");
5557
Assert.Equal(expected, output);
5658
}
5759

@@ -220,7 +222,7 @@ public void ExpandExpression(string input, string expected)
220222
[Fact]
221223
public void ExpandParameters()
222224
{
223-
var expanded = Helper.ExpandParameters("where id = ? or id in (?) or id in (?)", "?", new object[] { 1, new[] { 1, 2 }, new object[] { } });
225+
var expanded = Helper.ExpandParameters("where id = ? or id in (?) or id in (?)", "?", "\\", new object[] { 1, new[] { 1, 2 }, new object[] { } });
224226

225227
Assert.Equal("where id = ? or id in (?,?) or id in ()", expanded);
226228
}

QueryBuilder.Tests/MySql/MySqlLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public MySqlLimitTests()
1717
public void WithNoLimitNorOffset()
1818
{
1919
var query = new Query("Table");
20-
var ctx = new SqlResult {Query = query};
20+
var ctx = new SqlResult("?", "\\") {Query = query};
2121

2222
Assert.Null(compiler.CompileLimit(ctx));
2323
}
@@ -26,7 +26,7 @@ public void WithNoLimitNorOffset()
2626
public void WithNoOffset()
2727
{
2828
var query = new Query("Table").Limit(10);
29-
var ctx = new SqlResult {Query = query};
29+
var ctx = new SqlResult("?", "\\") {Query = query};
3030

3131
Assert.Equal("LIMIT ?", compiler.CompileLimit(ctx));
3232
Assert.Equal(10, ctx.Bindings[0]);
@@ -36,7 +36,7 @@ public void WithNoOffset()
3636
public void WithNoLimit()
3737
{
3838
var query = new Query("Table").Offset(20);
39-
var ctx = new SqlResult {Query = query};
39+
var ctx = new SqlResult("?", "\\") {Query = query};
4040

4141
Assert.Equal("LIMIT 18446744073709551615 OFFSET ?", compiler.CompileLimit(ctx));
4242
Assert.Equal(20, ctx.Bindings[0]);
@@ -47,7 +47,7 @@ public void WithNoLimit()
4747
public void WithLimitAndOffset()
4848
{
4949
var query = new Query("Table").Limit(5).Offset(20);
50-
var ctx = new SqlResult {Query = query};
50+
var ctx = new SqlResult("?", "\\") {Query = query};
5151

5252
Assert.Equal("LIMIT ? OFFSET ?", compiler.CompileLimit(ctx));
5353
Assert.Equal(5, ctx.Bindings[0]);

QueryBuilder.Tests/Oracle/OracleLegacyLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void WithNoLimitNorOffset()
2121
{
2222
// Arrange:
2323
var query = new Query(TableName);
24-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
24+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
2525

2626
// Act:
2727
compiler.ApplyLegacyLimit(ctx);
@@ -35,7 +35,7 @@ public void WithNoOffset()
3535
{
3636
// Arrange:
3737
var query = new Query(TableName).Limit(10);
38-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
38+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
3939

4040
// Act:
4141
compiler.ApplyLegacyLimit(ctx);
@@ -51,7 +51,7 @@ public void WithNoLimit()
5151
{
5252
// Arrange:
5353
var query = new Query(TableName).Offset(20);
54-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
54+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
5555

5656
// Act:
5757
compiler.ApplyLegacyLimit(ctx);
@@ -67,7 +67,7 @@ public void WithLimitAndOffset()
6767
{
6868
// Arrange:
6969
var query = new Query(TableName).Limit(5).Offset(20);
70-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
70+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
7171

7272
// Act:
7373
compiler.ApplyLegacyLimit(ctx);

QueryBuilder.Tests/Oracle/OracleLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void NoLimitNorOffset()
2121
{
2222
// Arrange:
2323
var query = new Query(TableName);
24-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
24+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
2525

2626
// Act & Assert:
2727
Assert.Null(compiler.CompileLimit(ctx));
@@ -32,7 +32,7 @@ public void LimitOnly()
3232
{
3333
// Arrange:
3434
var query = new Query(TableName).Limit(10);
35-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
35+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
3636

3737
// Act & Assert:
3838
Assert.EndsWith("OFFSET ? ROWS FETCH NEXT ? ROWS ONLY", compiler.CompileLimit(ctx));
@@ -46,7 +46,7 @@ public void OffsetOnly()
4646
{
4747
// Arrange:
4848
var query = new Query(TableName).Offset(20);
49-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
49+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
5050

5151
// Act & Assert:
5252
Assert.EndsWith("OFFSET ? ROWS", compiler.CompileLimit(ctx));
@@ -60,7 +60,7 @@ public void LimitAndOffset()
6060
{
6161
// Arrange:
6262
var query = new Query(TableName).Limit(5).Offset(20);
63-
var ctx = new SqlResult { Query = query, RawSql = SqlPlaceholder };
63+
var ctx = new SqlResult("?", "\\") { Query = query, RawSql = SqlPlaceholder };
6464

6565
// Act & Assert:
6666
Assert.EndsWith("OFFSET ? ROWS FETCH NEXT ? ROWS ONLY", compiler.CompileLimit(ctx));

QueryBuilder.Tests/PostgreSql/PostgreSqlLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public PostgreSqlLimitTests()
1717
public void WithNoLimitNorOffset()
1818
{
1919
var query = new Query("Table");
20-
var ctx = new SqlResult {Query = query};
20+
var ctx = new SqlResult("?", "\\") {Query = query};
2121

2222
Assert.Null(compiler.CompileLimit(ctx));
2323
}
@@ -26,7 +26,7 @@ public void WithNoLimitNorOffset()
2626
public void WithNoOffset()
2727
{
2828
var query = new Query("Table").Limit(10);
29-
var ctx = new SqlResult {Query = query};
29+
var ctx = new SqlResult("?", "\\") {Query = query};
3030

3131
Assert.Equal("LIMIT ?", compiler.CompileLimit(ctx));
3232
Assert.Equal(10, ctx.Bindings[0]);
@@ -36,7 +36,7 @@ public void WithNoOffset()
3636
public void WithNoLimit()
3737
{
3838
var query = new Query("Table").Offset(20);
39-
var ctx = new SqlResult {Query = query};
39+
var ctx = new SqlResult("?", "\\") {Query = query};
4040

4141
Assert.Equal("OFFSET ?", compiler.CompileLimit(ctx));
4242
Assert.Equal(20, ctx.Bindings[0]);
@@ -47,7 +47,7 @@ public void WithNoLimit()
4747
public void WithLimitAndOffset()
4848
{
4949
var query = new Query("Table").Limit(5).Offset(20);
50-
var ctx = new SqlResult {Query = query};
50+
var ctx = new SqlResult("?", "\\") {Query = query};
5151

5252
Assert.Equal("LIMIT ? OFFSET ?", compiler.CompileLimit(ctx));
5353
Assert.Equal(5, ctx.Bindings[0]);

QueryBuilder.Tests/SqlServer/SqlServerLegacyLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public SqlServerLegacyLimitTests()
1818
public void NoLimitNorOffset()
1919
{
2020
var query = new Query("Table");
21-
var ctx = new SqlResult {Query = query};
21+
var ctx = new SqlResult("?", "\\") {Query = query};
2222

2323
Assert.Null(compiler.CompileLimit(ctx));
2424
}
@@ -27,7 +27,7 @@ public void NoLimitNorOffset()
2727
public void LimitOnly()
2828
{
2929
var query = new Query("Table").Limit(10);
30-
var ctx = new SqlResult {Query = query};
30+
var ctx = new SqlResult("?", "\\") {Query = query};
3131

3232
Assert.Null(compiler.CompileLimit(ctx));
3333
}
@@ -36,7 +36,7 @@ public void LimitOnly()
3636
public void OffsetOnly()
3737
{
3838
var query = new Query("Table").Offset(20);
39-
var ctx = new SqlResult {Query = query};
39+
var ctx = new SqlResult("?", "\\") {Query = query};
4040

4141
Assert.Null(compiler.CompileLimit(ctx));
4242
}
@@ -45,7 +45,7 @@ public void OffsetOnly()
4545
public void LimitAndOffset()
4646
{
4747
var query = new Query("Table").Limit(5).Offset(20);
48-
var ctx = new SqlResult {Query = query};
48+
var ctx = new SqlResult("?", "\\") {Query = query};
4949

5050
Assert.Null(compiler.CompileLimit(ctx));
5151
}

QueryBuilder.Tests/SqlServer/SqlServerLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public SqlServerLimitTests()
1818
public void NoLimitNorOffset()
1919
{
2020
var query = new Query("Table");
21-
var ctx = new SqlResult {Query = query};
21+
var ctx = new SqlResult("?", "\\") {Query = query};
2222

2323
Assert.Null(compiler.CompileLimit(ctx));
2424
}
@@ -27,7 +27,7 @@ public void NoLimitNorOffset()
2727
public void LimitOnly()
2828
{
2929
var query = new Query("Table").Limit(10);
30-
var ctx = new SqlResult {Query = query};
30+
var ctx = new SqlResult("?", "\\") {Query = query};
3131

3232
Assert.EndsWith("OFFSET ? ROWS FETCH NEXT ? ROWS ONLY", compiler.CompileLimit(ctx));
3333
Assert.Equal(2, ctx.Bindings.Count);
@@ -39,7 +39,7 @@ public void LimitOnly()
3939
public void OffsetOnly()
4040
{
4141
var query = new Query("Table").Offset(20);
42-
var ctx = new SqlResult {Query = query};
42+
var ctx = new SqlResult("?", "\\") {Query = query};
4343

4444
Assert.EndsWith("OFFSET ? ROWS", compiler.CompileLimit(ctx));
4545

@@ -51,7 +51,7 @@ public void OffsetOnly()
5151
public void LimitAndOffset()
5252
{
5353
var query = new Query("Table").Limit(5).Offset(20);
54-
var ctx = new SqlResult {Query = query};
54+
var ctx = new SqlResult("?", "\\") {Query = query};
5555

5656
Assert.EndsWith("OFFSET ? ROWS FETCH NEXT ? ROWS ONLY", compiler.CompileLimit(ctx));
5757

QueryBuilder.Tests/SqlServer/SqlServerTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ public void SqlServerTop()
2222
Assert.Equal("SELECT TOP (@p0) * FROM [table]", result.Sql);
2323
}
2424

25+
26+
[Fact]
27+
public void SqlServerSelectWithParameterPlaceHolder()
28+
{
29+
var query = new Query("table").Select("Column\\?");
30+
var result = compiler.Compile(query);
31+
Assert.Equal("SELECT [Column\\?] FROM [table]", result.Sql);
32+
}
33+
2534
[Fact]
2635
public void SqlServerTopWithDistinct()
2736
{
@@ -42,6 +51,13 @@ public void OffsetSqlServer_Should_Be_Ignored_If_Zero_Or_Negative(int offset)
4251
Assert.Equal("SELECT * FROM [users]", c.ToString());
4352
}
4453

54+
[Fact]
55+
public void SqlServerSelectWithParameterPlaceHolderEscaped()
56+
{
57+
var query = new Query("table").Select("Column\\?");
58+
var result = compiler.Compile(query);
59+
Assert.Equal("SELECT [Column?] FROM [table]", result.ToString());
60+
}
4561

4662
[Theory()]
4763
[InlineData(1)]

QueryBuilder.Tests/Sqlite/SqliteLimitTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public SqliteLimitTests()
1717
public void WithNoLimitNorOffset()
1818
{
1919
var query = new Query("Table");
20-
var ctx = new SqlResult { Query = query };
20+
var ctx = new SqlResult("?", "\\") { Query = query };
2121

2222
Assert.Null(compiler.CompileLimit(ctx));
2323
}
@@ -26,7 +26,7 @@ public void WithNoLimitNorOffset()
2626
public void WithNoOffset()
2727
{
2828
var query = new Query("Table").Limit(10);
29-
var ctx = new SqlResult { Query = query };
29+
var ctx = new SqlResult("?", "\\") { Query = query };
3030

3131
Assert.Equal("LIMIT ?", compiler.CompileLimit(ctx));
3232
Assert.Equal(10, ctx.Bindings[0]);
@@ -36,7 +36,7 @@ public void WithNoOffset()
3636
public void WithNoLimit()
3737
{
3838
var query = new Query("Table").Offset(20);
39-
var ctx = new SqlResult { Query = query };
39+
var ctx = new SqlResult("?", "\\") { Query = query };
4040

4141
Assert.Equal("LIMIT -1 OFFSET ?", compiler.CompileLimit(ctx));
4242
Assert.Equal(20, ctx.Bindings[0]);
@@ -47,7 +47,7 @@ public void WithNoLimit()
4747
public void WithLimitAndOffset()
4848
{
4949
var query = new Query("Table").Limit(5).Offset(20);
50-
var ctx = new SqlResult { Query = query };
50+
var ctx = new SqlResult("?", "\\") { Query = query };
5151

5252
Assert.Equal("LIMIT ? OFFSET ?", compiler.CompileLimit(ctx));
5353
Assert.Equal(5, ctx.Bindings[0]);

0 commit comments

Comments
 (0)