Skip to content

Commit 7d94456

Browse files
committed
Minimize sql-script string generations in MySqlEffectsStore
1 parent 09996fc commit 7d94456

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

Stores/MySQL/Cleipnir.ResilientFunctions.MySQL/MySqlEffectsStore.cs

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

19+
private string? _initializeSql;
1920
public async Task Initialize()
2021
{
2122
await using var conn = await CreateConnection();
22-
var sql = @$"
23+
_initializeSql ??= @$"
2324
CREATE TABLE IF NOT EXISTS {_tablePrefix}rfunction_effects (
2425
id VARCHAR(450) PRIMARY KEY,
2526
status INT NOT NULL,
2627
result TEXT NULL,
2728
exception TEXT NULL
2829
);";
29-
var command = new MySqlCommand(sql, conn);
30+
var command = new MySqlCommand(_initializeSql, conn);
3031
await command.ExecuteNonQueryAsync();
3132
}
3233

34+
private string? _truncateSql;
3335
public async Task Truncate()
3436
{
3537
await using var conn = await CreateConnection();
36-
var sql = $"TRUNCATE TABLE {_tablePrefix}rfunction_effects";
37-
var command = new MySqlCommand(sql, conn);
38+
_truncateSql ??= $"TRUNCATE TABLE {_tablePrefix}rfunction_effects";
39+
var command = new MySqlCommand(_truncateSql, conn);
3840
await command.ExecuteNonQueryAsync();
3941
}
4042

43+
private string? _setEffectResultSql;
4144
public async Task SetEffectResult(FunctionId functionId, StoredEffect storedEffect)
4245
{
4346
var (functionTypeId, functionInstanceId) = functionId;
4447
await using var conn = await CreateConnection();
45-
var sql = $@"
48+
_setEffectResultSql ??= $@"
4649
INSERT INTO {_tablePrefix}rfunction_effects
4750
(id, status, result, exception)
4851
VALUES
4952
(?, ?, ?, ?)
5053
ON DUPLICATE KEY UPDATE
5154
status = VALUES(status), result = VALUES(result), exception = VALUES(exception)";
5255

53-
await using var command = new MySqlCommand(sql, conn)
56+
await using var command = new MySqlCommand(_setEffectResultSql, conn)
5457
{
5558
Parameters =
5659
{
@@ -64,14 +67,15 @@ ON DUPLICATE KEY UPDATE
6467
await command.ExecuteNonQueryAsync();
6568
}
6669

70+
private string? _getEffectResultsSql;
6771
public async Task<IEnumerable<StoredEffect>> GetEffectResults(FunctionId functionId)
6872
{
6973
await using var conn = await CreateConnection();
70-
var sql = @$"
74+
_getEffectResultsSql ??= @$"
7175
SELECT id, status, result, exception
7276
FROM {_tablePrefix}rfunction_effects
7377
WHERE id LIKE ?";
74-
await using var command = new MySqlCommand(sql, conn)
78+
await using var command = new MySqlCommand(_getEffectResultsSql, conn)
7579
{
7680
Parameters =
7781
{
@@ -95,25 +99,27 @@ public async Task<IEnumerable<StoredEffect>> GetEffectResults(FunctionId functio
9599
return functions;
96100
}
97101

102+
private string? _deleteEffectResultSql;
98103
public async Task DeleteEffectResult(FunctionId functionId, EffectId effectId)
99104
{
100105
await using var conn = await CreateConnection();
101-
var sql = $"DELETE FROM {_tablePrefix}rfunction_effects WHERE id = ?";
106+
_deleteEffectResultSql ??= $"DELETE FROM {_tablePrefix}rfunction_effects WHERE id = ?";
102107
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value, effectId.Value);
103-
await using var command = new MySqlCommand(sql, conn)
108+
await using var command = new MySqlCommand(_deleteEffectResultSql, conn)
104109
{
105110
Parameters = { new() { Value = id } }
106111
};
107112

108113
await command.ExecuteNonQueryAsync();
109114
}
110115

116+
private string? _removeSql;
111117
public async Task Remove(FunctionId functionId)
112118
{
113119
await using var conn = await CreateConnection();
114-
var sql = $"DELETE FROM {_tablePrefix}rfunction_effects WHERE id LIKE ?";
120+
_removeSql ??= $"DELETE FROM {_tablePrefix}rfunction_effects WHERE id LIKE ?";
115121
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value) + $"{Escaper.Separator}%" ;
116-
await using var command = new MySqlCommand(sql, conn)
122+
await using var command = new MySqlCommand(_removeSql, conn)
117123
{
118124
Parameters = { new() { Value = id } }
119125
};

0 commit comments

Comments
 (0)