Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Avoid deps full scan when loading dependencies.
Vsevolod Stakhov committed 11 years ago
commit cf47e2c24af23c8f278d9c502fe2923a42f23d33
parent 10d0005
1 file changed +11 -7
modified libpkg/pkgdb.c
@@ -1847,19 +1847,23 @@ pkgdb_load_rdeps(struct pkgdb *db, struct pkg *pkg)
{
	sqlite3_stmt	*stmt = NULL;
	int		 ret;
-
	const char	*uniqueid;
+
	const char	*origin;
	const char	*reponame = NULL;
	char		 sql[BUFSIZ];
	const char	*mainsql = ""
		"SELECT p.name, p.origin, p.version, p.locked "
-
		"FROM main.packages AS p, main.deps AS d "
+
		"FROM main.deps AS d "
+
		"LEFT JOIN main.packages AS p ON p.origin = d.origin "
		"WHERE p.id = d.package_id "
-
			"AND d.name || '~' || d.origin = ?1;";
+
		"AND p.name = d.name "
+
		"AND d.origin = ?1;";
	const char	*reposql = ""
		"SELECT p.name, p.origin, p.version, 0 "
-
		"FROM %Q.packages AS p, %Q.deps AS d "
+
		"FROM %Q.deps AS d "
+
		"LEFT JOIN %Q.packages AS p ON p.origin = d.origin "
		"WHERE p.id = d.package_id "
-
			"AND d.name || '~' || d.origin = ?1;";
+
		"AND p.name = d.name "
+
		"AND d.origin = ?1;";

	assert(db != NULL && pkg != NULL);

@@ -1882,8 +1886,8 @@ pkgdb_load_rdeps(struct pkgdb *db, struct pkg *pkg)
		return (EPKG_FATAL);
	}

-
	pkg_get(pkg, PKG_UNIQUEID, &uniqueid);
-
	sqlite3_bind_text(stmt, 1, uniqueid, -1, SQLITE_STATIC);
+
	pkg_get(pkg, PKG_ORIGIN, &origin);
+
	sqlite3_bind_text(stmt, 1, origin, -1, SQLITE_STATIC);

	while ((ret = sqlite3_step(stmt)) == SQLITE_ROW) {
		pkg_addrdep(pkg, sqlite3_column_text(stmt, 0),