<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/9c81555a5e2ddce4a03488918cba3661be262904">https://github.com/macports/macports-base/commit/9c81555a5e2ddce4a03488918cba3661be262904</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 9c81555a5 snapshot_store_ports: let sqlite do the looping
</span>9c81555a5 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 9c81555a5e2ddce4a03488918cba3661be262904
</span>Author: Joshua Root <jmr@macports.org>
AuthorDate: Tue May 28 01:56:50 2024 +1000

<span style='display:block; white-space:pre;color:#404040;'>    snapshot_store_ports: let sqlite do the looping
</span>---
 src/cregistry/snapshot.c | 83 ++++++++++++++++--------------------------------
 1 file changed, 27 insertions(+), 56 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/snapshot.c b/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;color:#808080;'>index 8a6fe6d0b..7fb9e4821 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/snapshot.c
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -218,67 +218,38 @@ reg_snapshot* reg_snapshot_create(reg_registry* reg, char* note, reg_error* errP
</span>  * @return                  true if success; 0 if failure
  */
 int snapshot_store_ports(reg_registry* reg, reg_snapshot* snapshot, reg_error* errPtr) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_entry** entries;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_error error;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    int i, entry_count;
</span>     int result = 1;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    entry_count = reg_entry_installed(reg, NULL, &entries, &error);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* key1 = "name";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* key2 = "requested";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* key3 = "state";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* key4 = "variants";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* key5 = "requested_variants";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if (entry_count >= 0) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        for ( i = 0; i < entry_count; i++) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char* port_name;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char* requested;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char* state;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char* variants_str;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            char* requested_variants_str;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            reg_entry* entry = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            if (reg_entry_propget(entries[i], key1, &port_name, &error)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                && reg_entry_propget(entries[i], key2, &requested, &error)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                && reg_entry_propget(entries[i], key3, &state, &error)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                && reg_entry_propget(entries[i], key4, &variants_str, &error)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                && reg_entry_propget(entries[i], key5, &requested_variants_str, &error)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                char* query = "INSERT INTO registry.snapshot_ports "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    "(snapshots_id, port_name, requested, state, variants, requested_variants) "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    "VALUES (?, ?, ?, ?, ?, ?)";
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlite3_bind_int64(stmt, 1, snapshot->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlite3_bind_text(stmt, 2, port_name, -1, SQLITE_STATIC) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlite3_bind_int64(stmt, 3, atoi(requested)) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlite3_bind_text(stmt, 4, state, -1, SQLITE_STATIC) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlite3_bind_text(stmt, 5, variants_str, -1, SQLITE_STATIC) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        && (sqlite3_bind_text(stmt, 6, requested_variants_str, -1, SQLITE_STATIC) == SQLITE_OK)) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    int r;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                        r = sqlite3_step(stmt);
</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;'>-                            default:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                reg_sqlite_error(reg->db, errPtr, query);
</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;'>-                } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite3_stmt* stmt = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    char* query = "INSERT INTO registry.snapshot_ports "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "(snapshots_id, port_name, requested, state, variants, requested_variants) "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "SELECT ?, name, requested, state, variants, requested_variants "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "FROM registry.ports WHERE state='installed'";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if ((sqlite3_prepare_v2(reg->db, query, -1, &stmt, NULL) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            && (sqlite3_bind_int64(stmt, 1, snapshot->id) == 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;'>+            r = sqlite3_step(stmt);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            switch (r) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                case SQLITE_DONE:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                case SQLITE_BUSY:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                default:
</span>                     reg_sqlite_error(reg->db, errPtr, query);
                     result = 0;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                if (stmt) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sqlite3_finalize(stmt);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    break;
</span>             }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-            free(entry);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        } while (r == SQLITE_BUSY);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reg_sqlite_error(reg->db, errPtr, query);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        result = 0;
</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;
 }
 
</pre><pre style='margin:0'>

</pre>