Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add a trivial pkgdb_register_pkg function
Baptiste Daroussin committed 15 years ago
commit d4769e78264e8c45e27ab73b5c10258ef195f94d
parent 7231e40
2 files changed +72 -0
modified libpkg/pkg.h
@@ -53,6 +53,8 @@ const char * pkg_conflict_name(struct pkg_conflict *);
int pkgdb_open(struct pkgdb **);
void pkgdb_close(struct pkgdb *);

+
int pkgdb_register_pkg(struct pkgdb *, struct pkg *);
+

struct pkgdb_it * pkgdb_query(struct pkgdb *, const char *, match_t);
struct pkgdb_it * pkgdb_query_which(struct pkgdb *, const char *);
struct pkgdb_it * pkgdb_query_dep(struct pkgdb *, const char *);
modified libpkg/pkgdb.c
@@ -585,3 +585,73 @@ pkgdb_errnum(struct pkgdb *db)
{
	return (db->errnum);
}
+

+
int
+
pkgdb_register_pkg(struct pkgdb *db, struct pkg *pkg)
+
{
+
	struct pkg **deps;
+
	struct pkg_file **files;
+
	sqlite3_stmt *stmt_pkg;
+
	sqlite3_stmt *stmt_dep;
+
	sqlite3_stmt *stmt_conflicts;
+
	sqlite3_stmt *stmt_file;
+
	int i;
+

+
	sqlite3_exec(db->sqlite, "BEGIN TRANSACTION;", NULL, NULL, NULL);
+

+
	sqlite3_prepare(db->sqlite, "INSERT INTO packages (origin, name, version, comment, desc)"
+
			"VALUES (?1, ?2, ?3, ?4, ?5);",
+
			-1, &stmt_pkg, NULL);
+

+
	sqlite3_prepare(db->sqlite, "INSERT INTO deps (origin, name, version, package_id)"
+
			"VALUES (?1, ?2, ?3, ?4);",
+
			-1, &stmt_dep, NULL);
+

+
	sqlite3_prepare(db->sqlite, "INSERT INTO conflicts (name, package_id)"
+
			"VALUES (?1, ?2, ?3, ?4);",
+
			-1, &stmt_conflicts, NULL);
+

+
	sqlite3_prepare(db->sqlite, "INSERT INTO files (path, md5, package_id)"
+
			"VALUES (?1, ?2, ?3);",
+
			-1, &stmt_file, NULL);
+

+
	sqlite3_bind_text(stmt_pkg, 1, pkg_origin(pkg), -1, SQLITE_STATIC);
+
	sqlite3_bind_text(stmt_pkg, 2, pkg_name(pkg), -1, SQLITE_STATIC);
+
	sqlite3_bind_text(stmt_pkg, 3, pkg_version(pkg), -1, SQLITE_STATIC);
+
	sqlite3_bind_text(stmt_pkg, 4, pkg_comment(pkg), -1, SQLITE_STATIC);
+
	sqlite3_bind_text(stmt_pkg, 5, pkg_desc(pkg), -1, SQLITE_STATIC);
+

+
	sqlite3_step(stmt_pkg);
+

+
	deps = pkg_deps(pkg);
+

+
	for (i = 0; deps[i] != NULL; i++) {
+
		sqlite3_bind_text(stmt_dep, 1, pkg_origin(deps[i]), -1, SQLITE_STATIC);
+
		sqlite3_bind_text(stmt_dep, 2, pkg_name(deps[i]), -1, SQLITE_STATIC);
+
		sqlite3_bind_text(stmt_dep, 3, pkg_version(deps[i]), -1, SQLITE_STATIC);
+
		sqlite3_bind_text(stmt_dep, 4, pkg_comment(deps[i]), -1, SQLITE_STATIC);
+
		sqlite3_bind_text(stmt_dep, 5, pkg_origin(pkg), -1, SQLITE_STATIC);
+

+
		sqlite3_step(stmt_dep);
+
		sqlite3_reset(stmt_dep);
+
	}
+

+
	files = pkg_files(pkg);
+
	for (i = 0; files[i] != NULL; i++) {
+
		sqlite3_bind_text(stmt_file, 1, pkg_file_path(files[i]), -1, SQLITE_STATIC);
+
		sqlite3_bind_text(stmt_file, 2, pkg_file_md5(files[i]), -1, SQLITE_STATIC);
+
		sqlite3_bind_text(stmt_file, 3, pkg_origin(pkg), -1, SQLITE_STATIC);
+

+
		sqlite3_step(stmt_file);
+
		sqlite3_reset(stmt_file);
+
	}
+

+
	sqlite3_finalize(stmt_pkg);
+
	sqlite3_finalize(stmt_dep);
+
	sqlite3_finalize(stmt_conflicts);
+
	sqlite3_finalize(stmt_file);
+

+
	sqlite3_exec(db->sqlite, "COMMIT;", NULL, NULL, NULL);
+
	
+
	return (0);
+
}