<pre style='margin:0'>
Joshua Root (jmroot) pushed a commit to branch master
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/03b8fa6545bf143a000625683c2bc1647ddc5a01">https://github.com/macports/macports-base/commit/03b8fa6545bf143a000625683c2bc1647ddc5a01</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 03b8fa654 Enable foreign key constraints
</span>03b8fa654 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 03b8fa6545bf143a000625683c2bc1647ddc5a01
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue Jun 4 11:02:05 2024 +1000

<span style='display:block; white-space:pre;color:#404040;'>    Enable foreign key constraints
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Apart from the integrity checking value, the snapshot tables are
</span><span style='display:block; white-space:pre;color:#404040;'>    already specifying ON DELETE CASCADE, and adding it to other tables
</span><span style='display:block; white-space:pre;color:#404040;'>    allows simplifying reg_entry_delete.
</span>---
 src/cregistry/entry.c    | 47 ++-----------------------
 src/cregistry/registry.c | 19 ++++++++++
 src/cregistry/sql.c      | 90 +++++++++++++++++++++++++++++++++++++++++++++---
 3 files changed, 107 insertions(+), 49 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/entry.c b/src/cregistry/entry.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 948ee8aeb..211c86788 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/entry.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/entry.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -257,26 +257,11 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>     errPtr->free = NULL;
 
     sqlite3_stmt* ports = NULL;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    sqlite3_stmt* followups[] = { NULL, NULL, NULL };
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sqlite3_stmt** pFiles = &followups[0];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sqlite3_stmt** pDependencies = &followups[1];
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    sqlite3_stmt** pPortgroups = &followups[2];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Relies on cascading to delete associated files, dependencies,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+       and portgroups. */
</span>     char* ports_query = "DELETE FROM registry.ports WHERE id=?";
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* files_query = "DELETE FROM registry.files WHERE id=?";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* dependencies_query = "DELETE FROM registry.dependencies WHERE id=?";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* portgroups_query = "DELETE FROM registry.portgroups WHERE id=?";
</span>     if ((sqlite3_prepare_v2(reg->db, ports_query, -1, &ports, NULL) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_bind_int64(ports, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            /* follow-ups */
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_prepare_v2(reg->db, files_query, -1, pFiles, NULL)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_bind_int64(*pFiles, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_prepare_v2(reg->db, dependencies_query, -1, pDependencies,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    NULL) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_bind_int64(*pDependencies, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_prepare_v2(reg->db, portgroups_query, -1, pPortgroups,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    NULL) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            && (sqlite3_bind_int64(*pPortgroups, 1, entry->id) == SQLITE_OK)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            && (sqlite3_bind_int64(ports, 1, entry->id) == SQLITE_OK)) {
</span>         int r;
         do {
             r = sqlite3_step(ports);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -284,27 +269,6 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>                 case SQLITE_DONE:
                     if (sqlite3_changes(reg->db) > 0) {
                         result = 1;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                        for (size_t i = 0; i < sizeof(followups)/sizeof(followups[0]); i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                r = sqlite3_step(followups[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                switch (r) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    case SQLITE_DONE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    case SQLITE_BUSY:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    case SQLITE_ERROR:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                    default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                        reg_sqlite_error(reg->db,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                                errPtr, NULL);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                        result = 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                        break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            } while (r == SQLITE_BUSY);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            if (result == 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                            }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        break;
</span>                     } else {
                         errPtr->code = REG_INVALID;
                         errPtr->description = "an invalid entry was passed";
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -325,11 +289,6 @@ int reg_entry_delete(reg_entry* entry, reg_error* errPtr) {
</span>     if (ports) {
         sqlite3_finalize(ports);
     }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    for (size_t i = 0; i < sizeof(followups)/sizeof(followups[0]); i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (followups[i]) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            sqlite3_finalize(followups[i]);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span>     return result;
 }
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/registry.c b/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;color:#808080;'>index e53e02cc3..2b24642f4 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/registry.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -202,6 +202,25 @@ int reg_configure(reg_registry* reg) {
</span>     if (stmt) {
         sqlite3_finalize(stmt);
     }
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (!result) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        return result;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Turn on foreign key support. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    stmt = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (sqlite3_prepare_v2(reg->db, "PRAGMA foreign_keys = ON", -1, &stmt, NULL) == SQLITE_OK) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        int r;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sqlite3_step(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            r = sqlite3_reset(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (r == SQLITE_OK) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                result = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } while (r == SQLITE_BUSY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (stmt) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span>     return result;
 }
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/sql.c b/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;color:#808080;'>index cfc427a2a..dfd88969e 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/sql.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -136,12 +136,13 @@ int create_tables(sqlite3* db, reg_error* errPtr) {
</span> #if SQLITE_VERSION_NUMBER >= 3022000
         "PRAGMA journal_mode=WAL",
 #endif
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        "PRAGMA foreign_keys = ON",
</span> 
         "BEGIN",
 
         /* metadata table */
         "CREATE TABLE registry.metadata (key UNIQUE, value)",
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        "INSERT INTO registry.metadata (key, value) VALUES ('version', '1.213')",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "INSERT INTO registry.metadata (key, value) VALUES ('version', '1.214')",
</span>         "INSERT INTO registry.metadata (key, value) VALUES ('created', strftime('%s', 'now'))",
 
         /* ports table */
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -177,7 +178,8 @@ int create_tables(sqlite3* db, reg_error* errPtr) {
</span>             ", actual_path TEXT"
             ", active INTEGER"
             ", binary BOOL"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ", FOREIGN KEY(id) REFERENCES ports(id))",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ", FOREIGN KEY(id) REFERENCES ports(id)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            " ON DELETE CASCADE)",
</span>         "CREATE INDEX registry.file_port ON files(id)",
         "CREATE INDEX registry.file_path ON files(path)",
         "CREATE INDEX registry.file_actual ON files(actual_path)",
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -188,7 +190,8 @@ int create_tables(sqlite3* db, reg_error* errPtr) {
</span>               "id INTEGER"
             ", name TEXT"
             ", variants TEXT"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ", FOREIGN KEY(id) REFERENCES ports(id))",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ", FOREIGN KEY(id) REFERENCES ports(id)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            " ON DELETE CASCADE)",
</span>         "CREATE INDEX registry.dep_id ON dependencies(id)",
         "CREATE INDEX registry.dep_name ON dependencies(name)",
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -199,7 +202,8 @@ int create_tables(sqlite3* db, reg_error* errPtr) {
</span>             ", version TEXT COLLATE VERSION"
             ", size INTEGER"
             ", sha256 TEXT"
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            ", FOREIGN KEY(id) REFERENCES ports(id))",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            ", FOREIGN KEY(id) REFERENCES ports(id)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            " ON DELETE CASCADE)",
</span>         "CREATE INDEX registry.portgroup_id ON portgroups(id)",
         "CREATE INDEX registry.portgroup_open ON portgroups(id, name, version, size, sha256)",
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -287,6 +291,9 @@ int update_db(sqlite3* db, reg_error* errPtr) {
</span>     char* query = q_begin;
     sqlite3_stmt* stmt = NULL;
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    /* Disable foreign key constraints while we're changing the schema. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite3_exec(db, "PRAGMA foreign_keys = OFF", NULL, NULL, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     do {
         did_update = 0;
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -965,6 +972,79 @@ int update_db(sqlite3* db, reg_error* errPtr) {
</span>             continue;
         }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (sql_version(NULL, -1, version, -1, "1.214") < 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            /* Add cascading deletes to foreign key constraints.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               Unfortunately ALTER TABLE can't do this in sqlite, so
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               we have to copy the data into new tables that have the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               right constraint, then drop the old ones and rename, and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               then recreate the indices that were dropped with the old
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+               tables. */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            static char* version_1_214_queries[] = {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                /* file map */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE TABLE registry.tmp_files ("
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      "id INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", path TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", actual_path TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", active INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", binary BOOL"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", FOREIGN KEY(id) REFERENCES ports(id)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    " ON DELETE CASCADE)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "INSERT INTO registry.tmp_files SELECT * FROM registry.files",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "DROP TABLE registry.files",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "ALTER TABLE registry.tmp_files RENAME TO files",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.file_port ON files(id)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.file_path ON files(path)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.file_actual ON files(actual_path)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.file_actual_nocase ON files(actual_path COLLATE NOCASE)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                /* dependency map */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE TABLE registry.tmp_dependencies ("
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      "id INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", name TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", variants TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", FOREIGN KEY(id) REFERENCES ports(id)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    " ON DELETE CASCADE)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "INSERT INTO registry.tmp_dependencies SELECT * FROM registry.dependencies",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "DROP TABLE registry.dependencies",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "ALTER TABLE registry.tmp_dependencies RENAME TO dependencies",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.dep_id ON dependencies(id)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.dep_name ON dependencies(name)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                /* portgroups table */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE TABLE registry.tmp_portgroups ("
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                      "id INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", name TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", version TEXT COLLATE VERSION"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", size INTEGER"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", sha256 TEXT"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    ", FOREIGN KEY(id) REFERENCES ports(id)"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    " ON DELETE CASCADE)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "INSERT INTO registry.tmp_portgroups SELECT * FROM registry.portgroups",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "DROP TABLE registry.portgroups",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "ALTER TABLE registry.tmp_portgroups RENAME TO portgroups",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.portgroup_id ON portgroups(id)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "CREATE INDEX registry.portgroup_open ON portgroups(id, name, version, size, sha256)",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                /* Update version and commit */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "UPDATE registry.metadata SET value = '1.214' WHERE key = 'version'",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                "COMMIT",
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                NULL
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            stmt = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            if (!do_queries(db, version_1_214_queries, errPtr)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                rollback_db(db);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                return 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            did_update = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>         /* add new versions here, but remember to:
          *  - finalize the version query statement and set stmt to NULL
          *  - do _not_ use "BEGIN" in your query list, since a transaction has
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -974,7 +1054,7 @@ int update_db(sqlite3* db, reg_error* errPtr) {
</span>          *  - update the current version number below
          */
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-        if (sql_version(NULL, -1, version, -1, "1.213") > 0) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (sql_version(NULL, -1, version, -1, "1.214") > 0) {
</span>             /* the registry was already upgraded to a newer version and cannot be used anymore */
             reg_throw(errPtr, REG_INVALID, "Version number in metadata table is newer than expected.");
             sqlite3_finalize(stmt);
</pre><pre style='margin:0'>

</pre>