<pre style='margin:0'>
Umesh Singla (umeshksingla) pushed a commit to branch gsoc17-migrate
in repository macports-base.

</pre>
<p><a href="https://github.com/macports/macports-base/commit/c6bc351d274146a7015c3452d94d8388d7d4e95c">https://github.com/macports/macports-base/commit/c6bc351d274146a7015c3452d94d8388d7d4e95c</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit c6bc351d274146a7015c3452d94d8388d7d4e95c
</span>Author: Umesh Singla <umeshksingla@macports.org>
AuthorDate: Wed Aug 9 02:50:23 2017 +0530

<span style='display:block; white-space:pre;color:#404040;'>    WIP: Add registry functions for getting reg_snapshot like reg_entry
</span>---
 src/cregistry/entry.c | 66 ++++++++++++++++++++++++++-------------------------
 1 file changed, 34 insertions(+), 32 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 dc47bb2..7908468 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;'>@@ -1566,12 +1566,41 @@ char* reg_snapshot_get_id(reg_registry* reg, reg_error* errPtr) {
</span> 
 }
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+static int reg_stmt_to_snapshot(void* userdata, void** entry, void* stmt,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        void* calldata UNUSED, reg_error* errPtr UNUSED) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int is_new;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    reg_registry* reg = (reg_registry*)userdata;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Tcl_HashEntry* hash = Tcl_CreateHashEntry(&reg->open_entries,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            (const char*)&id, &is_new);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    if (is_new) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reg_snapshot* e = malloc(sizeof(reg_snapshot));
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if (!e) {
</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;'>+        e->reg = reg;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        e->id = id;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        e->proc = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        *entry = e;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        Tcl_SetHashValue(hash, e);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    } else {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        *entry = Tcl_GetHashValue(hash);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return 1;
</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;'>+static int reg_all_snapshots(reg_registry* reg, char* query, int query_len,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        reg_snapshot*** objects, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    int lower_bound = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return reg_all_objects(reg, query, query_len, (void***)objects,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            reg_stmt_to_snapshot, &lower_bound, NULL, errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> reg_snapshot* reg_snapshot_get(reg_registry* reg, char* id, reg_error* errPtr) {
 
     printf("inside cregistry get snapshot..\n");
 
     sqlite3_stmt* stmt = NULL;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    reg_entry* entry = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    reg_snapshot** snapshots;
</span> 
     char* query = "SELECT port_name, requested, variant_name, variant_sign "
         "FROM registry.snapshots "
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1583,38 +1612,11 @@ reg_snapshot* reg_snapshot_get(reg_registry* reg, char* id, reg_error* errPtr) {
</span>         "snapshot_ports.id=snapshot_port_variants.snapshot_ports_id"
         "WHERE snapshots.id=?";
 
<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, (sqlite_int64)id == SQLITE_OK ) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</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_ROW:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    reg_snapshot* snapshot;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    // TODO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    break;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                case SQLITE_DONE:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    errPtr->code = REG_NOT_FOUND;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    errPtr->description = sqlite3_mprintf("no matching snapshot found for id = %s", id);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    errPtr->free = (reg_error_destructor*) sqlite3_free;
</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;'>-                    continue;
</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;'>-                    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;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    } else {
</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;'>-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    query = sqlite3_mprintf(query, id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    result = reg_all_snapshots(reg, query, -1, snapshots, errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    sqlite3_free(query);
</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:#ffe0e0;'>-    return snapshot;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return result;
</span> }
 
 /**
</pre><pre style='margin:0'>

</pre>