Change in osmo-hlr[master]: db upgrade: remove some code dup

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/.

osmith gerrit-no-reply at lists.osmocom.org
Mon Nov 25 13:01:30 UTC 2019


osmith has submitted this change. ( 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, 17 insertions(+), 33 deletions(-)

Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved



diff --git a/src/db.c b/src/db.c
index ed2e568..992dbad 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";
@@ -533,41 +540,16 @@
 
 	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);
-			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));
-				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;
+	for (; allow_upgrade && (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 %d: (rc=%d) %s\n",
+			     version+1, rc, sqlite3_errmsg(dbc->db));
+			goto out_free;
 		}
 		LOGP(DDB, LOGL_NOTICE, "Database '%s' has been upgraded to HLR DB schema version %d\n",
-		     dbc->fname, version);
+		     dbc->fname, version+1);
 	}
 
 	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: 4
Gerrit-Owner: neels <nhofmeyr at sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-Reviewer: osmith <osmith at sysmocom.de>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20191125/a4b59032/attachment.htm>


More information about the gerrit-log mailing list