From a64cd12feb1a4cf7bfa6174696cf6cb271ba0602 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Thu, 10 Feb 2011 09:04:01 +0100 Subject: Add support for MySQL transactions to aurblup. Signed-off-by: Lukas Fleischer --- scripts/aurblup/aurblup.c | 16 ++++++++++++++++ scripts/aurblup/config.h.proto | 3 +++ 2 files changed, 19 insertions(+) diff --git a/scripts/aurblup/aurblup.c b/scripts/aurblup/aurblup.c index 005fc8ee..b9628ebe 100644 --- a/scripts/aurblup/aurblup.c +++ b/scripts/aurblup/aurblup.c @@ -66,11 +66,22 @@ blacklist_sync(alpm_list_t *pkgs) { alpm_list_t *r, *p; +#if MYSQL_USE_TRANSACTIONS + if (mysql_autocommit(c, 0)) + mysql_die("failed to turn MySQL autocommit off: %s\n"); + + if (mysql_query(c, "START TRANSACTION;")) + mysql_die("failed to start MySQL transaction: %s\n"); + + if (mysql_query(c, "TRUNCATE TABLE PackageBlacklist;")) + mysql_die("failed to truncate MySQL table: %s\n"); +#else if (mysql_query(c, "LOCK TABLES PackageBlacklist WRITE;")) mysql_die("failed to lock MySQL table: %s\n"); if (mysql_query(c, "DELETE FROM PackageBlacklist;")) mysql_die("failed to clear MySQL table: %s\n"); +#endif for (r = pkgs; r; r = alpm_list_next(r)) { pmpkg_t *pkg = alpm_list_getdata(r); @@ -86,8 +97,13 @@ blacklist_sync(alpm_list_t *pkgs) } } +#if MYSQL_USE_TRANSACTIONS + if (mysql_query(c, "COMMIT;")) + mysql_die("failed to commit MySQL transaction: %s\n"); +#else if (mysql_query(c, "UNLOCK TABLES;")) mysql_die("failed to unlock MySQL tables: %s\n"); +#endif } alpm_list_t * diff --git a/scripts/aurblup/config.h.proto b/scripts/aurblup/config.h.proto index daf1744c..fc1a87b8 100644 --- a/scripts/aurblup/config.h.proto +++ b/scripts/aurblup/config.h.proto @@ -6,6 +6,9 @@ #define CONFIG_KEY_PASSWD "AUR_db_pass" #define CONFIG_KEY_DB "AUR_db_name" +/* unset this to use "LOCK TABLE" instead of transactions */ +#define MYSQL_USE_TRANSACTIONS 1 + /* libalpm options */ #define ALPM_DBPATH "/var/lib/aurblup/" #define ALPM_MIRROR "ftp://mirrors.kernel.org/archlinux/%s/os/i686" -- cgit v1.2.3-24-g4f1b