Skip to content
8 changes: 7 additions & 1 deletion src/Ydb.Sdk/src/Ado/Internal/SqlParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ internal static ParsedResult Parse(string sql)

var newYql = new StringBuilder();
var paramNames = new List<string>();
var foundParamNames = new HashSet<string>();

var prevToken = 0;

Expand Down Expand Up @@ -114,7 +115,12 @@ internal static ParsedResult Parse(string sql)

var originalParamName = $"${sql[prevToken .. curToken]}";

paramNames.Add(originalParamName);
if (!foundParamNames.Contains(originalParamName))
{
paramNames.Add(originalParamName);
}

foundParamNames.Add(originalParamName);
newYql.Append(originalParamName);
prevToken = curToken;

Expand Down
2 changes: 1 addition & 1 deletion src/Ydb.Sdk/src/Driver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ private async Task<Status> DiscoverEndpoints()

var resultProto = response.Operation.Result.Unpack<ListEndpointsResult>();

Logger.LogInformation(
Logger.LogDebug(
"Successfully discovered endpoints: {EndpointsCount}, self location: {SelfLocation}, sdk info: {SdkInfo}",
resultProto.Endpoints.Count, resultProto.SelfLocation, _sdkInfo);

Expand Down
9 changes: 9 additions & 0 deletions src/Ydb.Sdk/tests/Ado/Internal/SqlParserTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -241,4 +241,13 @@ public void Parse_WhenMultilineStringLiterals_ReturnSql()
SELECT $param; SELECT $p2; SELECT $p_3;", sql);
Assert.Equal(new[] { "$param", "$p2", "$p_3" }, paramNames);
}

[Fact]
public void Parse_WhenRepeatedOneParam_ReturnThisParamInParamNames()
{
var (sql, paramNames) = SqlParser.Parse("SELECT @a, @a, @a;");

Assert.Equal("SELECT $a, $a, $a;", sql);
Assert.Equal(new[] { "$a" }, paramNames);
}
}
Loading