static int btreeSeqRemoveHandle( sqlite3_context *context, Btree *p, CACHED_DB *cache_entry) { BtShared *pBt; DB_SEQUENCE *seq; DBT key; SEQ_COOKIE cookie; int ret; pBt = p->pBt; memcpy(&cookie, cache_entry->cookie, sizeof(cookie)); /* Remove the entry from the hash table. */ sqlite3HashInsert(&pBt->db_cache, cookie.name, cookie.name_len, NULL); if (cookie.cache != 0) { seq = (DB_SEQUENCE *)cache_entry->dbp; seq->remove(seq, p->savepoint_txn, 0); } /* Remove the cookie entry from the metadata database. */ memset(&key, 0, sizeof(key)); key.data = cookie.name; key.size = cookie.name_len; if ((ret = pBt->metadb->del(pBt->metadb, p->savepoint_txn, &key, 0)) != 0 && ret != DB_NOTFOUND) { btreeSeqError(context, SQLITE_ERROR, "Sequence remove incomplete. Couldn't delete metadata." "Error %s.", db_strerror(ret)); } if (cache_entry->cookie != NULL) sqlite3_free(cache_entry->cookie); sqlite3_free(cache_entry); return (ret == 0 ? SQLITE_OK : dberr2sqlite(ret, NULL)); }
static JSBool rpmseq_Remove(JSContext *cx, uintN argc, jsval *vp) { jsval *argv = JS_ARGV(cx , vp); JSObject *obj = JS_NewObjectForConstructor(cx , vp); if(!obj) { JS_ReportError(cx , "Failed to create 'this' object"); return JS_FALSE; } void * ptr = JS_GetInstancePrivate(cx, obj, &rpmseqClass, NULL); DB_SEQUENCE * seq = ptr; JSObject * o = NULL; DB_TXN * _txn = NULL; uint32_t _flags = 0; JSBool ok = JS_FALSE; _METHOD_DEBUG_ENTRY(_debug); if (seq == NULL) goto exit; JS_SET_RVAL(cx, vp, JSVAL_FALSE); if (!(ok = JS_ConvertArguments(cx, argc, argv, "o/u", &o, &_flags))) goto exit; if (o && OBJ_IS_RPMTXN(cx, o)) _txn = JS_GetInstancePrivate(cx, o, &rpmtxnClass, NULL); { int ret = seq->remove(seq, _txn, _flags); switch (ret) { default: fprintf(stderr, "DB_SEQUENCE->remove: %s\n", db_strerror(ret)); goto exit; break; case 0: JS_SET_RVAL(cx, vp, JSVAL_TRUE); break; } seq = ptr = NULL; (void) JS_SetPrivate(cx, obj, ptr); } ok = JS_TRUE; exit: return ok; }