Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
pkgdb: eliminate custom sqlite3 function "split_version"
Baptiste Daroussin committed 3 years ago
commit 905ac5caa680b4cc359a4f904331c3adbd70be3f
parent 8451ca0
3 files changed +5 -52
modified libpkg/pkgdb.c
@@ -156,47 +156,6 @@ pkgdb_regex(sqlite3_context *ctx, int argc, sqlite3_value **argv)
	sqlite3_result_int(ctx, (ret != REG_NOMATCH));
}

-
static void
-
pkgdb_split_common(sqlite3_context *ctx, int argc, sqlite3_value **argv,
-
    char delim, const char *first, const char *second)
-
{
-
	const unsigned char *what = NULL;
-
	const unsigned char *data;
-
	const unsigned char *pos;
-

-
	if (argc != 2 || (what = sqlite3_value_text(argv[0])) == NULL ||
-
	    (data = sqlite3_value_text(argv[1])) == NULL) {
-
		sqlite3_result_error(ctx, "SQL function split_*() called "
-
		    "with invalid arguments.\n", -1);
-
		return;
-
	}
-

-
	if (strcasecmp(what, first) == 0) {
-
		pos = strrchr(data, delim);
-
		if (pos != NULL)
-
			sqlite3_result_text(ctx, data, (pos - data), NULL);
-
		else
-
			sqlite3_result_text(ctx, data, -1, NULL);
-
	}
-
	else if (strcasecmp(what, second) == 0) {
-
		pos = strrchr(data, delim);
-
		if (pos != NULL)
-
			sqlite3_result_text(ctx, pos + 1, -1, NULL);
-
		else
-
			sqlite3_result_text(ctx, data, -1, NULL);
-
	}
-
	else {
-
		sqlite3_result_error(ctx, "SQL function split_*() called "
-
		    "with invalid arguments.\n", -1);
-
	}
-
}
-

-
void
-
pkgdb_split_version(sqlite3_context *ctx, int argc, sqlite3_value **argv)
-
{
-
	pkgdb_split_common(ctx, argc, argv, '-', "name", "version");
-
}
-

void
pkgdb_regex_delete(void *p)
{
@@ -2706,8 +2665,6 @@ pkgdb_sqlcmd_init(sqlite3 *db, __unused const char **err,
	    pkgdb_now, NULL, NULL);
	sqlite3_create_function(db, "regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, NULL,
	    pkgdb_regex, NULL, NULL);
-
	sqlite3_create_function(db, "split_version", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, NULL,
-
	    pkgdb_split_version, NULL, NULL);
	sqlite3_create_function(db, "vercmp", 3, SQLITE_ANY|SQLITE_DETERMINISTIC, NULL,
	    pkgdb_vercmp, NULL, NULL);

modified libpkg/pkgdb_query.c
@@ -79,9 +79,7 @@ pkgdb_get_pattern_query(const char *pattern, match_t match)
		if (pkgdb_case_sensitive()) {
			if (checkuid == NULL) {
				if (checkorigin == NULL)
-
					comp = " WHERE (name = ?1 "
-
					    "OR (name = SPLIT_VERSION('name', ?1) AND "
-
					    " version = SPLIT_VERSION('version', ?1)))";
+
					comp = " WHERE (name = ?1 OR name || '-' || version = ?1)";
				else
					comp = " WHERE origin = ?1";
			} else {
@@ -90,9 +88,8 @@ pkgdb_get_pattern_query(const char *pattern, match_t match)
		} else {
			if (checkuid == NULL) {
				if (checkorigin == NULL)
-
					comp = " WHERE (name = ?1 COLLATE NOCASE "
-
							"OR (name = SPLIT_VERSION('name', ?1) COLLATE NOCASE AND "
-
							" version = SPLIT_VERSION('version', ?1)))";
+
					comp = " WHERE (name = ?1 COLLATE NOCASE OR "
+
					"name || '-' || version = ?1 COLLATE NOCASE)";
				else
					comp = " WHERE origin = ?1 COLLATE NOCASE";
			} else {
modified libpkg/repo/binary/query.c
@@ -123,8 +123,6 @@ pkg_repo_binary_query(struct pkg_repo *repo, const char *cond, const char *patte
		xasprintf(&sql, basesql, repo->name, comp,
		    comp[0] != '\0' ? "AND (" : "WHERE (", cond + 7, ")");

-
	pkg_debug(4, "Pkgdb: running '%s' query for %s", sql,
-
	     pattern == NULL ? "all": pattern);
	stmt = prepare_sql(sqlite, sql);
	free(sql);
	if (stmt == NULL)
@@ -132,6 +130,7 @@ pkg_repo_binary_query(struct pkg_repo *repo, const char *cond, const char *patte

	if (match != MATCH_ALL)
		sqlite3_bind_text(stmt, 1, pattern, -1, SQLITE_TRANSIENT);
+
	pkg_debug(4, "Pkgdb: running '%s'", sqlite3_expanded_sql(stmt));

	return (pkg_repo_binary_it_new(repo, stmt, PKGDB_IT_FLAG_ONCE));
}
@@ -369,13 +368,13 @@ pkg_repo_binary_search(struct pkg_repo *repo, const char *pattern, match_t match
	fprintf(sql->fp, "%s", ";");
	sqlcmd = xstring_get(sql);

-
	pkg_debug(4, "Pkgdb: running '%s'", sqlcmd);
	stmt = prepare_sql(sqlite, sqlcmd);
	free(sqlcmd);
	if (stmt == NULL)
		return (NULL);

	sqlite3_bind_text(stmt, 1, pattern, -1, SQLITE_TRANSIENT);
+
	pkg_debug(4, "Pkgdb: running '%s'", sqlite3_expanded_sql(stmt));

	return (pkg_repo_binary_it_new(repo, stmt, PKGDB_IT_FLAG_ONCE));
}