void blobcache_init(void) { sqlite3 *db; extern char *showtime_cache_path; char buf[256]; blobcache_prune_old(); snprintf(buf, sizeof(buf), "%s/cachedb", showtime_cache_path); mkdir(buf, 0770); snprintf(buf, sizeof(buf), "%s/cachedb/cache.db", showtime_cache_path); // unlink(buf); cachedb_pool = db_pool_create(buf, 4); db = db_pool_get(cachedb_pool); if(db == NULL) return; int r = db_upgrade_schema(db, "bundle://resources/cachedb", "cachedb"); db_pool_put(cachedb_pool, db); if(r) cachedb_pool = NULL; else callout_arm(&blobcache_callout, blobcache_do_prune, NULL, 1); }
void db_check_schema( char *setting, char *desc, int codeSupports, QueryTable_t *defSchema, int defSchemaCount, SchemaUpgrade_t *schemaUpgrade ) { char *verString; int ver; int printed; ver = -1; printed = FALSE; do { verString = db_get_setting( setting ); if( !verString ) { ver = 0; } else { ver = atoi( verString ); free( verString ); } if( !printed ) { LogPrint( LOG_CRIT, "Current %s database schema version %d", desc, ver ); LogPrint( LOG_CRIT, "Code supports version %d", codeSupports ); printed = TRUE; } if( ver < codeSupports ) { ver = db_upgrade_schema( setting, desc, defSchema, defSchemaCount, schemaUpgrade, ver, codeSupports ); } } while( ver < codeSupports ); }
static int es_db_upgrade_schema(duk_context *ctx) { es_sqlite_t *es = es_resource_get(ctx, 0, &es_resource_sqlite); int r = db_upgrade_schema(es->es_db, duk_safe_to_string(ctx, 1), es->es_name, NULL, NULL); if(r) duk_error(ctx, DUK_ERR_ERROR, "Unable to upgrade schema"); return 0; }
static JSBool js_db_upgrade(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { int r = 0; const char *path; js_db_t *jd = JS_GetPrivate(cx, obj); if(js_db_check(cx, jd)) return JS_FALSE; if(!JS_ConvertArguments(cx, argc, argv, "s", &path)) return JS_FALSE; r = db_upgrade_schema(jd->jd_db, path, jd->jd_name, NULL, NULL); *rval = BOOLEAN_TO_JSVAL(!r); return JS_TRUE; }