Skip to content

Commit c240601

Browse files
committed
Minimize sql-script string generations in PostgresEffectsStore
1 parent 5b9eff3 commit c240601

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

Stores/PostgreSQL/Cleipnir.ResilientFunctions.PostgreSQL/PostgresEffectsStore.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,35 +19,38 @@ public PostgresEffectsStore(string connectionString, string tablePrefix = "")
1919
_tablePrefix = tablePrefix;
2020
}
2121

22+
private string? _initializeSql;
2223
public async Task Initialize()
2324
{
2425

2526
await using var conn = await CreateConnection();
26-
var sql = @$"
27+
_initializeSql ??= @$"
2728
CREATE TABLE IF NOT EXISTS {_tablePrefix}_effects (
2829
id VARCHAR(450) PRIMARY KEY,
2930
status INT NOT NULL,
3031
result TEXT NULL,
3132
exception TEXT NULL
3233
);";
33-
var command = new NpgsqlCommand(sql, conn);
34+
var command = new NpgsqlCommand(_initializeSql, conn);
3435
await command.ExecuteNonQueryAsync();
3536
}
3637

38+
private string? _truncateSql;
3739
public async Task Truncate()
3840
{
3941
await using var conn = await CreateConnection();
40-
var sql = $"TRUNCATE TABLE {_tablePrefix}_effects";
41-
var command = new NpgsqlCommand(sql, conn);
42+
_truncateSql ??= $"TRUNCATE TABLE {_tablePrefix}_effects";
43+
var command = new NpgsqlCommand(_truncateSql, conn);
4244
await command.ExecuteNonQueryAsync();
4345
}
4446

47+
private string? _setEffectResultSql;
4548
public async Task SetEffectResult(FunctionId functionId, StoredEffect storedEffect)
4649
{
4750
var (functionTypeId, functionInstanceId) = functionId;
4851

4952
await using var conn = await CreateConnection();
50-
var sql = $@"
53+
_setEffectResultSql ??= $@"
5154
INSERT INTO {_tablePrefix}_effects
5255
(id, status, result, exception)
5356
VALUES
@@ -56,7 +59,7 @@ ON CONFLICT (id)
5659
DO
5760
UPDATE SET status = EXCLUDED.status, result = EXCLUDED.result, exception = EXCLUDED.exception";
5861

59-
await using var command = new NpgsqlCommand(sql, conn)
62+
await using var command = new NpgsqlCommand(_setEffectResultSql, conn)
6063
{
6164
Parameters =
6265
{
@@ -70,14 +73,15 @@ ON CONFLICT (id)
7073
await command.ExecuteNonQueryAsync();
7174
}
7275

76+
private string? _getEffectResultsSql;
7377
public async Task<IEnumerable<StoredEffect>> GetEffectResults(FunctionId functionId)
7478
{
7579
await using var conn = await CreateConnection();
76-
var sql = @$"
80+
_getEffectResultsSql ??= @$"
7781
SELECT id, status, result, exception
7882
FROM {_tablePrefix}_effects
7983
WHERE id LIKE $1";
80-
await using var command = new NpgsqlCommand(sql, conn)
84+
await using var command = new NpgsqlCommand(_getEffectResultsSql, conn)
8185
{
8286
Parameters =
8387
{
@@ -101,27 +105,29 @@ public async Task<IEnumerable<StoredEffect>> GetEffectResults(FunctionId functio
101105
return functions;
102106
}
103107

108+
private string? _deleteEffectResultSql;
104109
public async Task DeleteEffectResult(FunctionId functionId, EffectId effectId)
105110
{
106111
await using var conn = await CreateConnection();
107-
var sql = $"DELETE FROM {_tablePrefix}_effects WHERE id = $1";
112+
_deleteEffectResultSql ??= $"DELETE FROM {_tablePrefix}_effects WHERE id = $1";
108113

109114
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value, effectId.Value);
110-
await using var command = new NpgsqlCommand(sql, conn)
115+
await using var command = new NpgsqlCommand(_deleteEffectResultSql, conn)
111116
{
112117
Parameters = { new() {Value = id } }
113118
};
114119

115120
await command.ExecuteNonQueryAsync();
116121
}
117122

123+
private string? _removeSql;
118124
public async Task Remove(FunctionId functionId)
119125
{
120126
await using var conn = await CreateConnection();
121-
var sql = $"DELETE FROM {_tablePrefix}_effects WHERE id LIKE $1";
127+
_removeSql ??= $"DELETE FROM {_tablePrefix}_effects WHERE id LIKE $1";
122128

123129
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value) + $"{Escaper.Separator}%";
124-
await using var command = new NpgsqlCommand(sql, conn)
130+
await using var command = new NpgsqlCommand(_removeSql, conn)
125131
{
126132
Parameters = { new() {Value = id } }
127133
};

0 commit comments

Comments
 (0)