Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
sql: generalize the use of prepare_sql()
Baptiste Daroussin committed 11 months ago
commit ea2a04600fd2a340d3f7be15a50c343d42fb29ed
parent 15b97ac
5 files changed +44 -73
modified libpkg/pkgdb.c
@@ -1187,20 +1187,20 @@ pkgdb_close(struct pkgdb *db)
static int
run_transaction(sqlite3 *sqlite, const char *query, const char *savepoint)
{
-
	int		 ret;
+
	int		 ret = SQLITE_OK;
	sqlite3_stmt	*stmt;
	char *sql = NULL;

	assert(sqlite != NULL);

	xasprintf(&sql, "%s %s", query, savepoint != NULL ? savepoint : "");
-
	ret = sqlite3_prepare_v2(sqlite, sql, strlen(sql) + 1, &stmt, NULL);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
+
		return (EPKG_FATAL);
	pkgdb_debug(4, stmt);

-
	if (ret == SQLITE_OK) {
-
		PKGDB_SQLITE_RETRY_ON_BUSY(ret)
-
			ret = sqlite3_step(stmt);
-
	}
+
	PKGDB_SQLITE_RETRY_ON_BUSY(ret)
+
		ret = sqlite3_step(stmt);

	if (ret != SQLITE_OK && ret != SQLITE_DONE) {
		ERROR_STMT_SQLITE(sqlite, stmt);
modified libpkg/pkgdb_iterator.c
@@ -125,10 +125,9 @@ load_val(sqlite3 *db, struct pkg *pkg, const char *sql, unsigned flags,
	if (pkg->flags & flags)
		return (EPKG_OK);

-
	if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db, sql);
+
	stmt = prepare_sql(db, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
@@ -162,10 +161,9 @@ load_tag_val(sqlite3 *db, struct pkg *pkg, const char *sql, unsigned flags,
	if (pkg->flags & flags)
		return (EPKG_OK);

-
	if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db, sql);
+
	stmt = prepare_sql(db, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
@@ -231,12 +229,9 @@ pkgdb_load_deps(sqlite3 *sqlite, struct pkg *pkg)
		return (EPKG_OK);


-
	ret = sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL);
-

-
	if (ret != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
@@ -268,9 +263,8 @@ pkgdb_load_deps(sqlite3 *sqlite, struct pkg *pkg)

				if (clause) {
					xasprintf(&formula_sql, "%s%s", formula_preamble, clause);
-
					ret = sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL);
-
					if (ret != SQLITE_OK) {
-
						ERROR_SQLITE(sqlite, sql);
+
					stmt = prepare_sql(sqlite, formula_sql);
+
					if (stmt == NULL) {
						free(clause);
						free(formula_sql);
						pkg_deps_formula_free(f);
@@ -289,9 +283,12 @@ pkgdb_load_deps(sqlite3 *sqlite, struct pkg *pkg)
						options_match = true;

						if (fit->options) {
-
							if (sqlite3_prepare_v2(sqlite, options_sql, -1,
-
									&opt_stmt, NULL) != SQLITE_OK) {
-
								ERROR_SQLITE(sqlite, options_sql);
+
							opt_stmt = prepare_sql(sqlite, options_sql);
+
							if (opt_stmt == NULL) {
+
								sqlite3_finalize(stmt);
+
								free(clause);
+
								free(formula_sql);
+
								pkg_deps_formula_free(f);
								return (EPKG_FATAL);
							}
							pkgdb_debug(4, opt_stmt);
@@ -358,13 +355,9 @@ pkgdb_load_rdeps(sqlite3 *sqlite, struct pkg *pkg)
	if (pkg->flags & PKG_LOAD_RDEPS)
		return (EPKG_OK);

-

-
	ret = sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL);
-

-
	if (ret != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_text(stmt, 1, pkg->uid, -1, SQLITE_STATIC);
	pkgdb_debug(4, stmt);
@@ -411,10 +404,9 @@ pkgdb_load_files(sqlite3 *sqlite, struct pkg *pkg)
	if (pkg->flags & PKG_LOAD_FILES)
		return (EPKG_OK);

-
	if (sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
@@ -425,10 +417,9 @@ pkgdb_load_files(sqlite3 *sqlite, struct pkg *pkg)
	}
	sqlite3_finalize(stmt);

-
	if (sqlite3_prepare_v2(sqlite, sql2, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql2);
+
	stmt = prepare_sql(sqlite, sql2);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
@@ -468,10 +459,9 @@ pkgdb_load_dirs(sqlite3 *sqlite, struct pkg *pkg)
	if (pkg->flags & PKG_LOAD_DIRS)
		return (EPKG_OK);

-
	if (sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
@@ -643,10 +633,9 @@ pkgdb_load_lua_scripts(sqlite3 *sqlite, struct pkg *pkg)
	if (pkg->flags & PKG_LOAD_LUA_SCRIPTS)
		return (EPKG_OK);

-
	if (sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);

@@ -685,10 +674,9 @@ pkgdb_load_scripts(sqlite3 *sqlite, struct pkg *pkg)
	if (pkg->flags & PKG_LOAD_SCRIPTS)
		return (EPKG_OK);

-
	if (sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	stmt = prepare_sql(sqlite, sql);
+
	if (stmt == NULL)
		return (EPKG_FATAL);
-
	}

	sqlite3_bind_int64(stmt, 1, pkg->id);
	pkgdb_debug(4, stmt);
modified libpkg/pkgdb_query.c
@@ -174,10 +174,8 @@ pkgdb_query_cond(struct pkgdb *db, const char *cond, const char *pattern, match_
				" ORDER BY p.name", comp);
	}

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
		return (NULL);
-
	}

	if (match != MATCH_ALL)
		sqlite3_bind_text(stmt, 1, pattern, -1, SQLITE_TRANSIENT);
@@ -207,9 +205,8 @@ pkgdb_file_exists(struct pkgdb *db, const char *path)
	sqlite3_snprintf(sizeof(sql), sql,
	    "select path from files where path = ?1;");

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
-
	}
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
+
		return (ret);

	sqlite3_bind_text(stmt, 1, path, -1, SQLITE_TRANSIENT);
	pkgdb_debug(4, stmt);
@@ -242,10 +239,8 @@ pkgdb_query_which(struct pkgdb *db, const char *path, bool glob)
			"LEFT JOIN files AS f ON p.id = f.package_id "
			"WHERE f.path %s ?1 GROUP BY p.id;", glob ? "GLOB" : "=");

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
		return (NULL);
-
	}

	sqlite3_bind_text(stmt, 1, path, -1, SQLITE_TRANSIENT);
	pkgdb_debug(4, stmt);
@@ -269,10 +264,8 @@ pkgdb_query_shlib_require(struct pkgdb *db, const char *shlib)

	assert(db != NULL);

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
		return (NULL);
-
	}

	sqlite3_bind_text(stmt, 1, shlib, -1, SQLITE_TRANSIENT);
	pkgdb_debug(4, stmt);
@@ -296,10 +289,8 @@ pkgdb_query_shlib_provide(struct pkgdb *db, const char *shlib)

	assert(db != NULL);

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
		return (NULL);
-
	}

	sqlite3_bind_text(stmt, 1, shlib, -1, SQLITE_TRANSIENT);
	pkgdb_debug(4, stmt);
@@ -323,10 +314,8 @@ pkgdb_query_require(struct pkgdb *db, const char *req)

	assert(db != NULL);

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
		return (NULL);
-
	}

	sqlite3_bind_text(stmt, 1, req, -1, SQLITE_TRANSIENT);
	pkgdb_debug(4, stmt);
@@ -350,10 +339,8 @@ pkgdb_query_provide(struct pkgdb *db, const char *req)

	assert(db != NULL);

-
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sql);
+
	if ((stmt = prepare_sql(db->sqlite, sql)) == NULL)
		return (NULL);
-
	}

	sqlite3_bind_text(stmt, 1, req, -1, SQLITE_TRANSIENT);
	pkgdb_debug(4, stmt);
modified libpkg/repo/binary/common.c
@@ -184,11 +184,9 @@ pkg_repo_binary_init_prstatements(sqlite3 *sqlite)
	last = PRSTMT_LAST;

	for (i = 0; i < last; i++) {
-
		ret = sqlite3_prepare_v2(sqlite, SQL(i), -1, &STMT(i), NULL);
-
		if (ret != SQLITE_OK) {
-
			ERROR_SQLITE(sqlite, SQL(i));
+
		STMT(i) = prepare_sql(sqlite, SQL(i));
+
		if (STMT(i) == NULL)
			return (EPKG_FATAL);
-
		}
	}

	return (EPKG_OK);
modified libpkg/repo/binary/init.c
@@ -1,4 +1,4 @@
-
/* 
+
/*
 * Copyright (c) 2014, Vsevolod Stakhov
 * Copyright (c) 2024, Baptiste Daroussin
 *
@@ -57,10 +57,8 @@ pkg_repo_binary_get_user_version(sqlite3 *sqlite, int *reposcver)
	int retcode;
	const char *sql = "PRAGMA user_version;";

-
	if (sqlite3_prepare_v2(sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
-
		ERROR_SQLITE(sqlite, sql);
+
	if ((stmt = prepare_sql(sqlite, sql)) == NULL)
		return (EPKG_FATAL);
-
	}

	if (sqlite3_step(stmt) == SQLITE_ROW) {
		*reposcver = sqlite3_column_int64(stmt, 0);