[yum-git] 2 commits - db.c db.h sqlitecache.c
Seth Vidal
skvidal at linux.duke.edu
Wed Sep 10 20:28:43 UTC 2008
db.c | 173 +++++++++++++++++++++++++++++++++-------------------------
db.h | 3 +
sqlitecache.c | 12 +++-
3 files changed, 114 insertions(+), 74 deletions(-)
New commits:
commit 90e97a9c6cd8715b977af5c213d18c6f249e0f08
Author: Seth Vidal <skvidal at fedoraproject.org>
Date: Wed Sep 10 16:27:37 2008 -0400
commit patches from Ville Skyttä to make indexes after the data has been
inserted. Closed rh bug 461403
diff --git a/db.c b/db.c
index d2b51d6..a6af904 100644
--- a/db.c
+++ b/db.c
@@ -349,24 +349,6 @@ yum_db_create_primary_tables (sqlite3 *db, GError **err)
return;
}
- sql = "CREATE INDEX packagename ON packages (name)";
- rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
- if (rc != SQLITE_OK) {
- g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create packagename index: %s",
- sqlite3_errmsg (db));
- return;
- }
-
- sql = "CREATE INDEX packageId ON packages (pkgId)";
- rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
- if (rc != SQLITE_OK) {
- g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create packageId index: %s",
- sqlite3_errmsg (db));
- return;
- }
-
sql =
"CREATE TABLE files ("
" name TEXT,"
@@ -380,15 +362,6 @@ yum_db_create_primary_tables (sqlite3 *db, GError **err)
return;
}
- sql = "CREATE INDEX filenames ON files (name)";
- rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
- if (rc != SQLITE_OK) {
- g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create filenames index: %s",
- sqlite3_errmsg (db));
- return;
- }
-
sql =
"CREATE TABLE %s ("
" name TEXT,"
@@ -401,9 +374,6 @@ yum_db_create_primary_tables (sqlite3 *db, GError **err)
const char *deps[] = { "requires", "provides", "conflicts", "obsoletes", NULL };
int i;
- const char *pkgindexsql = "CREATE INDEX pkg%s on %s (pkgKey)";
- const char *nameindexsql = "CREATE INDEX %sname ON %s (name)";
-
for (i = 0; deps[i]; i++) {
const char *prereq;
char *query;
@@ -423,6 +393,68 @@ yum_db_create_primary_tables (sqlite3 *db, GError **err)
deps[i], sqlite3_errmsg (db));
return;
}
+ }
+
+ sql =
+ "CREATE TRIGGER removals AFTER DELETE ON packages"
+ " BEGIN"
+ " DELETE FROM files WHERE pkgKey = old.pkgKey;"
+ " DELETE FROM requires WHERE pkgKey = old.pkgKey;"
+ " DELETE FROM provides WHERE pkgKey = old.pkgKey;"
+ " DELETE FROM conflicts WHERE pkgKey = old.pkgKey;"
+ " DELETE FROM obsoletes WHERE pkgKey = old.pkgKey;"
+ " END;";
+
+ rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
+ if (rc != SQLITE_OK) {
+ g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
+ "Can not create removals trigger: %s",
+ sqlite3_errmsg (db));
+ return;
+ }
+}
+
+void
+yum_db_index_primary_tables (sqlite3 *db, GError **err)
+{
+ int rc;
+ const char *sql;
+
+ sql = "CREATE INDEX IF NOT EXISTS packagename ON packages (name)";
+ rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
+ if (rc != SQLITE_OK) {
+ g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
+ "Can not create packagename index: %s",
+ sqlite3_errmsg (db));
+ return;
+ }
+
+ sql = "CREATE INDEX IF NOT EXISTS packageId ON packages (pkgId)";
+ rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
+ if (rc != SQLITE_OK) {
+ g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
+ "Can not create packageId index: %s",
+ sqlite3_errmsg (db));
+ return;
+ }
+
+ sql = "CREATE INDEX IF NOT EXISTS filenames ON files (name)";
+ rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
+ if (rc != SQLITE_OK) {
+ g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
+ "Can not create filenames index: %s",
+ sqlite3_errmsg (db));
+ return;
+ }
+
+ const char *deps[] = { "requires", "provides", "conflicts", "obsoletes", NULL };
+ int i;
+
+ const char *pkgindexsql = "CREATE INDEX IF NOT EXISTS pkg%s on %s (pkgKey)";
+ const char *nameindexsql = "CREATE INDEX IF NOT EXISTS %sname ON %s (name)";
+
+ for (i = 0; deps[i]; i++) {
+ char *query;
query = g_strdup_printf(pkgindexsql, deps[i], deps[i]);
rc = sqlite3_exec (db, query, NULL, NULL, NULL);
@@ -445,25 +477,6 @@ yum_db_create_primary_tables (sqlite3 *db, GError **err)
return;
}
}
-
- }
-
- sql =
- "CREATE TRIGGER removals AFTER DELETE ON packages"
- " BEGIN"
- " DELETE FROM files WHERE pkgKey = old.pkgKey;"
- " DELETE FROM requires WHERE pkgKey = old.pkgKey;"
- " DELETE FROM provides WHERE pkgKey = old.pkgKey;"
- " DELETE FROM conflicts WHERE pkgKey = old.pkgKey;"
- " DELETE FROM obsoletes WHERE pkgKey = old.pkgKey;"
- " END;";
-
- rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
- if (rc != SQLITE_OK) {
- g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create removals trigger: %s",
- sqlite3_errmsg (db));
- return;
}
}
@@ -677,43 +690,50 @@ yum_db_create_filelist_tables (sqlite3 *db, GError **err)
return;
}
- sql = "CREATE INDEX keyfile ON filelist (pkgKey)";
+ sql =
+ "CREATE TRIGGER remove_filelist AFTER DELETE ON packages"
+ " BEGIN"
+ " DELETE FROM filelist WHERE pkgKey = old.pkgKey;"
+ " END;";
+
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create keyfile index: %s",
+ "Can not create remove_filelist trigger: %s",
sqlite3_errmsg (db));
return;
}
+}
- sql = "CREATE INDEX pkgId ON packages (pkgId)";
+void
+yum_db_index_filelist_tables (sqlite3 *db, GError **err)
+{
+ int rc;
+ const char *sql;
+
+ sql = "CREATE INDEX IF NOT EXISTS keyfile ON filelist (pkgKey)";
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create pkgId index: %s",
+ "Can not create keyfile index: %s",
sqlite3_errmsg (db));
return;
}
- sql = "CREATE INDEX dirnames ON filelist (dirname)";
+ sql = "CREATE INDEX IF NOT EXISTS pkgId ON packages (pkgId)";
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create dirnames index: %s",
+ "Can not create pkgId index: %s",
sqlite3_errmsg (db));
return;
}
- sql =
- "CREATE TRIGGER remove_filelist AFTER DELETE ON packages"
- " BEGIN"
- " DELETE FROM filelist WHERE pkgKey = old.pkgKey;"
- " END;";
-
+ sql = "CREATE INDEX IF NOT EXISTS dirnames ON filelist (dirname)";
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create remove_filelist trigger: %s",
+ "Can not create dirnames index: %s",
sqlite3_errmsg (db));
return;
}
@@ -852,34 +872,41 @@ yum_db_create_other_tables (sqlite3 *db, GError **err)
return;
}
- sql = "CREATE INDEX keychange ON changelog (pkgKey)";
+ sql =
+ "CREATE TRIGGER remove_changelogs AFTER DELETE ON packages"
+ " BEGIN"
+ " DELETE FROM changelog WHERE pkgKey = old.pkgKey;"
+ " END;";
+
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create keychange index: %s",
+ "Can not create remove_changelogs trigger: %s",
sqlite3_errmsg (db));
return;
}
+}
- sql = "CREATE INDEX pkgId ON packages (pkgId)";
+void
+yum_db_index_other_tables (sqlite3 *db, GError **err)
+{
+ int rc;
+ const char *sql;
+
+ sql = "CREATE INDEX IF NOT EXISTS keychange ON changelog (pkgKey)";
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create pkgId index: %s",
+ "Can not create keychange index: %s",
sqlite3_errmsg (db));
return;
}
- sql =
- "CREATE TRIGGER remove_changelogs AFTER DELETE ON packages"
- " BEGIN"
- " DELETE FROM changelog WHERE pkgKey = old.pkgKey;"
- " END;";
-
+ sql = "CREATE INDEX IF NOT EXISTS pkgId ON packages (pkgId)";
rc = sqlite3_exec (db, sql, NULL, NULL, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not create remove_changelogs trigger: %s",
+ "Can not create pkgId index: %s",
sqlite3_errmsg (db));
return;
}
diff --git a/db.h b/db.h
index a91d329..fce455d 100644
--- a/db.h
+++ b/db.h
@@ -44,6 +44,7 @@ GHashTable *yum_db_read_package_ids (sqlite3 *db, GError **err);
/* Primary */
void yum_db_create_primary_tables (sqlite3 *db, GError **err);
+void yum_db_index_primary_tables (sqlite3 *db, GError **err);
sqlite3_stmt *yum_db_package_prepare (sqlite3 *db, GError **err);
void yum_db_package_write (sqlite3 *db,
sqlite3_stmt *handle,
@@ -67,6 +68,7 @@ void yum_db_file_write (sqlite3 *db,
/* Filelists */
void yum_db_create_filelist_tables (sqlite3 *db, GError **err);
+void yum_db_index_filelist_tables (sqlite3 *db, GError **err);
sqlite3_stmt *yum_db_package_ids_prepare (sqlite3 *db, GError **err);
void yum_db_package_ids_write (sqlite3 *db,
sqlite3_stmt *handle,
@@ -79,6 +81,7 @@ void yum_db_filelists_write (sqlite3 *db,
/* Other */
void yum_db_create_other_tables (sqlite3 *db, GError **err);
+void yum_db_index_other_tables (sqlite3 *db, GError **err);
sqlite3_stmt *yum_db_changelog_prepare (sqlite3 *db, GError **err);
void yum_db_changelog_write (sqlite3 *db,
sqlite3_stmt *handle,
diff --git a/sqlitecache.c b/sqlitecache.c
index 63888b1..3857be7 100644
--- a/sqlitecache.c
+++ b/sqlitecache.c
@@ -37,6 +37,8 @@ typedef void (*XmlParseFn) (const char *filename,
typedef void (*WriteDbPackageFn) (UpdateInfo *update_info, Package *package);
+typedef void (*IndexTablesFn) (sqlite3 *db, GError **err);
+
struct _UpdateInfo {
sqlite3 *db;
sqlite3_stmt *remove_handle;
@@ -55,6 +57,7 @@ struct _UpdateInfo {
CreateTablesFn create_tables;
WriteDbPackageFn write_package;
XmlParseFn xml_parse;
+ IndexTablesFn index_tables;
gpointer user_data;
};
@@ -423,6 +426,10 @@ update_packages (UpdateInfo *update_info,
goto cleanup;
sqlite3_exec (update_info->db, "COMMIT", NULL, NULL, NULL);
+ update_info->index_tables (update_info->db, err);
+ if (*err)
+ goto cleanup;
+
update_info_remove_old_entries (update_info);
yum_db_dbinfo_update (update_info->db, checksum, err);
@@ -566,6 +573,7 @@ py_update_primary (PyObject *self, PyObject *args)
info.update_info.create_tables = yum_db_create_primary_tables;
info.update_info.write_package = write_package_to_db;
info.update_info.xml_parse = yum_xml_parse_primary;
+ info.update_info.index_tables = yum_db_index_primary_tables;
return py_update (self, args, (UpdateInfo *) &info);
}
@@ -581,6 +589,7 @@ py_update_filelist (PyObject *self, PyObject *args)
info.update_info.create_tables = yum_db_create_filelist_tables;
info.update_info.write_package = write_filelist_package_to_db;
info.update_info.xml_parse = yum_xml_parse_filelists;
+ info.update_info.index_tables = yum_db_index_filelist_tables;
return py_update (self, args, (UpdateInfo *) &info);
}
@@ -596,6 +605,7 @@ py_update_other (PyObject *self, PyObject *args)
info.update_info.create_tables = yum_db_create_other_tables;
info.update_info.write_package = write_other_package_to_db;
info.update_info.xml_parse = yum_xml_parse_other;
+ info.update_info.index_tables = yum_db_index_other_tables;
return py_update (self, args, (UpdateInfo *) &info);
}
commit 23ecbe64f3f6949d711c439ebf907f9a1d012939
Author: Seth Vidal <skvidal at fedoraproject.org>
Date: Wed Sep 10 16:15:05 2008 -0400
apply patch to improve error messages from Ville Skyttä
from rh bug 461405
diff --git a/sqlitecache.c b/sqlitecache.c
index bc20b56..63888b1 100644
--- a/sqlitecache.c
+++ b/sqlitecache.c
@@ -69,7 +69,7 @@ update_info_init (UpdateInfo *info, GError **err)
rc = sqlite3_prepare (info->db, sql, -1, &info->remove_handle, NULL);
if (rc != SQLITE_OK) {
g_set_error (err, YUM_DB_ERROR, YUM_DB_ERROR,
- "Can not prepare changelog insertion: %s",
+ "Can not prepare package removal: %s",
sqlite3_errmsg (info->db));
sqlite3_finalize (info->remove_handle);
return;
More information about the Yum-cvs-commits
mailing list