neels has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-hlr/+/15964 )


Change subject: db upgrade: remove some code dup
......................................................................

db upgrade: remove some code dup

Instead of a switch() for each version number with identical switch cases
except for the function name, use an array of function pointers and loop.

Also print a success message after each individual version upgrade, instead of
only one in the end (see change in db_upgrade_test.ok).

Change-Id: I1736af3d9a3f02e29db836966ac15ce49f94737b
---
M src/db.c
M tests/db_upgrade/db_upgrade_test.ok
2 files changed, 16 insertions(+), 30 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-hlr refs/changes/64/15964/1

diff --git a/src/db.c b/src/db.c
index 75ca889..93771bd 100644
--- a/src/db.c
+++ b/src/db.c
@@ -423,6 +423,13 @@
        return rc;
 }

+typedef int (*db_upgrade_func_t)(struct db_context *dbc);
+static db_upgrade_func_t db_upgrade_path[] = {
+       db_upgrade_v1,
+       db_upgrade_v2,
+       db_upgrade_v3,
+};
+
 static int db_get_user_version(struct db_context *dbc)
 {
        const char *user_version_sql = "PRAGMA user_version";
@@ -534,40 +541,17 @@
        LOGP(DDB, LOGL_NOTICE, "Database '%s' has HLR DB schema version %d\n", 
dbc->fname, version);

        if (version < CURRENT_SCHEMA_VERSION && allow_upgrade) {
-               switch (version) {
-               case 0:
-                       rc = db_upgrade_v1(dbc);
+               for (;version < ARRAY_SIZE(db_upgrade_path); version++) {
+                       db_upgrade_func_t upgrade_func = 
db_upgrade_path[version];
+                       rc = upgrade_func(dbc);
                        if (rc != SQLITE_DONE) {
-                               LOGP(DDB, LOGL_ERROR, "Failed to upgrade HLR DB 
schema to version 1: (rc=%d) %s\n",
-                                    rc, sqlite3_errmsg(dbc->db));
+                               LOGP(DDB, LOGL_ERROR, "Failed to upgrade HLR DB 
schema to version %d: (rc=%d) %s\n",
+                                    version+1, rc, sqlite3_errmsg(dbc->db));
                                goto out_free;
                        }
-                       version = 1;
-                       /* fall through */
-               case 1:
-                       rc = db_upgrade_v2(dbc);
-                       if (rc != SQLITE_DONE) {
-                               LOGP(DDB, LOGL_ERROR, "Failed to upgrade HLR DB 
schema to version 2: (rc=%d) %s\n",
-                                    rc, sqlite3_errmsg(dbc->db));
-                               goto out_free;
-                       }
-                       version = 2;
-                       /* fall through */
-               case 2:
-                       rc = db_upgrade_v3(dbc);
-                       if (rc != SQLITE_DONE) {
-                               LOGP(DDB, LOGL_ERROR, "Failed to upgrade HLR DB 
schema to version 3: (rc=%d) %s\n",
-                                    rc, sqlite3_errmsg(dbc->db));
-                               goto out_free;
-                       }
-                       version = 3;
-                       /* fall through */
-               /* case N: ... */
-               default:
-                       break;
+                       LOGP(DDB, LOGL_NOTICE, "Database '%s' has been upgraded 
to HLR DB schema version %d\n",
+                            dbc->fname, version+1);
                }
-               LOGP(DDB, LOGL_NOTICE, "Database '%s' has been upgraded to HLR 
DB schema version %d\n",
-                    dbc->fname, version);
        }

        if (version != CURRENT_SCHEMA_VERSION) {
diff --git a/tests/db_upgrade/db_upgrade_test.ok 
b/tests/db_upgrade/db_upgrade_test.ok
index c1f0f9d..49e7151 100644
--- a/tests/db_upgrade/db_upgrade_test.ok
+++ b/tests/db_upgrade/db_upgrade_test.ok
@@ -80,6 +80,8 @@
 DMAIN hlr starting
 DDB using database: <PATH>test.db
 DDB Database <PATH>test.db' has HLR DB schema version 0
+DDB Database <PATH>test.db' has been upgraded to HLR DB schema version 1
+DDB Database <PATH>test.db' has been upgraded to HLR DB schema version 2
 DDB Database <PATH>test.db' has been upgraded to HLR DB schema version 3
 DMAIN Cmdline option --db-check: Database was opened successfully, quitting.


--
To view, visit https://gerrit.osmocom.org/c/osmo-hlr/+/15964
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-hlr
Gerrit-Branch: master
Gerrit-Change-Id: I1736af3d9a3f02e29db836966ac15ce49f94737b
Gerrit-Change-Number: 15964
Gerrit-PatchSet: 1
Gerrit-Owner: neels <nhofm...@sysmocom.de>
Gerrit-MessageType: newchange

Reply via email to