This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
neels gerrit-no-reply at lists.osmocom.orgneels has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-hlr/+/15929 ) Change subject: db.c: code dup: add db_run_statements() for arrays of statements ...................................................................... db.c: code dup: add db_run_statements() for arrays of statements The db bootstrap as well as the upgrade code all execute a number of statements, and have massive code dup around each statement execution. Instead have one db_run_statements() that takes an array of strings and runs all. Change-Id: I2721dfc0a9aadcc7f5ac81a1c0fa87452098996f --- M src/db.c 1 file changed, 34 insertions(+), 74 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/29/15929/1 diff --git a/src/db.c b/src/db.c index d2564e6..75ca889 100644 --- a/src/db.c +++ b/src/db.c @@ -201,28 +201,38 @@ talloc_free(dbc); } -static int db_bootstrap(struct db_context *dbc) +static int db_run_statements(struct db_context *dbc, const char **statements, size_t statements_count) { + int rc; int i; - for (i = 0; i < ARRAY_SIZE(stmt_bootstrap_sql); i++) { - int rc; + for (i = 0; i < statements_count; i++) { + const char *stmt_str = statements[i]; sqlite3_stmt *stmt; - rc = sqlite3_prepare_v2(dbc->db, stmt_bootstrap_sql[i], -1, &stmt, NULL); + + rc = sqlite3_prepare_v2(dbc->db, stmt_str, -1, &stmt, NULL); if (rc != SQLITE_OK) { - LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", stmt_bootstrap_sql[i]); + LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", stmt_str); return rc; } - rc = sqlite3_step(stmt); db_remove_reset(stmt); sqlite3_finalize(stmt); if (rc != SQLITE_DONE) { - LOGP(DDB, LOGL_ERROR, "Cannot bootstrap database: SQL error: (%d) %s," - " during stmt '%s'", - rc, sqlite3_errmsg(dbc->db), stmt_bootstrap_sql[i]); + LOGP(DDB, LOGL_ERROR, "SQL error: (%d) %s, during stmt '%s'", + rc, sqlite3_errmsg(dbc->db), stmt_str); return rc; } } + return rc; +} + +static int db_bootstrap(struct db_context *dbc) +{ + int rc = db_run_statements(dbc, stmt_bootstrap_sql, ARRAY_SIZE(stmt_bootstrap_sql)); + if (rc != SQLITE_DONE) { + LOGP(DDB, LOGL_ERROR, "Cannot bootstrap database\n"); + return rc; + } return SQLITE_OK; } @@ -263,75 +273,38 @@ static int db_upgrade_v1(struct db_context *dbc) { - sqlite3_stmt *stmt; int rc; - const char *update_stmt_sql = "ALTER TABLE subscriber ADD COLUMN last_lu_seen TIMESTAMP default NULL"; - const char *set_schema_version_sql = "PRAGMA user_version = 1"; + const char *statements[] = { + "ALTER TABLE subscriber ADD COLUMN last_lu_seen TIMESTAMP default NULL", + "PRAGMA user_version = 1", + }; - rc = sqlite3_prepare_v2(dbc->db, update_stmt_sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", update_stmt_sql); - return rc; - } - rc = sqlite3_step(stmt); - db_remove_reset(stmt); - sqlite3_finalize(stmt); + rc = db_run_statements(dbc, statements, ARRAY_SIZE(statements)); if (rc != SQLITE_DONE) { - LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version %d\n", 1); + LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version 1\n"); return rc; } - - rc = sqlite3_prepare_v2(dbc->db, set_schema_version_sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", set_schema_version_sql); - return rc; - } - rc = sqlite3_step(stmt); - if (rc != SQLITE_DONE) - LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version %d\n", 1); - - db_remove_reset(stmt); - sqlite3_finalize(stmt); return rc; } static int db_upgrade_v2(struct db_context *dbc) { - sqlite3_stmt *stmt; int rc; - const char *update_stmt_sql = "ALTER TABLE subscriber ADD COLUMN imei VARCHAR(14)"; - const char *set_schema_version_sql = "PRAGMA user_version = 2"; + const char *statements[] = { + "ALTER TABLE subscriber ADD COLUMN imei VARCHAR(14)", + "PRAGMA user_version = 2", + }; - rc = sqlite3_prepare_v2(dbc->db, update_stmt_sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", update_stmt_sql); - return rc; - } - rc = sqlite3_step(stmt); - db_remove_reset(stmt); - sqlite3_finalize(stmt); + rc = db_run_statements(dbc, statements, ARRAY_SIZE(statements)); if (rc != SQLITE_DONE) { LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version 2\n"); return rc; } - - rc = sqlite3_prepare_v2(dbc->db, set_schema_version_sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", set_schema_version_sql); - return rc; - } - rc = sqlite3_step(stmt); - if (rc != SQLITE_DONE) - LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version 2\n"); - - db_remove_reset(stmt); - sqlite3_finalize(stmt); return rc; } static int db_upgrade_v3(struct db_context *dbc) { - sqlite3_stmt *stmt; int rc; /* A newer SQLite version would allow simply 'ATLER TABLE subscriber RENAME COLUMN hlr_number TO msc_number'. @@ -442,23 +415,10 @@ "PRAGMA user_version = 3", }; - int i; - for (i = 0; i < ARRAY_SIZE(statements); i++) { - const char *update_stmt_sql = statements[i]; - - rc = sqlite3_prepare_v2(dbc->db, update_stmt_sql, -1, &stmt, NULL); - if (rc != SQLITE_OK) { - LOGP(DDB, LOGL_ERROR, "Unable to prepare SQL statement '%s'\n", update_stmt_sql); - return rc; - } - rc = sqlite3_step(stmt); - db_remove_reset(stmt); - sqlite3_finalize(stmt); - if (rc != SQLITE_DONE) { - LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version 3\n"); - return rc; - } - + rc = db_run_statements(dbc, statements, ARRAY_SIZE(statements)); + if (rc != SQLITE_DONE) { + LOGP(DDB, LOGL_ERROR, "Unable to update HLR database schema to version 3\n"); + return rc; } return rc; } -- To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/15929 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-hlr Gerrit-Branch: master Gerrit-Change-Id: I2721dfc0a9aadcc7f5ac81a1c0fa87452098996f Gerrit-Change-Number: 15929 Gerrit-PatchSet: 1 Gerrit-Owner: neels <nhofmeyr at sysmocom.de> Gerrit-MessageType: newchange -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191031/82b4a8de/attachment.htm>