Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Add PKGGT and PKGLT keyword to sqlite to that we can query directly with version comparison
Baptiste Daroussin committed 15 years ago
commit 15fc803a57fe0b63fb52b51728d41ea71388da26
parent 6fabac894c00820edaf3ddaf90f5c6ae9bc717b7
2 files changed +36 -0
modified libpkg/pkg.h
@@ -148,6 +148,10 @@ typedef enum {
	EPKG_NOT_NAME
} pkg_error_t;

+
#define PKG_LT -1
+
#define PKG_EQ 0
+
#define PKG_GT 1
+

/**
 * Allocate a new pkg.
 * Allocated pkg must be deallocated by pkg_free().
modified libpkg/pkgdb.c
@@ -23,6 +23,8 @@
static struct pkgdb_it * pkgdb_it_new(struct pkgdb *, sqlite3_stmt *);
static void pkgdb_regex(sqlite3_context *, int, sqlite3_value **, int);
static void pkgdb_regex_basic(sqlite3_context *, int, sqlite3_value **);
+
static void pkgdb_pkglt(sqlite3_context *, int, sqlite3_value **);
+
static void pkgdb_pkggt(sqlite3_context *, int, sqlite3_value **);
static void pkgdb_regex_extended(sqlite3_context *, int, sqlite3_value **);
static void pkgdb_regex_delete(void *);
static int get_pragma(sqlite3 *, const char *, int64_t *);
@@ -73,6 +75,32 @@ pkgdb_regex_basic(sqlite3_context *ctx, int argc, sqlite3_value **argv)
}

static void
+
pkgdb_pkgcmp(sqlite3_context *ctx, int argc, sqlite3_value **argv, int sign)
+
{
+
	const unsigned char *version1 = NULL;
+
	const unsigned char *version2 = NULL;
+
	if (argc != 2 || (version1 = sqlite3_value_text(argv[0])) == NULL
+
			|| (version2 = sqlite3_value_text(argv[1])) == NULL) {
+
		sqlite3_result_error(ctx, "Invalid comparison\n", -1);
+
		return;
+
	}
+

+
	sqlite3_result_int(ctx, (pkg_version_cmp(version1, version2) == sign));
+
}
+

+
static void
+
pkgdb_pkglt(sqlite3_context *ctx, int argc, sqlite3_value **argv)
+
{
+
	pkgdb_pkgcmp(ctx, argc, argv, PKG_LT);
+
}
+

+
static void
+
pkgdb_pkggt(sqlite3_context *ctx, int argc, sqlite3_value **argv)
+
{
+
	pkgdb_pkgcmp(ctx, argc, argv, PKG_GT);
+
}
+

+
static void
pkgdb_regex_extended(sqlite3_context *ctx, int argc, sqlite3_value **argv)
{
	pkgdb_regex(ctx, argc, argv, REG_EXTENDED);
@@ -226,6 +254,10 @@ pkgdb_open(struct pkgdb **db)
							pkgdb_regex_basic, NULL, NULL);
	sqlite3_create_function((*db)->sqlite, "eregexp", 2, SQLITE_ANY, NULL,
							pkgdb_regex_extended, NULL, NULL);
+
	sqlite3_create_function((*db)->sqlite, "pkglt", 2, SQLITE_ANY, NULL,
+
			pkgdb_pkglt, NULL, NULL);
+
	sqlite3_create_function((*db)->sqlite, "pkggt", 2, SQLITE_ANY, NULL,
+
			pkgdb_pkggt, NULL, NULL);

	/* 
	 * allow forign key option which will allow to have clean support for