Skip to content

Commit b488a6d

Browse files
committed
Minimize sql-script string generations in MySqlStatesStore
1 parent 7d94456 commit b488a6d

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

Stores/MySQL/Cleipnir.ResilientFunctions.MySQL/MySqlStatesStore.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,42 @@ public MySqlStatesStore(string connectionString, string tablePrefix = "")
1616
_tablePrefix = tablePrefix;
1717
}
1818

19+
private string? _initialize;
1920
public async Task Initialize()
2021
{
2122
await using var conn = await CreateConnection();
22-
var sql = @$"
23+
_initialize ??= @$"
2324
CREATE TABLE IF NOT EXISTS {_tablePrefix}rfunction_states (
2425
id VARCHAR(450) PRIMARY KEY,
2526
state TEXT NOT NULL
2627
);";
27-
var command = new MySqlCommand(sql, conn);
28+
var command = new MySqlCommand(_initialize, conn);
2829
await command.ExecuteNonQueryAsync();
2930
}
3031

32+
private string? _truncateSql;
3133
public async Task Truncate()
3234
{
3335
await using var conn = await CreateConnection();
34-
var sql = $"TRUNCATE TABLE {_tablePrefix}rfunction_states";
35-
var command = new MySqlCommand(sql, conn);
36+
_truncateSql ??= $"TRUNCATE TABLE {_tablePrefix}rfunction_states";
37+
var command = new MySqlCommand(_truncateSql, conn);
3638
await command.ExecuteNonQueryAsync();
3739
}
3840

41+
private string? _upsertStateSql;
3942
public async Task UpsertState(FunctionId functionId, StoredState storedState)
4043
{
4144
var (functionTypeId, functionInstanceId) = functionId;
4245
await using var conn = await CreateConnection();
43-
var sql = $@"
46+
_upsertStateSql ??= $@"
4447
INSERT INTO {_tablePrefix}rfunction_states
4548
(id, state)
4649
VALUES
4750
(?, ?)
4851
ON DUPLICATE KEY UPDATE
4952
state = VALUES(state)";
5053

51-
await using var command = new MySqlCommand(sql, conn)
54+
await using var command = new MySqlCommand(_upsertStateSql, conn)
5255
{
5356
Parameters =
5457
{
@@ -60,14 +63,15 @@ ON DUPLICATE KEY UPDATE
6063
await command.ExecuteNonQueryAsync();
6164
}
6265

66+
private string? _getStatesSql;
6367
public async Task<IEnumerable<StoredState>> GetStates(FunctionId functionId)
6468
{
6569
await using var conn = await CreateConnection();
66-
var sql = @$"
70+
_getStatesSql ??= @$"
6771
SELECT id, state
6872
FROM {_tablePrefix}rfunction_states
6973
WHERE id LIKE ?";
70-
await using var command = new MySqlCommand(sql, conn)
74+
await using var command = new MySqlCommand(_getStatesSql, conn)
7175
{
7276
Parameters =
7377
{
@@ -89,25 +93,27 @@ public async Task<IEnumerable<StoredState>> GetStates(FunctionId functionId)
8993
return states;
9094
}
9195

96+
private string? _removeStatesSql;
9297
public async Task RemoveState(FunctionId functionId, StateId stateId)
9398
{
9499
await using var conn = await CreateConnection();
95-
var sql = $"DELETE FROM {_tablePrefix}rfunction_states WHERE id = ?";
100+
_removeStatesSql ??= $"DELETE FROM {_tablePrefix}rfunction_states WHERE id = ?";
96101
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value, stateId.Value);
97-
await using var command = new MySqlCommand(sql, conn)
102+
await using var command = new MySqlCommand(_removeStatesSql, conn)
98103
{
99104
Parameters = { new() { Value = id } }
100105
};
101106

102107
await command.ExecuteNonQueryAsync();
103108
}
104109

110+
private string? _removeSql;
105111
public async Task Remove(FunctionId functionId)
106112
{
107113
await using var conn = await CreateConnection();
108-
var sql = $"DELETE FROM {_tablePrefix}rfunction_states WHERE id LIKE ?";
114+
_removeSql ??= $"DELETE FROM {_tablePrefix}rfunction_states WHERE id LIKE ?";
109115
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value) + $"{Escaper.Separator}%";
110-
await using var command = new MySqlCommand(sql, conn)
116+
await using var command = new MySqlCommand(_removeSql, conn)
111117
{
112118
Parameters = { new() { Value = id } }
113119
};

0 commit comments

Comments
 (0)