<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/973118ad49464a9d7e847d4a033616bf570937dc">https://github.com/macports/macports-base/commit/973118ad49464a9d7e847d4a033616bf570937dc</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit 973118ad49464a9d7e847d4a033616bf570937dc
</span>Author: Umesh Singla <umeshksingla@macports.org>
AuthorDate: Sun Aug 6 04:33:43 2017 +0530

<span style='display:block; white-space:pre;color:#404040;'>    Add SQL query for fetching a snapshot from a given id
</span>---
 src/cregistry/entry.c | 46 ++++++++++++++++++++++++++++++++++++++++++++--
 src/cregistry/entry.h |  2 +-
 2 files changed, 45 insertions(+), 3 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 761f240..c66e3e8 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;'>@@ -1541,12 +1541,54 @@ char* reg_snapshot_get_id(reg_registry* reg, char* id, reg_error* errPtr) {
</span> 
 }
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-snapshot* reg_snapshot_get(reg_registry* reg, char* id, reg_error* errPtr) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+reg_snapshot* reg_snapshot_get(reg_registry* reg, char* id, reg_error* errPtr) {
</span> 
     printf("inside cregistry get snapshot..\n");
<span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     sqlite3_stmt* stmt = NULL;
     reg_entry* entry = NULL;
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    char* query = "SELECT id FROM registry.snapshots ORDER BY id DESC LIMIT 1";
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    char* query = "SELECT * FROM registry.snapshots "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "INNER JOIN "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "registry.snapshot_ports ON "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "snapshots.id=snapshot_ports.snapshots_id "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "LEFT JOIN "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "registry.snapshot_port_variants ON "
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "snapshot_ports.id=snapshot_port_variants.snapshot_ports_id"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        "WHERE snapshots.id=?";
</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, sqlite_int64(id)) == SQLITE_OK ) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</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_ROW:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    reg_snapshot* snapshot;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    // TODO
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    break;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                case SQLITE_DONE:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    errPtr->code = REG_NOT_FOUND;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    errPtr->description = sqlite3_mprintf("no matching snapshot found for id = %s", id);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    errPtr->free = (reg_error_destructor*) sqlite3_free;
</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;'>+                    continue;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                default:
</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;'>+                    break;
</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;'>+    } 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;'>+    }
</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><span style='display:block; white-space:pre;background:#e0ffe0;'>+    return snapshot;
</span> }
 
 /**
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/src/cregistry/entry.h b/src/cregistry/entry.h
</span><span style='display:block; white-space:pre;color:#808080;'>index ef23882..974050f 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/src/cregistry/entry.h
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/src/cregistry/entry.h
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -123,7 +123,7 @@ int get_parsed_variants(char* variants_str, variant* all_variants,
</span>     char* delim, int* variant_count);
 
 char* reg_snapshot_get_id(reg_registry* reg, reg_error* errPtr);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-snapshot* reg_snapshot_get(reg_registry* reg, char* id, reg_error* errPtr);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+reg_snapshot* reg_snapshot_get(reg_registry* reg, char* id, reg_error* errPtr);
</span> 
 int reg_all_open_entries(reg_registry* reg, reg_entry*** entries);
 
</pre><pre style='margin:0'>

</pre>