Skip to content

Commit 01d4fbd

Browse files
fix native params
1 parent 643402c commit 01d4fbd

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

src/Ydb.Sdk/src/Ado/Internal/SqlParser.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -164,10 +164,10 @@ private static int ParseMultilineStringLiterals(string sql, int curToken)
164164
return curToken + 2;
165165
}
166166

167-
private static bool ParseInKeyWord(string sql, int keyWordStart) => sql.Length - keyWordStart >= 2 &&
167+
private static bool ParseInKeyWord(string sql, int keyWordStart) => sql.Length - keyWordStart >= 3 &&
168168
(sql[keyWordStart] | 0x20) == 'i' &&
169-
(sql[keyWordStart + 1] | 0x20) == 'n';
170-
169+
(sql[keyWordStart + 1] | 0x20) == 'n' &&
170+
!sql[keyWordStart + 2].IsSqlIdentifierChar();
171171

172172
private static int ParseInListParameters(
173173
string sql,
@@ -255,7 +255,7 @@ private static (string Name, int NextToken) ParseNameParam(string sql, int curTo
255255
var prevToken = ++curToken;
256256

257257
for (;
258-
curToken < sql.Length && (char.IsLetterOrDigit(sql[curToken]) || sql[curToken] == '_');
258+
curToken < sql.Length && sql[curToken].IsSqlIdentifierChar();
259259
curToken++)
260260
{
261261
}
@@ -268,6 +268,11 @@ private static (string Name, int NextToken) ParseNameParam(string sql, int curTo
268268
return ($"${sql[prevToken .. curToken]}", curToken);
269269
}
270270

271+
public static bool IsSqlIdentifierChar(this char c)
272+
{
273+
return char.IsLetterOrDigit(c) || c == '_';
274+
}
275+
271276
private class SqlParamsBuilder
272277
{
273278
private readonly HashSet<string> _foundParamNames = new();

src/Ydb.Sdk/src/Ado/YdbCommand.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ protected override async Task<DbDataReader> ExecuteDbDataReaderAsync(CommandBeha
188188

189189
foreach (var sqlParam in sqlParams)
190190
{
191+
if (sqlParam.IsNative && !ydbParameterCollection.ContainsKey(sqlParam.Name))
192+
{
193+
continue;
194+
}
195+
191196
var ydbValue = sqlParam.YdbValueFetch(ydbParameterCollection);
192197

193198
if (!sqlParam.IsNative)

src/Ydb.Sdk/tests/Ado/Internal/SqlParserTests.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,11 @@ public void Parse_WhenMultilineStringLiterals_ReturnSql()
262262
SELECT $text;
263263
-- Comment with params @param, @p2, @p_3
264264
SELECT $param; SELECT $p2; SELECT $p_3;", sql);
265-
Assert.Equal(new PrimitiveParam[] { new("$param", false), new("$p2", false), new("$p_3", false) }, sqlParams);
265+
Assert.Equal(new PrimitiveParam[]
266+
{
267+
new("$text", true), new("$param", false),
268+
new("$p2", false), new("$p_3", false)
269+
}, sqlParams);
266270
}
267271

268272
[Fact]

0 commit comments

Comments
 (0)