/* APR cleanup function used to close the database when its pool is destoryed. DATA should be the svn_sqlite__db_t handle for the database. */ static apr_status_t close_apr(void *data) { svn_sqlite__db_t *db = data; svn_error_t *err = SVN_NO_ERROR; int result; int i; /* Finalize any existing prepared statements. */ for (i = 0; i < db->nbr_statements; i++) { if (db->prepared_stmts[i]) err = svn_error_compose_create( svn_sqlite__finalize(db->prepared_stmts[i]), err); } result = sqlite3_close(db->db3); /* If there's a pre-existing error, return it. */ if (err) { result = err->apr_err; svn_error_clear(err); return result; } if (result != SQLITE_OK) return SQLITE_ERROR_CODE(result); return APR_SUCCESS; }
/* APR cleanup function used to close the database when its pool is destroyed. DATA should be the svn_sqlite__db_t handle for the database. */ static apr_status_t close_apr(void *data) { svn_sqlite__db_t *db = data; svn_error_t *err = SVN_NO_ERROR; apr_status_t result; int i; /* Check to see if we've already closed this database. */ if (db->db3 == NULL) return APR_SUCCESS; /* Finalize any prepared statements. */ if (db->prepared_stmts) { for (i = 0; i < db->nbr_statements + STMT_INTERNAL_LAST; i++) { if (db->prepared_stmts[i]) { if (i < db->nbr_statements && db->prepared_stmts[i]->needs_reset) { #ifdef SVN_DEBUG const char *stmt_text = db->statement_strings[i]; SVN_UNUSED(stmt_text); SVN_ERR_MALFUNCTION_NO_RETURN(); #else err = svn_error_compose_create(err, svn_sqlite__reset(db->prepared_stmts[i])); #endif } err = svn_error_compose_create( svn_sqlite__finalize(db->prepared_stmts[i]), err); } } } result = sqlite3_close(db->db3); /* If there's a pre-existing error, return it. */ if (err) { result = err->apr_err; svn_error_clear(err); return result; } if (result != SQLITE_OK) return SQLITE_ERROR_CODE(result); /* ### lossy */ db->db3 = NULL; return APR_SUCCESS; }
static svn_error_t * get_schema(int *version, svn_sqlite__db_t *db, apr_pool_t *scratch_pool) { svn_sqlite__stmt_t *stmt; SVN_ERR(svn_sqlite__prepare(&stmt, db, "PRAGMA user_version;", scratch_pool)); SVN_ERR(svn_sqlite__step_row(stmt)); *version = svn_sqlite__column_int(stmt, 0); return svn_sqlite__finalize(stmt); }
svn_error_t * svn_sqlite__read_schema_version(int *version, svn_sqlite__db_t *db, apr_pool_t *scratch_pool) { svn_sqlite__stmt_t *stmt; SVN_ERR(prepare_statement(&stmt, db, "PRAGMA user_version;", scratch_pool)); SVN_ERR(svn_sqlite__step_row(stmt)); *version = svn_sqlite__column_int(stmt, 0); return svn_error_trace(svn_sqlite__finalize(stmt)); }