Skip to content

Commit 2b6522a

Browse files
committed
Fix SQL syntax error for read-only transactions. Fixes #817
1 parent 1755065 commit 2b6522a

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ private async ValueTask<MySqlTransaction> BeginTransactionAsync(IsolationLevel i
152152
false => " read write",
153153
null => "",
154154
};
155-
cmd.CommandText = $"start transaction{consistentSnapshotText}{readOnlyText};";
155+
var separatorText = (consistentSnapshotText.Length == 0 || readOnlyText.Length == 0) ? "" : ",";
156+
cmd.CommandText = $"start transaction{consistentSnapshotText}{separatorText}{readOnlyText};";
156157
await cmd.ExecuteNonQueryAsync(ioBehavior, cancellationToken).ConfigureAwait(false);
157158
}
158159

tests/SideBySide/Transaction.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,14 @@ public void ReadOnlyTransaction()
138138
Assert.Equal(MySqlErrorCode.CannotExecuteInReadOnlyTransaction, (MySqlErrorCode) exception.Number);
139139
}
140140

141+
[Fact]
142+
public void ReadOnlySnapshotTransaction()
143+
{
144+
using var trans = m_connection.BeginTransaction(IsolationLevel.Snapshot, isReadOnly: true);
145+
var exception = Assert.Throws<MySqlException>(() => m_connection.Execute("insert into transactions_test values(1), (2)", transaction: trans));
146+
Assert.Equal(MySqlErrorCode.CannotExecuteInReadOnlyTransaction, (MySqlErrorCode) exception.Number);
147+
}
148+
141149
[Fact]
142150
public void ReadWriteTransaction()
143151
{

0 commit comments

Comments
 (0)