<pre style='margin:0'>
Zero King (l2dy) pushed a commit to branch master
in repository macports-base.
</pre>
<p><a href="https://github.com/macports/macports-base/commit/09b3fecc39ec6b419813fbc08aabdf04b3271fc0">https://github.com/macports/macports-base/commit/09b3fecc39ec6b419813fbc08aabdf04b3271fc0</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 09b3fecc cregistry: replace nested statements with a loop
</span>09b3fecc is described below
<span style='display:block; white-space:pre;color:#808000;'>commit 09b3fecc39ec6b419813fbc08aabdf04b3271fc0
</span>Author: Zero King <l2dy@macports.org>
AuthorDate: Tue Feb 15 11:37:40 2022 +0000
<span style='display:block; white-space:pre;color:#404040;'> cregistry: replace nested statements with a loop
</span><span style='display:block; white-space:pre;color:#404040;'>
</span><span style='display:block; white-space:pre;color:#404040;'> with the necessary evil of goto
</span>---
src/cregistry/entry.c | 94 +++++++++++++++++++--------------------------------
1 file changed, 35 insertions(+), 59 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 e73ab0cd..34800f7b 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,72 +257,52 @@ 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* files = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_stmt* dependencies = NULL;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_stmt* portgroups = NULL;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3_stmt* followups[] = { NULL, NULL, NULL };
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3_stmt** pFiles = &followups[0];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3_stmt** pDependencies = &followups[1];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3_stmt** pPortgroups = &followups[2];
</span> char* ports_query = "DELETE FROM registry.ports WHERE id=?";
char* files_query = "DELETE FROM registry.files WHERE id=?";
char* dependencies_query = "DELETE FROM registry.dependencies WHERE id=?";
char* portgroups_query = "DELETE FROM registry.portgroups WHERE id=?";
if ((sqlite3_prepare_v2(reg->db, ports_query, -1, &ports, NULL) == SQLITE_OK)
&& (sqlite3_bind_int64(ports, 1, entry->id) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_prepare_v2(reg->db, files_query, -1, &files, NULL)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ /* follow-ups */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_prepare_v2(reg->db, files_query, -1, pFiles, NULL)
</span> == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_int64(files, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_prepare_v2(reg->db, dependencies_query, -1, &dependencies,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_bind_int64(*pFiles, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_prepare_v2(reg->db, dependencies_query, -1, pDependencies,
</span> NULL) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_int64(dependencies, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_prepare_v2(reg->db, portgroups_query, -1, &portgroups,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_bind_int64(*pDependencies, 1, entry->id) == SQLITE_OK)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_prepare_v2(reg->db, portgroups_query, -1, pPortgroups,
</span> NULL) == SQLITE_OK)
<span style='display:block; white-space:pre;background:#ffe0e0;'>- && (sqlite3_bind_int64(portgroups, 1, entry->id) == SQLITE_OK)) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ && (sqlite3_bind_int64(*pPortgroups, 1, entry->id) == SQLITE_OK)) {
</span> int r;
do {
r = sqlite3_step(ports);
switch (r) {
case SQLITE_DONE:
if (sqlite3_changes(reg->db) > 0) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>- do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- r = sqlite3_step(files);
</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;'>- do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- r = sqlite3_step(dependencies);
</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;'>- do {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- r = sqlite3_step(portgroups);
</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;'>- result = 1;
</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;'>- 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;'>- 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;'>- 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;'>- 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, errPtr, NULL);
</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:#e0ffe0;'>+ result = 1;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t i = 0; i < sizeof(followups)/sizeof(followups[0]); i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ do {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ r = sqlite3_step(followups[i]);
</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;'>+ case SQLITE_ERROR:
</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,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ errPtr, NULL);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ result = 0;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ goto stmt_finish;
</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;'>+stmt_finish:
</span> break;
} else {
errPtr->code = REG_INVALID;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -344,14 +324,10 @@ 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;'>- if (files) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_finalize(files);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (dependencies) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_finalize(dependencies);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- if (portgroups) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- sqlite3_finalize(portgroups);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ for (size_t i = 0; i < sizeof(followups)/sizeof(followups[0]); i++) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if (followups[i]) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ sqlite3_finalize(followups[i]);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span> }
return result;
}
</pre><pre style='margin:0'>
</pre>