Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Refactor query functions.
Vsevolod Stakhov committed 11 years ago
commit 42d144dd6c171fc146f2f4ef9493624d548692bf
parent 07a7468
11 files changed +372 -74
modified libpkg/pkg_jobs.c
@@ -728,7 +728,7 @@ pkg_jobs_add_universe(struct pkg_jobs *j, struct pkg *pkg,
				continue;

			/* Not found, search in the repos */
-
			it = pkgdb_find_shlib_provide(j->db, pkg_shlib_name(shlib), j->reponame);
+
			it = pkgdb_repo_shlib_provide(j->db, pkg_shlib_name(shlib), j->reponame);
			if (it != NULL) {
				rpkg = NULL;
				prhead = NULL;
@@ -998,7 +998,7 @@ pkg_jobs_try_remote_candidate(struct pkg_jobs *j, const char *pattern,
	const char *fuid;
	struct pkg_job_universe_item *unit;

-
	if ((it = pkgdb_rquery(j->db, pattern, m, j->reponame)) == NULL)
+
	if ((it = pkgdb_repo_query(j->db, pattern, m, j->reponame)) == NULL)
		return (EPKG_FATAL);

	qmsg = sbuf_new_auto();
@@ -1103,7 +1103,7 @@ pkg_jobs_find_remote_pkg(struct pkg_jobs *j, const char *pattern,
	if (j->type == PKG_JOBS_UPGRADE && (j->flags & PKG_FLAG_FORCE) == PKG_FLAG_FORCE)
		force = true;

-
	if ((it = pkgdb_rquery(j->db, pattern, m, j->reponame)) == NULL)
+
	if ((it = pkgdb_repo_query(j->db, pattern, m, j->reponame)) == NULL)
		rc = EPKG_FATAL;

	while (it != NULL && pkgdb_it_next(it, &p, flags) == EPKG_OK) {
@@ -1264,7 +1264,7 @@ get_remote_pkg(struct pkg_jobs *j, const char *uid, unsigned flag)
				PKG_LOAD_ANNOTATIONS|PKG_LOAD_CONFLICTS;
	}

-
	if ((it = pkgdb_rquery(j->db, uid, MATCH_EXACT, j->reponame)) == NULL)
+
	if ((it = pkgdb_repo_query(j->db, uid, MATCH_EXACT, j->reponame)) == NULL)
		return (NULL);

	if (pkgdb_it_next(it, &pkg, flag) != EPKG_OK)
@@ -1898,7 +1898,7 @@ pkg_jobs_check_remote_candidate(struct pkg_jobs *j, struct pkg *pkg)

	sqlite3_snprintf(sizeof(sqlbuf), sqlbuf, " WHERE manifestdigest=%Q", digest);

-
	it = pkgdb_rquery(j->db, sqlbuf, MATCH_CONDITION, j->reponame);
+
	it = pkgdb_repo_query(j->db, sqlbuf, MATCH_CONDITION, j->reponame);
	if (it != NULL) {
		/*
		 * If we have the same package in a remote repo, it is not an
modified libpkg/pkgdb.c
@@ -2397,7 +2397,7 @@ pkgdb_search_build_search_query(struct sbuf *sql, match_t match,
}

struct pkgdb_it *
-
pkgdb_search(struct pkgdb *db, const char *pattern, match_t match,
+
pkgdb_repo_search(struct pkgdb *db, const char *pattern, match_t match,
    pkgdb_field field, pkgdb_field sort, const char *reponame)
{
	sqlite3_stmt	*stmt = NULL;
modified libpkg/pkgdb_query.c
@@ -32,3 +32,351 @@
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

+
#include <assert.h>
+
#include <errno.h>
+
#include <regex.h>
+
#include <grp.h>
+
#include <libutil.h>
+
#include <stdlib.h>
+
#include <stdio.h>
+
#include <stdbool.h>
+
#include <string.h>
+
#include <unistd.h>
+
#include <signal.h>
+

+
#include <sqlite3.h>
+

+
#include "pkg.h"
+
#include "private/event.h"
+
#include "private/pkg.h"
+
#include "private/pkgdb.h"
+
#include "private/utils.h"
+

+
const char *
+
pkgdb_get_pattern_query(const char *pattern, match_t match)
+
{
+
	char		*checkorigin = NULL;
+
	char		*checkuid = NULL;
+
	const char	*comp = NULL;
+

+
	if (pattern != NULL) {
+
		checkuid = strchr(pattern, '~');
+
		if (checkuid == NULL)
+
			checkorigin = strchr(pattern, '/');
+
	}
+

+
	switch (match) {
+
	case MATCH_ALL:
+
		comp = "";
+
		break;
+
	case MATCH_EXACT:
+
		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))";
+
				else
+
					comp = " WHERE origin = ?1";
+
			} else {
+
				comp = " WHERE name = SPLIT_UID('name', ?1) AND "
+
						"origin = SPLIT_UID('origin', ?1)";
+
			}
+
		} 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))";
+
				else
+
					comp = " WHERE origin = ?1 COLLATE NOCASE";
+
			} else {
+
				comp = " WHERE name = SPLIT_UID('name', ?1) COLLATE NOCASE AND "
+
						"origin = SPLIT_UID('origin', ?1) COLLATE NOCASE";
+
			}
+
		}
+
		break;
+
	case MATCH_GLOB:
+
		if (checkuid == NULL) {
+
			if (checkorigin == NULL)
+
				comp = " WHERE name GLOB ?1 "
+
					"OR (name GLOB SPLIT_VERSION('name', ?1) AND "
+
					" version GLOB SPLIT_VERSION('version', ?1))";
+
			else
+
				comp = " WHERE origin GLOB ?1";
+
		} else {
+
			comp = " WHERE name = SPLIT_UID('name', ?1) AND "
+
					"origin = SPLIT_UID('origin', ?1)";
+
		}
+
		break;
+
	case MATCH_REGEX:
+
		if (checkuid == NULL) {
+
			if (checkorigin == NULL)
+
				comp = " WHERE name REGEXP ?1 "
+
				    "OR name || '-' || version REGEXP ?1";
+
			else
+
				comp = " WHERE origin REGEXP ?1";
+
		} else {
+
			comp = " WHERE name = SPLIT_UID('name', ?1) AND "
+
					"origin = SPLIT_UID('origin', ?1)";
+
		}
+
		break;
+
	case MATCH_CONDITION:
+
		comp = pattern;
+
		break;
+
	case MATCH_FTS:
+
		if (checkorigin == NULL)
+
			comp = " WHERE id IN (SELECT id FROM pkg_search WHERE name MATCH ?1)";
+
		else
+
			comp = " WHERE id IN (SELECT id FROM pkg_search WHERE origin MATCH ?1)";
+
		break;
+
	}
+

+
	return (comp);
+
}
+

+
static const char *
+
pkgdb_get_match_how(match_t match)
+
{
+
	const char	*how = NULL;
+

+
	switch (match) {
+
	case MATCH_ALL:
+
		how = NULL;
+
		break;
+
	case MATCH_EXACT:
+
		if (pkgdb_case_sensitive())
+
			how = "%s = ?1";
+
		else
+
			how = "%s = ?1 COLLATE NOCASE";
+
		break;
+
	case MATCH_GLOB:
+
		how = "%s GLOB ?1";
+
		break;
+
	case MATCH_REGEX:
+
		how = "%s REGEXP ?1";
+
		break;
+
	case MATCH_CONDITION:
+
		/* Should not be called by pkgdb_get_match_how(). */
+
		assert(0);
+
		break;
+
	case MATCH_FTS:
+
		how = "id IN (SELECT id FROM pkg_search WHERE %s MATCH ?1)";
+
		break;
+
	}
+

+
	return (how);
+
}
+

+
struct pkgdb_it *
+
pkgdb_query(struct pkgdb *db, const char *pattern, match_t match)
+
{
+
	char		 sql[BUFSIZ];
+
	sqlite3_stmt	*stmt;
+
	const char	*comp = NULL;
+

+
	assert(db != NULL);
+
	assert(match == MATCH_ALL || (pattern != NULL && pattern[0] != '\0'));
+

+
	comp = pkgdb_get_pattern_query(pattern, match);
+

+
	sqlite3_snprintf(sizeof(sql), sql,
+
			"SELECT id, origin, name, name || '~' || origin as uniqueid, "
+
				"version, comment, desc, "
+
				"message, arch, maintainer, www, "
+
				"prefix, flatsize, licenselogic, automatic, "
+
				"locked, time, manifestdigest "
+
			"FROM packages AS p%s "
+
			"ORDER BY p.name;", comp);
+

+
	pkg_debug(4, "Pkgdb: running '%s'", sql);
+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
+
		ERROR_SQLITE(db->sqlite, sql);
+
		return (NULL);
+
	}
+

+
	if (match != MATCH_ALL && match != MATCH_CONDITION)
+
		sqlite3_bind_text(stmt, 1, pattern, -1, SQLITE_TRANSIENT);
+

+
	return (pkgdb_it_new_sqlite(db, stmt, PKG_INSTALLED, PKGDB_IT_FLAG_ONCE));
+
}
+

+
struct pkgdb_it *
+
pkgdb_query_which(struct pkgdb *db, const char *path, bool glob)
+
{
+
	sqlite3_stmt	*stmt;
+
	char	sql[BUFSIZ];
+

+

+
	assert(db != NULL);
+
	sqlite3_snprintf(sizeof(sql), sql,
+
			"SELECT p.id, p.origin, p.name, p.name || '~' || p.origin as uniqueid, "
+
			"p.version, p.comment, p.desc, "
+
			"p.message, p.arch, p.maintainer, p.www, "
+
			"p.prefix, p.flatsize, p.time "
+
			"FROM packages AS p "
+
			"LEFT JOIN files AS f ON p.id = f.package_id "
+
			"WHERE f.path %s ?1 GROUP BY p.id;", glob ? "GLOB" : "=");
+

+
	pkg_debug(4, "Pkgdb: running '%s'", sql);
+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
+
		ERROR_SQLITE(db->sqlite, sql);
+
		return (NULL);
+
	}
+

+
	sqlite3_bind_text(stmt, 1, path, -1, SQLITE_TRANSIENT);
+

+
	return (pkgdb_it_new_sqlite(db, stmt, PKG_INSTALLED, PKGDB_IT_FLAG_ONCE));
+
}
+

+
struct pkgdb_it *
+
pkgdb_query_shlib_require(struct pkgdb *db, const char *shlib)
+
{
+
	sqlite3_stmt	*stmt;
+
	const char	 sql[] = ""
+
		"SELECT p.id, p.origin, p.name, p.name || '~' || p.origin as uniqueid, "
+
			"p.version, p.comment, p.desc, "
+
			"p.message, p.arch, p.maintainer, p.www, "
+
			"p.prefix, p.flatsize, p.time "
+
			"FROM packages AS p, pkg_shlibs_required AS ps, shlibs AS s "
+
			"WHERE p.id = ps.package_id "
+
				"AND ps.shlib_id = s.id "
+
				"AND s.name = ?1;";
+

+
	assert(db != NULL);
+

+
	pkg_debug(4, "Pkgdb: running '%s'", sql);
+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
+
		ERROR_SQLITE(db->sqlite, sql);
+
		return (NULL);
+
	}
+

+
	sqlite3_bind_text(stmt, 1, shlib, -1, SQLITE_TRANSIENT);
+

+
	return (pkgdb_it_new_sqlite(db, stmt, PKG_INSTALLED, PKGDB_IT_FLAG_ONCE));
+
}
+

+
struct pkgdb_it *
+
pkgdb_query_shlib_provide(struct pkgdb *db, const char *shlib)
+
{
+
	sqlite3_stmt	*stmt;
+
	const char	 sql[] = ""
+
		"SELECT p.id, p.origin, p.name, p.name || '~' || p.origin as uniqueid, "
+
			"p.version, p.comment, p.desc, "
+
			"p.message, p.arch, p.maintainer, p.www, "
+
			"p.prefix, p.flatsize, p.time "
+
			"FROM packages AS p, pkg_shlibs_provided AS ps, shlibs AS s "
+
			"WHERE p.id = ps.package_id "
+
				"AND ps.shlib_id = s.id "
+
				"AND s.name = ?1;";
+

+
	assert(db != NULL);
+

+
	pkg_debug(4, "Pkgdb: running '%s'", sql);
+
	if (sqlite3_prepare_v2(db->sqlite, sql, -1, &stmt, NULL) != SQLITE_OK) {
+
		ERROR_SQLITE(db->sqlite, sql);
+
		return (NULL);
+
	}
+

+
	sqlite3_bind_text(stmt, 1, shlib, -1, SQLITE_TRANSIENT);
+

+
	return (pkgdb_it_new_sqlite(db, stmt, PKG_INSTALLED, PKGDB_IT_FLAG_ONCE));
+
}
+

+

+
struct pkgdb_it *
+
pkgdb_repo_query(struct pkgdb *db, const char *pattern, match_t match,
+
    const char *repo)
+
{
+
	struct pkgdb_it *it;
+
	struct pkg_repo_it *rit;
+
	struct _pkg_repo_list_item *cur;
+

+
	it = pkgdb_it_new_repo(db);
+
	if (it == NULL)
+
		return (NULL);
+

+
	LL_FOREACH(db->repos, cur) {
+
		if (repo == NULL || strcasecmp(cur->repo->name, repo) == 0) {
+
			rit = cur->repo->ops->query(cur->repo, pattern, match);
+
			if (rit != NULL)
+
				pkgdb_it_repo_attach(it, rit);
+
		}
+
	}
+

+
	return (it);
+
}
+

+
struct pkgdb_it *
+
pkgdb_repo_shlib_require(struct pkgdb *db, const char *require, const char *repo)
+
{
+
	struct pkgdb_it *it;
+
	struct pkg_repo_it *rit;
+
	struct _pkg_repo_list_item *cur;
+

+
	it = pkgdb_it_new_repo(db);
+
	if (it == NULL)
+
		return (NULL);
+

+
	LL_FOREACH(db->repos, cur) {
+
		if (repo == NULL || strcasecmp(cur->repo->name, repo) == 0) {
+
			if (cur->repo->ops->shlib_required != NULL) {
+
				rit = cur->repo->ops->shlib_required(cur->repo, require);
+
				if (rit != NULL)
+
					pkgdb_it_repo_attach(it, rit);
+
			}
+
		}
+
	}
+

+
	return (it);
+
}
+

+
struct pkgdb_it *
+
pkgdb_repo_shlib_provide(struct pkgdb *db, const char *require, const char *repo)
+
{
+
	struct pkgdb_it *it;
+
	struct pkg_repo_it *rit;
+
	struct _pkg_repo_list_item *cur;
+

+
	it = pkgdb_it_new_repo(db);
+
	if (it == NULL)
+
		return (NULL);
+

+
	LL_FOREACH(db->repos, cur) {
+
		if (repo == NULL || strcasecmp(cur->repo->name, repo) == 0) {
+
			if (cur->repo->ops->shlib_required != NULL) {
+
				rit = cur->repo->ops->shlib_provided(cur->repo, require);
+
				if (rit != NULL)
+
					pkgdb_it_repo_attach(it, rit);
+
			}
+
		}
+
	}
+

+
	return (it);
+
}
+

+
struct pkgdb_it *
+
pkgdb_repo_search(struct pkgdb *db, const char *pattern, match_t match,
+
    pkgdb_field field, pkgdb_field sort, const char *repo)
+
{
+
	struct pkgdb_it *it;
+
	struct pkg_repo_it *rit;
+
	struct _pkg_repo_list_item *cur;
+

+
	it = pkgdb_it_new_repo(db);
+
	if (it == NULL)
+
		return (NULL);
+

+
	LL_FOREACH(db->repos, cur) {
+
		if (repo == NULL || strcasecmp(cur->repo->name, repo) == 0) {
+
			if (cur->repo->ops->search != NULL) {
+
				rit = cur->repo->ops->search(cur->repo, pattern, match,
+
					field, sort);
+
				if (rit != NULL)
+
					pkgdb_it_repo_attach(it, rit);
+
			}
+
		}
+
	}
+

+
	return (it);
+
}
modified libpkg/pkgdb_repo.c
@@ -55,7 +55,7 @@


struct pkgdb_it *
-
pkgdb_rquery(struct pkgdb *db, const char *pattern, match_t match,
+
pkgdb_repo_query(struct pkgdb *db, const char *pattern, match_t match,
    const char *repo)
{
	sqlite3_stmt	*stmt = NULL;
@@ -123,63 +123,7 @@ pkgdb_rquery(struct pkgdb *db, const char *pattern, match_t match,
}

struct pkgdb_it *
-
pkgdb_rquery_provide(struct pkgdb *db, const char *provide, const char *repo)
-
{
-
	sqlite3_stmt	*stmt;
-
	struct sbuf	*sql = NULL;
-
	const char	*reponame = NULL;
-
	int		 ret;
-
	const char	 basesql[] = ""
-
			"SELECT p.id, p.origin, p.name, p.version, p.comment, "
-
			"p.name || '~' || p.origin as uniqueid, "
-
			"p.prefix, p.desc, p.arch, p.maintainer, p.www, "
-
			"p.licenselogic, p.flatsize, p.pkgsize, "
-
			"p.cksum, p.manifestdigest, p.path AS repopath, '%1$s' AS dbname "
-
			"FROM '%1$s'.packages AS p, '%1$s'.pkg_provides AS pp, "
-
			"'%1$s'.provides AS pr "
-
			"WHERE p.id = pp.package_id "
-
			"AND pp.provide_id = pr.id "
-
			"AND pr.name = ?1;";
-

-
	assert(db != NULL);
-
	reponame = pkgdb_get_reponame(db, repo);
-

-
	sql = sbuf_new_auto();
-
	/*
-
	 * Working on multiple remote repositories
-
	 */
-
	if (reponame == NULL) {
-
		/* duplicate the query via UNION for all the attached
-
		 * databases */
-

-
		ret = pkgdb_sql_all_attached(db->sqlite, sql,
-
				basesql, " UNION ALL ");
-
		if (ret != EPKG_OK) {
-
			sbuf_delete(sql);
-
			return (NULL);
-
		}
-
	} else
-
		sbuf_printf(sql, basesql, reponame);
-

-
	sbuf_finish(sql);
-

-
	pkg_debug(4, "Pkgdb: running '%s'", sbuf_get(sql));
-
	ret = sqlite3_prepare_v2(db->sqlite, sbuf_get(sql), -1, &stmt, NULL);
-
	if (ret != SQLITE_OK) {
-
		ERROR_SQLITE(db->sqlite, sbuf_get(sql));
-
		sbuf_delete(sql);
-
		return (NULL);
-
	}
-

-
	sbuf_delete(sql);
-

-
	sqlite3_bind_text(stmt, 1, provide, -1, SQLITE_TRANSIENT);
-

-
	return (pkgdb_it_new_sqlite(db, stmt, PKG_REMOTE, PKGDB_IT_FLAG_ONCE));
-
}
-

-
struct pkgdb_it *
-
pkgdb_find_shlib_provide(struct pkgdb *db, const char *require, const char *repo)
+
pkgdb_repo_shlib_provide(struct pkgdb *db, const char *require, const char *repo)
{
	sqlite3_stmt	*stmt;
	struct sbuf	*sql = NULL;
@@ -234,7 +178,7 @@ pkgdb_find_shlib_provide(struct pkgdb *db, const char *require, const char *repo
}

struct pkgdb_it *
-
pkgdb_find_shlib_require(struct pkgdb *db, const char *provide, const char *repo)
+
pkgdb_repo_shlib_require(struct pkgdb *db, const char *provide, const char *repo)
{
	sqlite3_stmt	*stmt;
	struct sbuf	*sql = NULL;
modified libpkg/private/pkg.h
@@ -351,6 +351,12 @@ struct pkg_repo_ops {
	/* Query repo */
	struct pkg_repo_it * (*query)(struct pkg_repo *,
					const char *, match_t);
+
	struct pkg_repo_it * (*shlib_required)(struct pkg_repo *,
+
					const char *);
+
	struct pkg_repo_it * (*shlib_provided)(struct pkg_repo *,
+
					const char *);
+
	struct pkg_repo_it * (*search)(struct pkg_repo *, const char *, match_t,
+
					pkgdb_field field, pkgdb_field sort, const char *reponame);

	/* Fetch package from repo */
	int (*fetch_pkg)(struct pkg_repo *, struct pkg *);
modified libpkg/private/pkgdb.h
@@ -118,7 +118,7 @@ const char * pkgdb_get_pattern_query(const char *pattern, match_t match);
 * @param repo
 * @return
 */
-
struct pkgdb_it *pkgdb_find_shlib_require(struct pkgdb *db,
+
struct pkgdb_it *pkgdb_repo_shlib_require(struct pkgdb *db,
		const char *provide, const char *repo);
/**
 * Find requires for a specified provide in repos
@@ -127,7 +127,7 @@ struct pkgdb_it *pkgdb_find_shlib_require(struct pkgdb *db,
 * @param repo
 * @return
 */
-
struct pkgdb_it *pkgdb_find_shlib_provide(struct pkgdb *db,
+
struct pkgdb_it *pkgdb_repo_shlib_provide(struct pkgdb *db,
		const char *require, const char *repo);

/**
modified src/clean.c
@@ -255,7 +255,7 @@ exec_clean(int argc, char **argv)
		}

		if (sumlist == NULL && !sumloaded) {
-
			it = pkgdb_search(db, "*", MATCH_GLOB, FIELD_NAME, FIELD_NONE, NULL);
+
			it = pkgdb_repo_search(db, "*", MATCH_GLOB, FIELD_NAME, FIELD_NONE, NULL);
			while (pkgdb_it_next(it, &p, PKG_LOAD_BASIC) == EPKG_OK) {
				pkg_get(p, PKG_CKSUM, &sum);
				slen = MIN(strlen(sum), PKG_FILE_CKSUM_CHARS);
modified src/rquery.c
@@ -232,7 +232,7 @@ exec_rquery(int argc, char **argv)
		const char *condition_sql = NULL;
		if (match == MATCH_CONDITION && sqlcond)
			condition_sql = sbuf_data(sqlcond);
-
		if ((it = pkgdb_rquery(db, condition_sql, match, reponame)) == NULL)
+
		if ((it = pkgdb_repo_query(db, condition_sql, match, reponame)) == NULL)
			return (EX_IOERR);

		while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK) {
@@ -250,7 +250,7 @@ exec_rquery(int argc, char **argv)
		for (i = (index_output ? 0 : 1); i < argc; i++) {
			pkgname = argv[i];

-
			if ((it = pkgdb_rquery(db, pkgname, match, reponame)) == NULL)
+
			if ((it = pkgdb_repo_query(db, pkgname, match, reponame)) == NULL)
				return (EX_IOERR);

			while ((ret = pkgdb_it_next(it, &pkg, query_flags)) == EPKG_OK) {
modified src/search.c
@@ -414,7 +414,7 @@ exec_search(int argc, char **argv)
	if (pkgdb_open_all(&db, PKGDB_REMOTE, reponame) != EPKG_OK)
		return (EX_IOERR);

-
	if ((it = pkgdb_search(db, pattern, match, search, search,
+
	if ((it = pkgdb_repo_search(db, pattern, match, search, search,
	    reponame)) == NULL) {
		pkgdb_close(db);
		return (EX_IOERR);
modified src/shlib.c
@@ -79,7 +79,7 @@ pkgs_providing_lib(struct pkgdb *db, const char *libname)
	int		 ret = EPKG_OK; 
	int		 count = 0;

-
	if ((it = pkgdb_query_shlib_provided(db, libname)) == NULL) {
+
	if ((it = pkgdb_query_shlib_provide(db, libname)) == NULL) {
		return (EPKG_FATAL);
	}

@@ -113,7 +113,7 @@ pkgs_requiring_lib(struct pkgdb *db, const char *libname)
	int		 ret = EPKG_OK; 
	int		 count = 0;

-
	if ((it = pkgdb_query_shlib_required(db, libname)) == NULL) {
+
	if ((it = pkgdb_query_shlib_require(db, libname)) == NULL) {
		return (EPKG_FATAL);
	}

modified src/version.c
@@ -476,7 +476,7 @@ do_source_remote(unsigned int opt, char limchar, char *pattern, match_t match,
		    strcmp(origin, matchorigin) != 0)
			continue;

-
		it_remote = pkgdb_rquery(db, origin, MATCH_EXACT, reponame);
+
		it_remote = pkgdb_repo_query(db, origin, MATCH_EXACT, reponame);
		if (it_remote == NULL) {
			retcode = EX_IOERR;
			goto cleanup;