Skip to content

Commit 5060d9d

Browse files
committed
Correctly handle statements ending with a string literal.
1 parent 0259c09 commit 5060d9d

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/MySqlConnector/Core/SqlParser.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,10 @@ public void Parse(string sql)
265265
states |= FinalParseStates.NeedsNewline;
266266
state = beforeCommentState;
267267
}
268+
else if (state == State.SingleQuotedStringSingleQuote || state == State.DoubleQuotedStringDoubleQuote || state == State.BacktickQuotedStringBacktick)
269+
{
270+
state = State.Statement;
271+
}
268272

269273
if (state == State.Statement)
270274
{

tests/MySqlConnector.Tests/StatementPreparerTests.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,18 @@ public void GuidFormat(object options, string replacedValue)
190190
[InlineData("SELECT 1 # comment", "SELECT 1 # comment\n;", true)]
191191
[InlineData("SELECT '1", "SELECT '1", false)]
192192
[InlineData("SELECT '1' /* test", "SELECT '1' /* test", false)]
193+
[InlineData("SELECT '1';", "SELECT '1';", true)]
194+
[InlineData("SELECT '1'", "SELECT '1';", true)]
195+
[InlineData("SELECT \"1\";", "SELECT \"1\";", true)]
196+
[InlineData("SELECT \"1\"", "SELECT \"1\";", true)]
197+
[InlineData("SELECT * FROM `SELECT`;", "SELECT * FROM `SELECT`;", true)]
198+
[InlineData("SELECT * FROM `SELECT`", "SELECT * FROM `SELECT`;", true)]
199+
[InlineData("SELECT * FROM test WHERE id = ?;", "SELECT * FROM test WHERE id = 0;", true)]
200+
[InlineData("SELECT * FROM test WHERE id = ?", "SELECT * FROM test WHERE id = 0;", true)]
193201
public void CompleteStatements(string sql, string expectedSql, bool expectedComplete)
194202
{
195-
var preparer = new StatementPreparer(sql, new MySqlParameterCollection(), new StatementPreparerOptions());
203+
var parameters = new MySqlParameterCollection { new MySqlParameter { Value = 0 } };
204+
var preparer = new StatementPreparer(sql, parameters, new StatementPreparerOptions());
196205
var writer = new ByteBufferWriter();
197206
var isComplete = preparer.ParseAndBindParameters(writer);
198207
Assert.Equal(expectedComplete, isComplete);

0 commit comments

Comments
 (0)