summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rpmdb/sqlite.c515
1 files changed, 264 insertions, 251 deletions
diff --git a/rpmdb/sqlite.c b/rpmdb/sqlite.c
index bcb10e1f5..8804f3fe5 100644
--- a/rpmdb/sqlite.c
+++ b/rpmdb/sqlite.c
@@ -105,8 +105,19 @@ union _dbswap {
/*@unchecked@*/
static unsigned int endian = 0x11223344;
+static void dbg_scp(void *ptr)
+ /*@*/
+{
+ SCP_t scp = ptr;
+
+if (_debug)
+fprintf(stderr, "\tscp %p [%d:%d] av %p avlen %p nr [%d:%d] nc %d all %d\n", scp, scp->ac, scp->nalloc, scp->av, scp->avlen, scp->rx, scp->nr, scp->nc, scp->all);
+
+}
+
static void dbg_keyval(const char * msg, dbiIndex dbi, /*@null@*/ DBC * dbcursor,
DBT * key, DBT * data, unsigned int flags)
+ /*@*/
{
if (!_debug) return;
@@ -123,6 +134,7 @@ if (!_debug) return;
fprintf(stderr, " data 0x%x[%d]", *(unsigned int *)data->data, data->size);
fprintf(stderr, "\n");
+ dbg_scp(dbcursor);
}
/*@only@*/
@@ -133,6 +145,7 @@ static SCP_t scpReset(/*@only@*/ SCP_t scp)
if (_debug)
fprintf(stderr, "*** %s(%p)\n", __FUNCTION__, scp);
+dbg_scp(scp);
if (scp->cmd) {
sqlite3_free(scp->cmd);
scp->cmd = NULL;
@@ -184,17 +197,237 @@ fprintf(stderr, "*** %s(%p)\n", __FUNCTION__, scp);
return NULL;
}
-static SCP_t scpNew(void)
+static SCP_t scpNew(DB * dbp)
/*@*/
{
SCP_t scp = xcalloc(1, sizeof(*scp));
+ scp->dbp = dbp;
if (_debug)
fprintf(stderr, "*** %s(%p)\n", __FUNCTION__, scp);
return scp;
}
-/*===================================================================*/
+static int sql_step(SCP_t scp)
+ /*@modifies scp @*/
+{
+/*@i@*/ SQL_DB * sqldb = (SQL_DB *) scp->dbp;
+ const char * cname;
+ const char * vtype;
+ size_t nb;
+ int loop;
+ int need;
+ int rc;
+ int i;
+
+ scp->nc = sqlite3_column_count(scp->pStmt);
+
+ if (scp->nr == 0 && scp->av != NULL)
+ need = 2 * scp->nc;
+ else
+ need = scp->nc;
+
+ /* XXX scp->nc = need = scp->nalloc = 0 case forces + 1 here */
+ if (!scp->ac && !need && !scp->nalloc)
+ need++;
+
+ if (scp->ac + need >= scp->nalloc) {
+ /* XXX +4 is bogus, was +1 */
+ scp->nalloc = 2 * scp->nalloc + need + 4;
+ scp->av = xrealloc(scp->av, scp->nalloc * sizeof(*scp->av));
+ scp->avlen = xrealloc(scp->avlen, scp->nalloc * sizeof(*scp->avlen));
+ }
+
+assert(scp->av != NULL);
+assert(scp->avlen != NULL);
+
+ if (scp->nr == 0) {
+if (noisy)
+fprintf(stderr, "*** nc %d\n", scp->nc);
+ for (i = 0; i < scp->nc; i++) {
+ scp->av[scp->ac] = xstrdup(sqlite3_column_name(scp->pStmt, i));
+ if (scp->avlen) scp->avlen[scp->ac] = strlen(scp->av[scp->ac]) + 1;
+if (noisy)
+fprintf(stderr, "\t%d %s\n", i, scp->av[scp->ac]);
+ scp->ac++;
+assert(scp->ac <= scp->nalloc);
+ }
+ }
+
+/*@-infloopsuncon@*/
+ loop = 1;
+ while (loop) {
+ rc = sqlite3_step(scp->pStmt);
+ switch (rc) {
+ case SQLITE_DONE:
+if (_debug)
+fprintf(stderr, "sqlite3_step: DONE scp %p [%d:%d] av %p avlen %p\n", scp, scp->ac, scp->nalloc, scp->av, scp->avlen);
+ loop = 0;
+ /*@switchbreak@*/ break;
+ case SQLITE_ROW:
+ if (scp->av != NULL)
+ for (i = 0; i < scp->nc; i++) {
+ /* Expand the row array for new elements */
+ if (scp->ac + need >= scp->nalloc) {
+ /* XXX +4 is bogus, was +1 */
+ scp->nalloc = 2 * scp->nalloc + need + 4;
+ scp->av = xrealloc(scp->av, scp->nalloc * sizeof(*scp->av));
+ scp->avlen = xrealloc(scp->avlen, scp->nalloc * sizeof(*scp->avlen));
+ }
+
+ cname = sqlite3_column_name(scp->pStmt, i);
+ vtype = sqlite3_column_decltype(scp->pStmt, i);
+ nb = 0;
+
+ if (!strcmp(vtype, "blob")) {
+ const void * v = sqlite3_column_blob(scp->pStmt, i);
+ nb = sqlite3_column_bytes(scp->pStmt, i);
+if (_debug)
+fprintf(stderr, "\t%d %s %s %p[%d]\n", i, cname, vtype, v, nb);
+ if (nb > 0) {
+ void * t = xmalloc(nb);
+ scp->av[scp->ac] = memcpy(t, v, nb);
+ scp->avlen[scp->ac] = nb;
+ scp->ac++;
+assert(scp->ac <= scp->nalloc);
+ }
+ } else
+ if (!strcmp(vtype, "double")) {
+ double v = sqlite3_column_double(scp->pStmt, i);
+ nb = sizeof(v);
+if (_debug)
+fprintf(stderr, "\t%d %s %s %g\n", i, cname, vtype, v);
+ if (nb > 0) {
+ scp->av[scp->ac] = memcpy(xmalloc(nb), &v, nb);
+ scp->avlen[scp->ac] = nb;
+ scp->ac++;
+assert(scp->ac <= scp->nalloc);
+ }
+ } else
+ if (!strcmp(vtype, "int")) {
+ int32_t v = sqlite3_column_int(scp->pStmt, i);
+ nb = sizeof(v);
+if (_debug)
+fprintf(stderr, "\t%d %s %s %d\n", i, cname, vtype, v);
+ if (nb > 0) {
+ scp->av[scp->ac] = memcpy(xmalloc(nb), &v, nb);
+ scp->avlen[scp->ac] = nb;
+ scp->ac++;
+assert(scp->ac <= scp->nalloc);
+ }
+ } else
+ if (!strcmp(vtype, "int64")) {
+ int64_t v = sqlite3_column_int64(scp->pStmt, i);
+ nb = sizeof(v);
+if (_debug)
+fprintf(stderr, "\t%d %s %s %ld\n", i, cname, vtype, (long)v);
+ if (nb > 0) {
+ scp->av[scp->ac] = memcpy(xmalloc(nb), &v, nb);
+ scp->avlen[scp->ac] = nb;
+ scp->ac++;
+assert(scp->ac <= scp->nalloc);
+ }
+ } else
+ if (!strcmp(vtype, "text")) {
+ const char * v = sqlite3_column_text(scp->pStmt, i);
+ nb = strlen(v) + 1;
+if (_debug)
+fprintf(stderr, "\t%d %s %s \"%s\"\n", i, cname, vtype, v);
+ if (nb > 0) {
+ scp->av[scp->ac] = memcpy(xmalloc(nb), v, nb);
+ scp->avlen[scp->ac] = nb;
+ scp->ac++;
+if (_debug)
+assert(scp->ac <= scp->nalloc);
+ }
+ }
+ }
+ scp->nr++;
+ /*@switchbreak@*/ break;
+ case SQLITE_BUSY:
+ fprintf(stderr, "sqlite3_step: BUSY %d\n", rc);
+ /*@switchbreak@*/ break;
+ case SQLITE_ERROR:
+ fprintf(stderr, "sqlite3_step: ERROR %d\n", rc);
+ loop = 0;
+ /*@switchbreak@*/ break;
+ case SQLITE_MISUSE:
+ fprintf(stderr, "sqlite3_step: MISUSE %d\n", rc);
+ loop = 0;
+ /*@switchbreak@*/ break;
+ default:
+ fprintf(stderr, "sqlite3_step: rc %d\n", rc);
+ loop = 0;
+ /*@switchbreak@*/ break;
+ }
+ }
+/*@=infloopsuncon@*/
+
+ if (rc == SQLITE_DONE)
+ rc = SQLITE_OK;
+
+ return rc;
+}
+
+static int sql_bind_key(dbiIndex dbi, SCP_t scp, int pos, DBT * key)
+ /*@modifies scp @*/
+{
+ int rc = 0;
+
+ switch (dbi->dbi_rpmtag) {
+ case RPMDBI_PACKAGES:
+ rc = sqlite3_bind_int(scp->pStmt, pos, *(int *)key->data);
+ /*@innerbreak@*/ break;
+ default:
+ switch (tagType(dbi->dbi_rpmtag)) {
+ case RPM_NULL_TYPE:
+ case RPM_BIN_TYPE:
+ rc = sqlite3_bind_blob(scp->pStmt, pos, key->data, key->size, SQLITE_STATIC);
+ /*@innerbreak@*/ break;
+ case RPM_CHAR_TYPE:
+ case RPM_INT8_TYPE:
+ case RPM_INT16_TYPE:
+ case RPM_INT32_TYPE:
+/* case RPM_INT64_TYPE: */
+ default:
+ rc = sqlite3_bind_int(scp->pStmt, pos, *(int *)key->data);
+ /*@innerbreak@*/ break;
+ case RPM_STRING_TYPE:
+ case RPM_STRING_ARRAY_TYPE:
+ case RPM_I18NSTRING_TYPE:
+ rc = sqlite3_bind_text(scp->pStmt, pos, key->data, key->size, SQLITE_STATIC);
+ /*@innerbreak@*/ break;
+ }
+ }
+
+ return rc;
+}
+static int sql_bind_data(dbiIndex dbi, SCP_t scp, int pos, DBT * data)
+ /*@modifies scp @*/
+{
+ int rc = 0;
+
+ rc = sqlite3_bind_blob(scp->pStmt, 2, data->data, data->size, SQLITE_STATIC);
+
+ return rc;
+}
+
+static int scpExec(SCP_t scp)
+ /*@modifies scp @*/
+{
+/*@i@*/ SQL_DB * sqldb = (SQL_DB *) scp->dbp;
+ int rc;
+
+ rc = sqlite3_prepare(sqldb->db, scp->cmd, strlen(scp->cmd), &scp->pStmt, &scp->pzErrmsg);
+ if (rc) rpmMessage(RPMMESS_WARNING, "%s: prepare rc %d\n", __FUNCTION__, rc);
+
+ rc = sql_step(scp);
+ if (rc) rpmMessage(RPMMESS_WARNING, "%s: sql_step rc %d\n", rc);
+
+ return rc;
+}
+
+/*===================================================================*/
/*
* Transaction support
*/
@@ -287,8 +520,6 @@ static void * allocTempBuffer(DBC * dbcursor, size_t len)
SCP_t scp = (SCP_t)dbcursor;
SQL_MEM * item;
-assert(scp != NULL);
-
item = xmalloc(sizeof(*item));
item->mem_ptr = xmalloc(len);
@@ -324,10 +555,9 @@ static int sql_initDB(dbiIndex dbi)
/*@*/
{
SQL_DB * sqldb = (SQL_DB *) dbi->dbi_db;
- SCP_t scp = scpNew();
- int rc = 0;
-
+ SCP_t scp = scpNew(dbi->dbi_db);
char cmd[BUFSIZ];
+ int rc = 0;
/* Check if the table exists... */
sprintf(cmd,
@@ -414,9 +644,7 @@ static int sql_cclose (dbiIndex dbi, /*@only@*/ DBC * dbcursor,
if (_debug)
fprintf(stderr, "==> %s(%p)\n", __FUNCTION__, scp);
-assert(scp != NULL);
-
- if ( scp->memory ) {
+ if (scp->memory) {
SQL_MEM * curr_mem = scp->memory;
SQL_MEM * next_mem;
int loc_count=0;
@@ -430,16 +658,15 @@ assert(scp != NULL);
}
}
+ if (flags == DB_WRITECURSOR)
+ rc = sql_commitTransaction(dbi, 1);
+ else
+ rc = sql_endTransaction(dbi);
+
/*@-kepttrans@*/
scp = scpFree(scp);
/*@=kepttrans@*/
- if ( flags == DB_WRITECURSOR ) {
- rc = sql_commitTransaction(dbi, 1);
- } else {
- rc = sql_endTransaction(dbi);
- }
-
return rc;
}
@@ -500,22 +727,17 @@ static int sql_open(rpmdb rpmdb, rpmTag rpmtag, /*@out@*/ dbiIndex * dbip)
const char * dbfile;
const char * dbfname;
const char * sql_errcode;
+ dbiIndex dbi = xcalloc(1, sizeof(*dbi));
+ SQL_DB * sqldb;
+ size_t len;
int rc = 0;
int xx;
-
- size_t len;
-
- dbiIndex dbi = NULL;
-
- SQL_DB * sqldb;
-
- dbi = xcalloc(1, sizeof(*dbi));
/*@-assignexpose -newreftrans@*/
/*@i@*/ dbi->dbi_rpmdb = rpmdb;
/*@=assignexpose =newreftrans@*/
dbi->dbi_rpmtag = rpmtag;
- dbi->dbi_api = 4; /* I have assigned 4 to sqlite */
+ dbi->dbi_api = 4;
/*
* Inverted lists have join length of 2, primary data has join length of 1.
@@ -536,6 +758,7 @@ static int sql_open(rpmdb rpmdb, rpmTag rpmtag, /*@out@*/ dbiIndex * dbip)
if (dbip)
*dbip = NULL;
+
/*
* Get the prefix/root component and directory path
*/
@@ -652,20 +875,17 @@ static int sql_copen (dbiIndex dbi, /*@null@*/ DB_TXN * txnid,
/*@globals fileSystem @*/
/*@modifies dbi, *txnid, *dbcp, fileSystem @*/
{
- DBC * dbcursor;
- SCP_t scp = scpNew();
+ SCP_t scp = scpNew(dbi->dbi_db);
+ DBC * dbcursor = (DBC *)scp;
int rc = 0;
if (_debug)
fprintf(stderr, "==> %s(%s) tag %d type %d scp %p\n", __FUNCTION__, tagName(dbi->dbi_rpmtag), dbi->dbi_rpmtag, tagType(dbi->dbi_rpmtag), scp);
- dbcursor = (DBC *)scp;
- dbcursor->dbp = dbi->dbi_db;
/* If we're going to write, start a transaction (lock the DB) */
- if (flags == DB_WRITECURSOR) {
+ if (flags == DB_WRITECURSOR)
rc = sql_startTransaction(dbi);
- }
if (dbcp)
/*@-onlytrans@*/ *dbcp = dbcursor; /*@=onlytrans@*/
@@ -675,207 +895,6 @@ fprintf(stderr, "==> %s(%s) tag %d type %d scp %p\n", __FUNCTION__, tagName(dbi-
return rc;
}
-static int sql_bind_key(dbiIndex dbi, SCP_t scp, int pos, DBT * key)
- /*@modifies scp @*/
-{
- int rc = 0;
-
- switch (dbi->dbi_rpmtag) {
- case RPMDBI_PACKAGES:
- rc = sqlite3_bind_int(scp->pStmt, pos, *(int *)key->data);
- /*@innerbreak@*/ break;
- default:
- switch (tagType(dbi->dbi_rpmtag)) {
- case RPM_NULL_TYPE:
- case RPM_BIN_TYPE:
- rc = sqlite3_bind_blob(scp->pStmt, pos, key->data, key->size, SQLITE_STATIC);
- /*@innerbreak@*/ break;
- case RPM_CHAR_TYPE:
- case RPM_INT8_TYPE:
- case RPM_INT16_TYPE:
- case RPM_INT32_TYPE:
-/* case RPM_INT64_TYPE: */
- default:
- rc = sqlite3_bind_int(scp->pStmt, pos, *(int *)key->data);
- /*@innerbreak@*/ break;
- case RPM_STRING_TYPE:
- case RPM_STRING_ARRAY_TYPE:
- case RPM_I18NSTRING_TYPE:
- rc = sqlite3_bind_text(scp->pStmt, pos, key->data, key->size, SQLITE_STATIC);
- /*@innerbreak@*/ break;
- }
- }
-
- return rc;
-}
-
-static int sql_bind_data(dbiIndex dbi, SCP_t scp, int pos, DBT * data)
- /*@modifies scp @*/
-{
- int rc = 0;
-
- rc = sqlite3_bind_blob(scp->pStmt, 2, data->data, data->size, SQLITE_STATIC);
-
- return rc;
-}
-
-static int sql_step(sqlite3 *db, SCP_t scp)
- /*@modifies scp @*/
-{
- int loop;
- int need;
- int rc;
- int i;
-
- scp->nc = sqlite3_column_count(scp->pStmt);
-
- if (scp->nr == 0 && scp->av != NULL)
- need = 2 * scp->nc;
- else
- need = scp->nc;
-
- /* XXX scp->nc = need = scp->nalloc = 0 case forces + 1 here */
- if (!scp->ac && !need && !scp->nalloc)
- need++;
-
- if (scp->ac + need >= scp->nalloc) {
- /* XXX +4 is bogus, was +1 */
- scp->nalloc = 2 * scp->nalloc + need + 4;
- scp->av = xrealloc(scp->av, scp->nalloc * sizeof(*scp->av));
- scp->avlen = xrealloc(scp->avlen, scp->nalloc * sizeof(*scp->avlen));
- }
-
-assert(scp->av != NULL);
-assert(scp->avlen != NULL);
-
- if (scp->nr == 0) {
-if (noisy)
-fprintf(stderr, "*** nc %d\n", scp->nc);
- for (i = 0; i < scp->nc; i++) {
- scp->av[scp->ac] = xstrdup(sqlite3_column_name(scp->pStmt, i));
- if (scp->avlen) scp->avlen[scp->ac] = strlen(scp->av[scp->ac]) + 1;
-if (noisy)
-fprintf(stderr, "\t%d %s\n", i, scp->av[scp->ac]);
- scp->ac++;
-assert(scp->ac <= scp->nalloc);
- }
- }
-
-/*@-infloopsuncon@*/
- loop = 1;
- while (loop) {
- rc = sqlite3_step(scp->pStmt);
- switch (rc) {
- case SQLITE_DONE:
-if (_debug)
-fprintf(stderr, "sqlite3_step: DONE scp %p [%d:%d] av %p avlen %p\n", scp, scp->ac, scp->nalloc, scp->av, scp->avlen);
- loop = 0;
- /*@switchbreak@*/ break;
- case SQLITE_ROW:
- if (scp->av != NULL)
- for (i = 0; i < scp->nc; i++) {
- /* Expand the row array for new elements */
- if (scp->ac + need >= scp->nalloc) {
- /* XXX +4 is bogus, was +1 */
- scp->nalloc = 2 * scp->nalloc + need + 4;
- scp->av = xrealloc(scp->av, scp->nalloc * sizeof(*scp->av));
- scp->avlen = xrealloc(scp->avlen, scp->nalloc * sizeof(*scp->avlen));
- }
-
- const char * cname = sqlite3_column_name(scp->pStmt, i);
- const char * vtype = sqlite3_column_decltype(scp->pStmt, i);
- size_t nb = 0;
-
- if (!strcmp(vtype, "blob")) {
- const void * v = sqlite3_column_blob(scp->pStmt, i);
- nb = sqlite3_column_bytes(scp->pStmt, i);
-if (_debug)
-fprintf(stderr, "\t%d %s %s %p[%d]\n", i, cname, vtype, v, nb);
- if (nb > 0) {
- void * t = xmalloc(nb);
- scp->av[scp->ac] = memcpy(t, v, nb);
- scp->avlen[scp->ac] = nb;
- scp->ac++;
-assert(scp->ac <= scp->nalloc);
- }
- } else
- if (!strcmp(vtype, "double")) {
- double v = sqlite3_column_double(scp->pStmt, i);
- nb = sizeof(v);
-if (_debug)
-fprintf(stderr, "\t%d %s %s %g\n", i, cname, vtype, v);
- if (nb > 0) {
- scp->av[scp->ac] = memcpy(xmalloc(nb), &v, nb);
- scp->avlen[scp->ac] = nb;
- scp->ac++;
-assert(scp->ac <= scp->nalloc);
- }
- } else
- if (!strcmp(vtype, "int")) {
- int32_t v = sqlite3_column_int(scp->pStmt, i);
- nb = sizeof(v);
-if (_debug)
-fprintf(stderr, "\t%d %s %s %d\n", i, cname, vtype, v);
- if (nb > 0) {
- scp->av[scp->ac] = memcpy(xmalloc(nb), &v, nb);
- scp->avlen[scp->ac] = nb;
- scp->ac++;
-assert(scp->ac <= scp->nalloc);
- }
- } else
- if (!strcmp(vtype, "int64")) {
- int64_t v = sqlite3_column_int64(scp->pStmt, i);
- nb = sizeof(v);
-if (_debug)
-fprintf(stderr, "\t%d %s %s %ld\n", i, cname, vtype, (long)v);
- if (nb > 0) {
- scp->av[scp->ac] = memcpy(xmalloc(nb), &v, nb);
- scp->avlen[scp->ac] = nb;
- scp->ac++;
-assert(scp->ac <= scp->nalloc);
- }
- } else
- if (!strcmp(vtype, "text")) {
- const char * v = sqlite3_column_text(scp->pStmt, i);
- nb = strlen(v) + 1;
-if (_debug)
-fprintf(stderr, "\t%d %s %s \"%s\"\n", i, cname, vtype, v);
- if (nb > 0) {
- scp->av[scp->ac] = memcpy(xmalloc(nb), v, nb);
- scp->avlen[scp->ac] = nb;
- scp->ac++;
-if (_debug)
-assert(scp->ac <= scp->nalloc);
- }
- }
- }
- scp->nr++;
- /*@switchbreak@*/ break;
- case SQLITE_BUSY:
- fprintf(stderr, "sqlite3_step: BUSY %d\n", rc);
- /*@switchbreak@*/ break;
- case SQLITE_ERROR:
- fprintf(stderr, "sqlite3_step: ERROR %d\n", rc);
- loop = 0;
- /*@switchbreak@*/ break;
- case SQLITE_MISUSE:
- fprintf(stderr, "sqlite3_step: MISUSE %d\n", rc);
- loop = 0;
- /*@switchbreak@*/ break;
- default:
- fprintf(stderr, "sqlite3_step: %d %s\n", rc, sqlite3_errmsg(db));
- loop = 0;
- /*@switchbreak@*/ break;
- }
- }
-/*@=infloopsuncon@*/
-
- if (rc == SQLITE_DONE)
- rc = SQLITE_OK;
-
- return rc;
-}
-
/**
* Delete (key,data) pair(s) using db->del or dbcursor->c_del.
* @param dbi index database handle
@@ -891,7 +910,7 @@ static int sql_cdel (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key,
/*@modifies *dbcursor, fileSystem @*/
{
/*@i@*/ SQL_DB * sqldb = (SQL_DB *) dbi->dbi_db;
- SCP_t scp = scpNew();
+ SCP_t scp = scpNew(dbi->dbi_db);
int rc = 0;
dbg_keyval(__FUNCTION__, dbi, dbcursor, key, data, flags);
@@ -906,12 +925,8 @@ dbg_keyval(__FUNCTION__, dbi, dbcursor, key, data, flags);
rc = sql_bind_data(dbi, scp, 2, data);
if (rc) rpmMessage(RPMMESS_WARNING, "cdel(%s) bind data %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
- rc = sql_step(sqldb->db, scp);
- if (rc) rpmMessage(RPMMESS_WARNING, "cdel(%s) sql_step %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
-
- if (rc)
- rpmMessage(RPMMESS_DEBUG, "cdel(%s) %s (%d)\n", dbi->dbi_subfile,
- scp->pzErrmsg, rc);
+ rc = sql_step(scp);
+ if (rc) rpmMessage(RPMMESS_WARNING, "cdel(%s) sql_step rc %d\n", dbi->dbi_subfile, rc);
scp = scpFree(scp);
@@ -976,8 +991,8 @@ fprintf(stderr, "\tcget(%s) size 0 key 0x%x[%d] flags %d\n",
rc = sqlite3_prepare(sqldb->db, scp->cmd, strlen(scp->cmd), &scp->pStmt, &scp->pzErrmsg);
if (rc) rpmMessage(RPMMESS_WARNING, "cget(%s) sequential prepare %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
- rc = sql_step(sqldb->db, scp);
- if (rc) rpmMessage(RPMMESS_WARNING, "cget(%s) sequential sql_step %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
+ rc = sql_step(scp);
+ if (rc) rpmMessage(RPMMESS_WARNING, "cget(%s) sequential sql_step rc %d\n", dbi->dbi_subfile, rc);
break;
default:
@@ -997,8 +1012,8 @@ assert(key->data != NULL);
rc = sql_bind_key(dbi, scp, 1, key);
if (rc) rpmMessage(RPMMESS_WARNING, "cget(%s) key bind %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
- rc = sql_step(sqldb->db, scp);
- if (rc) rpmMessage(RPMMESS_WARNING, "cget(%s) sql_step %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
+ rc = sql_step(scp);
+ if (rc) rpmMessage(RPMMESS_WARNING, "cget(%s) sql_step rc %d\n", dbi->dbi_subfile, rc);
/*@innerbreak@*/ break;
}
@@ -1094,7 +1109,7 @@ static int sql_cput (dbiIndex dbi, /*@null@*/ DBC * dbcursor, DBT * key,
/*@modifies *dbcursor, fileSystem @*/
{
/*@i@*/ SQL_DB * sqldb = (SQL_DB *) dbi->dbi_db;
- SCP_t scp = scpNew();
+ SCP_t scp = scpNew(dbi->dbi_db);
int rc = 0;
dbg_keyval(__FUNCTION__, dbi, dbcursor, key, data, flags);
@@ -1110,8 +1125,8 @@ dbg_keyval(__FUNCTION__, dbi, dbcursor, key, data, flags);
rc = sql_bind_data(dbi, scp, 2, data);
if (rc) rpmMessage(RPMMESS_WARNING, "cput(%s) data bind %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
- rc = sql_step(sqldb->db, scp);
- if (rc) rpmMessage(RPMMESS_WARNING, "cput(%s) sql_step %s (%d)\n", dbi->dbi_subfile, sqlite3_errmsg(sqldb->db), rc);
+ rc = sql_step(scp);
+ if (rc) rpmMessage(RPMMESS_WARNING, "cput(%s) sql_step rc %d\n", dbi->dbi_subfile, rc);
break;
}
@@ -1131,7 +1146,7 @@ static int sql_byteswapped (dbiIndex dbi)
/*@modifies fileSystem @*/
{
SQL_DB * sqldb = (SQL_DB *) dbi->dbi_db;
- SCP_t scp = scpNew();
+ SCP_t scp = scpNew(dbi->dbi_db);
int sql_rc, rc = 0;
union _dbswap db_endian;
@@ -1277,13 +1292,11 @@ static int sql_stat (dbiIndex dbi, unsigned int flags)
/*@modifies dbi, fileSystem @*/
{
/*@i@*/ SQL_DB * sqldb = (SQL_DB *) dbi->dbi_db;
- SCP_t scp = scpNew();
+ SCP_t scp = scpNew(dbi->dbi_db);
int rc = 0;
long nkeys = -1;
- if ( dbi->dbi_stats ) {
- dbi->dbi_stats = _free(dbi->dbi_stats);
- }
+ dbi->dbi_stats = _free(dbi->dbi_stats);
/*@-sizeoftype@*/
dbi->dbi_stats = xcalloc(1, sizeof(DB_HASH_STAT));