AppDbContext: Add ExecuteBatch() and ExecuteScalar()
This commit is contained in:
@ -13,25 +13,13 @@ namespace Elwig.Helpers {
|
||||
|
||||
private static int VersionOffset = 0;
|
||||
|
||||
private static async Task ExNonQuery(SqliteConnection cnx, string sql) {
|
||||
using var cmd = cnx.CreateCommand();
|
||||
cmd.CommandText = sql;
|
||||
await (await cmd.ExecuteReaderAsync()).CloseAsync();
|
||||
}
|
||||
|
||||
private static async Task<object?> ExScalar(SqliteConnection cnx, string sql) {
|
||||
using var cmd = cnx.CreateCommand();
|
||||
cmd.CommandText = sql;
|
||||
return await cmd.ExecuteScalarAsync();
|
||||
}
|
||||
|
||||
public static async Task<string> CheckDb() {
|
||||
using var cnx = AppDbContext.Connect();
|
||||
|
||||
var applId = (long?)await ExScalar(cnx, "PRAGMA application_id") ?? 0;
|
||||
var applId = (long?)await AppDbContext.ExecuteScalar(cnx, "PRAGMA application_id") ?? 0;
|
||||
if (applId != 0x454C5747) throw new Exception("Invalid application_id of database");
|
||||
|
||||
var schemaVers = (long?)await ExScalar(cnx, "PRAGMA schema_version") ?? 0;
|
||||
var schemaVers = (long?)await AppDbContext.ExecuteScalar(cnx, "PRAGMA schema_version") ?? 0;
|
||||
VersionOffset = (int)(schemaVers % 100);
|
||||
if (VersionOffset != 0) {
|
||||
// schema was modified manually/externally
|
||||
@ -39,7 +27,7 @@ namespace Elwig.Helpers {
|
||||
}
|
||||
await UpdateDbSchema(cnx, (int)(schemaVers / 100), RequiredSchemaVersion);
|
||||
|
||||
var userVers = (long?)await ExScalar(cnx, "PRAGMA user_version") ?? 0;
|
||||
var userVers = (long?)await AppDbContext.ExecuteScalar(cnx, "PRAGMA user_version") ?? 0;
|
||||
var major = userVers >> 24;
|
||||
var minor = (userVers >> 16) & 0xFF;
|
||||
var patch = userVers & 0xFFFF;
|
||||
@ -48,7 +36,7 @@ namespace Elwig.Helpers {
|
||||
(App.VersionMajor == major && App.VersionMinor > minor) ||
|
||||
(App.VersionMajor == major && App.VersionMinor == minor && App.VersionPatch > patch)) {
|
||||
long vers = (App.VersionMajor << 24) | (App.VersionMinor << 16) | App.VersionPatch;
|
||||
await ExNonQuery(cnx, $"PRAGMA user_version = {vers}");
|
||||
await AppDbContext.ExecuteBatch(cnx, $"PRAGMA user_version = {vers}");
|
||||
}
|
||||
|
||||
return $"{major}.{minor}.{patch}";
|
||||
@ -83,7 +71,7 @@ namespace Elwig.Helpers {
|
||||
if (toExecute.Count == 0)
|
||||
return;
|
||||
|
||||
await ExNonQuery(cnx, """
|
||||
await AppDbContext.ExecuteBatch(cnx, """
|
||||
PRAGMA locking_mode = EXCLUSIVE;
|
||||
PRAGMA foreign_keys = OFF;
|
||||
BEGIN EXCLUSIVE;
|
||||
@ -91,9 +79,9 @@ namespace Elwig.Helpers {
|
||||
foreach (var script in toExecute) {
|
||||
using var stream = asm.GetManifestResourceStream(script) ?? throw new Exception("Unable to load embedded resource");
|
||||
using var reader = new StreamReader(stream);
|
||||
await ExNonQuery(cnx, await reader.ReadToEndAsync());
|
||||
await AppDbContext.ExecuteBatch(cnx, await reader.ReadToEndAsync());
|
||||
}
|
||||
await ExNonQuery(cnx, $"""
|
||||
await AppDbContext.ExecuteBatch(cnx, $"""
|
||||
PRAGMA foreign_key_check;
|
||||
COMMIT;
|
||||
PRAGMA foreign_keys = ON;
|
||||
|
Reference in New Issue
Block a user