// Log any errors
if (r) {
ERROR(db->ctx, "Database query failed: %s\n", sqlite3_errmsg(db->handle));
+
+ // Return some error code that says that the operation was not successful
+ return -ECANCELED;
}
return r;
// Create settings table
r = pakfire_db_execute(db, "CREATE TABLE IF NOT EXISTS settings(key TEXT, val TEXT)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// settings: Add a unique index on key
r = pakfire_db_execute(db, "CREATE UNIQUE INDEX IF NOT EXISTS settings_key ON settings(key)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// Create packages table
r = pakfire_db_execute(db,
"source_arch TEXT, "
"distribution TEXT"
")");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// packages: Create index to find package by name
r = pakfire_db_execute(db, "CREATE INDEX IF NOT EXISTS packages_name ON packages(name)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// packages: Create unique index over UUID
r = pakfire_db_execute(db, "CREATE UNIQUE INDEX IF NOT EXISTS packages_uuid ON packages(uuid)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// Create dependencies table
r = pakfire_db_execute(db,
"dependency TEXT, "
"FOREIGN KEY (pkg) REFERENCES packages(id) ON DELETE CASCADE"
")");
- if (r)
+ if (r < 0)
return r;
// dependencies: Add index over packages
r = pakfire_db_execute(db, "CREATE INDEX IF NOT EXISTS dependencies_pkg_index ON dependencies(pkg)");
- if (r)
+ if (r < 0)
return r;
// Create files table
"digest_sha3_256 BLOB, "
"FOREIGN KEY (pkg) REFERENCES packages(id) ON DELETE CASCADE"
")");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// files: Add index over packages
r = pakfire_db_execute(db, "CREATE INDEX IF NOT EXISTS files_pkg_index ON files(pkg)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// files: Add index over path
r = pakfire_db_execute(db, "CREATE INDEX IF NOT EXISTS files_path_index ON files(path)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// Create scriptlets table
r = pakfire_db_execute(db,
"scriptlet TEXT, "
"FOREIGN KEY (pkg) REFERENCES packages(id) ON DELETE CASCADE"
")");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
// scriptlets: Add index over packages
r = pakfire_db_execute(db, "CREATE INDEX IF NOT EXISTS scriptlets_pkg_index ON scriptlets(pkg)");
- if (r)
- return 1;
+ if (r < 0)
+ return r;
const char* arch = pakfire_root_get_effective_arch(db->root);
// Set architecture
r = pakfire_db_set_string(db, "arch", arch);
- if (r) {
+ if (r < 0) {
ERROR(db->ctx, "Could not set architecture\n");
return r;
}
while (db->schema < CURRENT_SCHEMA) {
// Begin a new transaction
r = pakfire_db_begin_transaction(db);
- if (r)
+ if (r < 0)
goto ROLLBACK;
switch (db->schema) {
// No schema exists
case 0:
r = pakfire_db_create_schema(db);
- if (r)
+ if (r < 0)
goto ROLLBACK;
db->schema = CURRENT_SCHEMA;
case 7:
r = pakfire_db_migrate_to_schema_8(db);
- if (r)
+ if (r < 0)
goto ROLLBACK;
db->schema++;
// Update the schema version
r = pakfire_db_set_int(db, "schema", CURRENT_SCHEMA);
- if (r)
+ if (r < 0)
goto ROLLBACK;
// All done, commit!
r = pakfire_db_commit(db);
- if (r)
+ if (r < 0)
goto ROLLBACK;
}
ROLLBACK:
pakfire_db_rollback(db);
-
- return 1;
+ return r;
}
static int pakfire_db_check_arch(pakfire_db* db) {
}
// Create or migrate schema
- r = pakfire_db_migrate_schema(db);
- if (r < 0)
- return r;
-
- return 0;
+ return pakfire_db_migrate_schema(db);
}
int pakfire_db_open(pakfire_db** db, pakfire_ctx* ctx, pakfire_root* root, int flags) {
ERROR:
pakfire_db_free(self);
-
return r;
}
return db;
pakfire_db_free(db);
-
return NULL;
}