Skip to content

Commit 5178622

Browse files
committed
Test that exception is thrown for over 64K parameters.
1 parent a5e6662 commit 5178622

File tree

1 file changed

+50
-23
lines changed

1 file changed

+50
-23
lines changed

tests/SideBySide/PreparedCommandTests.cs

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -243,40 +243,67 @@ public void ThrowsIfTooManyUnnamedParametersUsed()
243243
[InlineData(65535)]
244244
public void ParametersAreBound(int parameterCount)
245245
{
246-
using (var connection = CreatePrepareConnection())
246+
using (var connection = CreateConnectionWithTableOfIntegers())
247+
using (var cmd = CreateCommandWithParameters(connection, parameterCount))
247248
{
248-
connection.Execute(@"drop table if exists prepared_command_test; create table prepared_command_test(value int not null); insert into prepared_command_test(value) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);");
249+
cmd.Prepare();
249250

250-
using (var cmd = connection.CreateCommand())
251+
using (var reader = cmd.ExecuteReader())
251252
{
252-
var sql = new StringBuilder("select value from prepared_command_test where value in (");
253-
for (int parameterIndex = 1; parameterIndex <= parameterCount; parameterIndex++)
253+
for (var i = 1; i <= Math.Min(parameterCount, 10); i++)
254254
{
255-
var parameterName = "p" + parameterIndex;
256-
cmd.Parameters.AddWithValue(parameterName, parameterIndex);
257-
if (parameterIndex > 1)
258-
sql.Append(",");
259-
sql.Append("@");
260-
sql.Append(parameterName);
255+
Assert.True(reader.Read());
256+
Assert.Equal(i, reader.GetInt32(0));
261257
}
262-
sql.Append(") order by value;");
258+
Assert.False(reader.Read());
259+
}
260+
}
261+
}
263262

264-
cmd.CommandText = sql.ToString();
263+
[Fact]
264+
public void CannotUse64KParameters()
265+
{
266+
using (var connection = CreateConnectionWithTableOfIntegers())
267+
using (var cmd = CreateCommandWithParameters(connection, 65536))
268+
{
269+
try
270+
{
265271
cmd.Prepare();
266-
267-
using (var reader = cmd.ExecuteReader())
268-
{
269-
for (var i = 1; i <= Math.Min(parameterCount, 10); i++)
270-
{
271-
Assert.True(reader.Read());
272-
Assert.Equal(i, reader.GetInt32(0));
273-
}
274-
Assert.False(reader.Read());
275-
}
272+
Assert.False(true, "Exception wasn't thrown");
273+
}
274+
catch (MySqlException ex)
275+
{
276+
Assert.Equal(MySqlErrorCode.PreparedStatementManyParameters, (MySqlErrorCode) ex.Number);
276277
}
277278
}
278279
}
279280

281+
private static MySqlConnection CreateConnectionWithTableOfIntegers()
282+
{
283+
var connection = CreatePrepareConnection();
284+
connection.Execute(@"drop table if exists prepared_command_test; create table prepared_command_test(value int not null); insert into prepared_command_test(value) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);");
285+
return connection;
286+
}
287+
288+
private static MySqlCommand CreateCommandWithParameters(MySqlConnection connection, int parameterCount)
289+
{
290+
var cmd = connection.CreateCommand();
291+
var sql = new StringBuilder("select value from prepared_command_test where value in (");
292+
for (int parameterIndex = 1; parameterIndex <= parameterCount; parameterIndex++)
293+
{
294+
var parameterName = "p" + parameterIndex;
295+
cmd.Parameters.AddWithValue(parameterName, parameterIndex);
296+
if (parameterIndex > 1)
297+
sql.Append(",");
298+
sql.Append("@");
299+
sql.Append(parameterName);
300+
}
301+
sql.Append(") order by value;");
302+
303+
cmd.CommandText = sql.ToString();
304+
return cmd;
305+
}
306+
280307
public static IEnumerable<object[]> GetInsertAndQueryData()
281308
{
282309
foreach (var isPrepared in new[] { false, true })

0 commit comments

Comments
 (0)