Skip to content

Commit 9b23051

Browse files
committed
Minimize sql-script string generations in MySqlUnderlyingRegister
1 parent 625711e commit 9b23051

File tree

1 file changed

+31
-21
lines changed

1 file changed

+31
-21
lines changed

Stores/MySQL/Cleipnir.ResilientFunctions.MySQL/MySqlUnderlyingRegister.cs

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@ public MySqlUnderlyingRegister(string connectionString, string tablePrefix = "")
1414
_tablePrefix = tablePrefix;
1515
}
1616

17+
private string? _initializeSql;
1718
public async Task Initialize()
1819
{
1920
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
20-
var sql = @$"
21+
_initializeSql ??= @$"
2122
CREATE TABLE IF NOT EXISTS {_tablePrefix}rfunctions_register (
2223
registertype INT NOT NULL,
2324
`group` VARCHAR(255) NOT NULL,
@@ -26,20 +27,21 @@ value VARCHAR(1024) NOT NULL,
2627
PRIMARY KEY (registertype, `group`, name)
2728
);";
2829

29-
await using var command = new MySqlCommand(sql, conn);
30+
await using var command = new MySqlCommand(_initializeSql, conn);
3031
await command.ExecuteNonQueryAsync();
3132
}
32-
33+
34+
private string? _setIfEmptySql;
3335
public async Task<bool> SetIfEmpty(RegisterType registerType, string group, string name, string value)
3436
{
3537
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
36-
var sql = @$"
38+
_setIfEmptySql ??= @$"
3739
INSERT IGNORE INTO {_tablePrefix}rfunctions_register
3840
(registertype, `group`, name, value)
3941
VALUES
4042
(?, ?, ?, ?);";
4143

42-
await using var command = new MySqlCommand(sql, conn)
44+
await using var command = new MySqlCommand(_setIfEmptySql, conn)
4345
{
4446
Parameters =
4547
{
@@ -53,18 +55,20 @@ INSERT IGNORE INTO {_tablePrefix}rfunctions_register
5355
return affectedRows > 0;
5456
}
5557

58+
private string? _compareAndSwapUpdateSql;
59+
private string? _compareAndSwapUpsertSql;
5660
public async Task<bool> CompareAndSwap(RegisterType registerType, string group, string name, string newValue, string expectedValue, bool setIfEmpty = true)
5761
{
5862
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
5963

6064
if (!setIfEmpty)
6165
{
62-
var sql = @$"
66+
_compareAndSwapUpdateSql ??= @$"
6367
UPDATE {_tablePrefix}rfunctions_register
6468
SET value = ?
6569
WHERE registertype = ? AND `group` = ? AND name = ? AND value = ?;";
6670

67-
await using var command = new MySqlCommand(sql, conn)
71+
await using var command = new MySqlCommand(_compareAndSwapUpdateSql, conn)
6872
{
6973
Parameters =
7074
{
@@ -81,7 +85,7 @@ public async Task<bool> CompareAndSwap(RegisterType registerType, string group,
8185
}
8286
else
8387
{
84-
var sql = @$"
88+
_compareAndSwapUpsertSql ??= @$"
8589
START TRANSACTION;
8690
DELETE FROM {_tablePrefix}rfunctions_register WHERE registertype = ? AND `group` = ? AND name = ? AND value = ?;
8791
INSERT IGNORE INTO {_tablePrefix}rfunctions_register
@@ -90,7 +94,7 @@ INSERT IGNORE INTO {_tablePrefix}rfunctions_register
9094
(?, ?, ?, ?);
9195
COMMIT;";
9296

93-
await using var command = new MySqlCommand(sql, conn)
97+
await using var command = new MySqlCommand(_compareAndSwapUpsertSql, conn)
9498
{
9599
Parameters =
96100
{
@@ -110,15 +114,16 @@ INSERT IGNORE INTO {_tablePrefix}rfunctions_register
110114
}
111115
}
112116

117+
private string? _getSql;
113118
public async Task<string?> Get(RegisterType registerType, string group, string name)
114119
{
115120
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);;
116-
var sql = @$"
121+
_getSql ??= @$"
117122
SELECT value
118123
FROM {_tablePrefix}rfunctions_register
119124
WHERE registertype = ? AND `group` = ? AND name = ?;";
120125

121-
await using var command = new MySqlCommand(sql, conn)
126+
await using var command = new MySqlCommand(_getSql, conn)
122127
{
123128
Parameters =
124129
{
@@ -135,13 +140,14 @@ SELECT value
135140
return default;
136141
}
137142

143+
private string? _conditionalDeleteSql;
138144
public async Task<bool> Delete(RegisterType registerType, string group, string name, string expectedValue)
139145
{
140146
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
141147

142-
var sql = @$"DELETE FROM {_tablePrefix}rfunctions_register WHERE registertype = ? AND `group` = ? AND name = ? AND value = ?;";
148+
_conditionalDeleteSql ??= $"DELETE FROM {_tablePrefix}rfunctions_register WHERE registertype = ? AND `group` = ? AND name = ? AND value = ?;";
143149

144-
await using var command = new MySqlCommand(sql, conn)
150+
await using var command = new MySqlCommand(_conditionalDeleteSql, conn)
145151
{
146152
Parameters =
147153
{
@@ -156,13 +162,14 @@ public async Task<bool> Delete(RegisterType registerType, string group, string n
156162
return affectedRows > 0;
157163
}
158164

165+
private string? _deleteSql;
159166
public async Task Delete(RegisterType registerType, string group, string name)
160167
{
161168
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
162169

163-
var sql = @$"DELETE FROM {_tablePrefix}rfunctions_register WHERE registertype = ? AND `group` = ? AND name = ?;";
170+
_deleteSql ??= $"DELETE FROM {_tablePrefix}rfunctions_register WHERE registertype = ? AND `group` = ? AND name = ?;";
164171

165-
await using var command = new MySqlCommand(sql, conn)
172+
await using var command = new MySqlCommand(_deleteSql, conn)
166173
{
167174
Parameters =
168175
{
@@ -174,15 +181,16 @@ public async Task Delete(RegisterType registerType, string group, string name)
174181
await command.ExecuteScalarAsync();
175182
}
176183

184+
private string? _existsSql;
177185
public async Task<bool> Exists(RegisterType registerType, string group, string name)
178186
{
179187
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);;
180-
var sql = @$"
188+
_existsSql ??= @$"
181189
SELECT COUNT(*)
182190
FROM {_tablePrefix}rfunctions_register
183191
WHERE registertype = ? AND `group` = ? AND name = ?;";
184192

185-
await using var command = new MySqlCommand(sql, conn)
193+
await using var command = new MySqlCommand(_existsSql, conn)
186194
{
187195
Parameters =
188196
{
@@ -196,20 +204,22 @@ SELECT COUNT(*)
196204
return count > 0;
197205
}
198206

207+
private string? _dropUnderlyingTableSql;
199208
public async Task DropUnderlyingTable()
200209
{
201210
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
202-
var sql = $"DROP TABLE IF EXISTS {_tablePrefix}rfunctions_register";
211+
_dropUnderlyingTableSql ??= $"DROP TABLE IF EXISTS {_tablePrefix}rfunctions_register";
203212

204-
await using var command = new MySqlCommand(sql, conn);
213+
await using var command = new MySqlCommand(_dropUnderlyingTableSql, conn);
205214
await command.ExecuteNonQueryAsync();
206215
}
207216

217+
private string? _truncateTableSql;
208218
public async Task TruncateTable()
209219
{
210220
await using var conn = await DatabaseHelper.CreateOpenConnection(_connectionString);
211-
var sql = $"TRUNCATE TABLE {_tablePrefix}rfunctions_register";
212-
var command = new MySqlCommand(sql, conn);
221+
_truncateTableSql ??= $"TRUNCATE TABLE {_tablePrefix}rfunctions_register";
222+
var command = new MySqlCommand(_truncateTableSql, conn);
213223
await command.ExecuteNonQueryAsync();
214224
}
215225
}

0 commit comments

Comments
 (0)