/** * Returns a database connexion or NULL. * @param database_name is the filename of the file that contains the * database * @result returns a db_t * filled with the database connexion or NULL * in case of an error. */ db_t *open_database(gchar *database_name) { db_t *database = NULL; sqlite3 *db = NULL; int result = 0; database = (db_t *) g_malloc0(sizeof(db_t)); result = sqlite3_open(database_name, &db); if (result != SQLITE_OK) { print_db_error(db, _("(%d) Error while trying to open %s database: %s\n"), result, database_name, sqlite3_errmsg(db)); free_variable(database); sqlite3_close(db); return NULL; } else { database->db = db; database->stmts = new_stmts(db); sqlite3_extended_result_codes(db, 1); verify_if_tables_exists(database); return database; } }
/** * Returns a database connexion or NULL. * @param dirname is the name of the directory where the database is * located. * @param filename is the filename of the file that contains the * database * @result returns a db_t * filled with the database connexion or NULL * in case of an error. */ db_t *open_database(gchar *dirname, gchar *filename) { gchar *database_name = NULL; db_t *database = NULL; sqlite3 *db = NULL; int result = 0; if (dirname != NULL && filename != NULL) { create_directory(dirname); database_name = g_build_filename(dirname, filename, NULL); result = sqlite3_open(database_name, &db); if (result != SQLITE_OK) { print_db_error(_("(%d) Error while trying to open %s database: %s\n"), result, database_name, sqlite3_errmsg(db)); sqlite3_close(db); free_variable(database_name); return NULL; } else { database = (db_t *) g_malloc0(sizeof(db_t)); g_assert_nonnull(database); database->version_filename = g_strdup_printf("%s.version", database_name); database->db = db; sqlite3_extended_result_codes(db, 1); verify_if_tables_exists(database); database->stmts = new_stmts(db); database->version = get_database_version(database->version_filename, KN_CLIENT_DATABASE); migrate_schema_if_needed(database); free_variable(database_name); return database; } } else { return NULL; } }