Skip to content

Commit dab85eb

Browse files
committed
Minimize sql-script string generations in PostgresStatesStore
1 parent d5e4bfb commit dab85eb

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

Stores/PostgreSQL/Cleipnir.ResilientFunctions.PostgreSQL/PostgresStatesStore.cs

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

21+
private string? _initializeSql;
2122
public async Task Initialize()
2223
{
2324
await using var conn = await CreateConnection();
24-
var sql = @$"
25+
_initializeSql ??= @$"
2526
CREATE TABLE IF NOT EXISTS {_tablePrefix}_states (
2627
id VARCHAR(450) PRIMARY KEY,
2728
state TEXT NOT NULL
2829
);";
29-
var command = new NpgsqlCommand(sql, conn);
30+
var command = new NpgsqlCommand(_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}_states";
37-
var command = new NpgsqlCommand(sql, conn);
38+
_truncateSql ??= $"TRUNCATE TABLE {_tablePrefix}_states";
39+
var command = new NpgsqlCommand(_truncateSql, conn);
3840
await command.ExecuteNonQueryAsync();
3941
}
4042

43+
private string? _upsertStateSql;
4144
public async Task UpsertState(FunctionId functionId, StoredState storedState)
4245
{
4346
var (functionTypeId, functionInstanceId) = functionId;
4447

4548
await using var conn = await CreateConnection();
46-
var sql = $@"
49+
_upsertStateSql ??= $@"
4750
INSERT INTO {_tablePrefix}_states
4851
(id, state)
4952
VALUES
@@ -52,7 +55,7 @@ ON CONFLICT (id)
5255
DO
5356
UPDATE SET state = EXCLUDED.state";
5457

55-
await using var command = new NpgsqlCommand(sql, conn)
58+
await using var command = new NpgsqlCommand(_upsertStateSql, conn)
5659
{
5760
Parameters =
5861
{
@@ -64,14 +67,15 @@ ON CONFLICT (id)
6467
await command.ExecuteNonQueryAsync();
6568
}
6669

70+
private string? _getStatesSql;
6771
public async Task<IEnumerable<StoredState>> GetStates(FunctionId functionId)
6872
{
6973
await using var conn = await CreateConnection();
70-
var sql = @$"
74+
_getStatesSql ??= @$"
7175
SELECT id, state
7276
FROM {_tablePrefix}_states
7377
WHERE id LIKE $1";
74-
await using var command = new NpgsqlCommand(sql, conn)
78+
await using var command = new NpgsqlCommand(_getStatesSql, conn)
7579
{
7680
Parameters =
7781
{
@@ -93,27 +97,29 @@ public async Task<IEnumerable<StoredState>> GetStates(FunctionId functionId)
9397
return functions;
9498
}
9599

100+
private string? _removeStateSql;
96101
public async Task RemoveState(FunctionId functionId, StateId stateId)
97102
{
98103
await using var conn = await CreateConnection();
99-
var sql = $"DELETE FROM {_tablePrefix}_states WHERE id = $1";
104+
_removeStateSql ??= $"DELETE FROM {_tablePrefix}_states WHERE id = $1";
100105

101106
var id = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value, stateId.Value);
102-
await using var command = new NpgsqlCommand(sql, conn)
107+
await using var command = new NpgsqlCommand(_removeStateSql, conn)
103108
{
104109
Parameters = { new() {Value = id } }
105110
};
106111

107112
await command.ExecuteNonQueryAsync();
108113
}
109114

115+
private string? _removeSql;
110116
public async Task Remove(FunctionId functionId)
111117
{
112118
await using var conn = await CreateConnection();
113-
var sql = $"DELETE FROM {_tablePrefix}_states WHERE id LIKE $1";
119+
_removeSql ??= $"DELETE FROM {_tablePrefix}_states WHERE id LIKE $1";
114120

115121
var idPrefix = Escaper.Escape(functionId.TypeId.Value, functionId.InstanceId.Value) + $"{Escaper.Separator}%";
116-
await using var command = new NpgsqlCommand(sql, conn)
122+
await using var command = new NpgsqlCommand(_removeSql, conn)
117123
{
118124
Parameters = { new() {Value = idPrefix } }
119125
};

0 commit comments

Comments
 (0)