From 4fc2e503971c959d7b36773e435d958e405e4589 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Mon, 4 Oct 2004 23:23:57 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=4289 --- checkin_notes | 15 +++++++++++++++ db/boinc_db.C | 42 ++++++++++++++++++++++++++++-------------- db/boinc_db.h | 28 ++++++++++++++-------------- db/db_base.C | 4 ++-- db/db_base.h | 4 ++-- 5 files changed, 61 insertions(+), 32 deletions(-) diff --git a/checkin_notes b/checkin_notes index 6066508605..2a399b6ce2 100755 --- a/checkin_notes +++ b/checkin_notes @@ -18025,3 +18025,18 @@ David 4 Oct 2004 db_base.h client/ cs_scheduler.C + +David 4 Oct 2004 + - changed DB code to allow for the use of read-only DB replicas + Here's what you can do now: + + DB_CONN replica; + replica.open(name, host, user, passwd); + DB_USER user(replica); + user.enumerate(...) + + ... and this can be intermixed with access to the master DB (boinc_db). + + db/ + boinc_db.C,h + db_base.C,h diff --git a/db/boinc_db.C b/db/boinc_db.C index c5f3d97a82..791f88158a 100644 --- a/db/boinc_db.C +++ b/db/boinc_db.C @@ -60,20 +60,34 @@ void MSG_TO_HOST::clear() {memset(this, 0, sizeof(*this));} void TRANSITIONER_ITEM::clear() {memset(this, 0, sizeof(*this));} void SCHED_RESULT_ITEM::clear() {memset(this, 0, sizeof(*this));} -DB_PLATFORM::DB_PLATFORM() : DB_BASE(boinc_db, "platform"){} -DB_CORE_VERSION::DB_CORE_VERSION() : DB_BASE(boinc_db, "core_version"){} -DB_APP::DB_APP() : DB_BASE(boinc_db, "app"){} -DB_APP_VERSION::DB_APP_VERSION() : DB_BASE(boinc_db, "app_version"){} -DB_USER::DB_USER() : DB_BASE(boinc_db, "user"){} -DB_TEAM::DB_TEAM() : DB_BASE(boinc_db, "team"){} -DB_HOST::DB_HOST() : DB_BASE(boinc_db, "host"){} -DB_WORKUNIT::DB_WORKUNIT() : DB_BASE(boinc_db, "workunit"){} -DB_RESULT::DB_RESULT() : DB_BASE(boinc_db, "result"){} -DB_MSG_FROM_HOST::DB_MSG_FROM_HOST() : DB_BASE(boinc_db, "msg_from_host"){} -DB_MSG_TO_HOST::DB_MSG_TO_HOST() : DB_BASE(boinc_db, "msg_to_host"){} -DB_TRANSITIONER_ITEM_SET::DB_TRANSITIONER_ITEM_SET() : DB_BASE_SPECIAL(boinc_db){} -DB_WORK_ITEM::DB_WORK_ITEM() : DB_BASE_SPECIAL(boinc_db){} -DB_SCHED_RESULT_ITEM_SET::DB_SCHED_RESULT_ITEM_SET() : DB_BASE_SPECIAL(boinc_db){} +DB_PLATFORM::DB_PLATFORM(DB_CONN* dc) : + DB_BASE("platform", dc?dc:&boinc_db){} +DB_CORE_VERSION::DB_CORE_VERSION(DB_CONN* dc) : + DB_BASE("core_version", dc?dc:&boinc_db){} +DB_APP::DB_APP(DB_CONN* dc) : + DB_BASE("app", dc?dc:&boinc_db){} +DB_APP_VERSION::DB_APP_VERSION(DB_CONN* dc) : + DB_BASE("app_version", dc?dc:&boinc_db){} +DB_USER::DB_USER(DB_CONN* dc) : + DB_BASE("user", dc?dc:&boinc_db){} +DB_TEAM::DB_TEAM(DB_CONN* dc) : + DB_BASE("team", dc?dc:&boinc_db){} +DB_HOST::DB_HOST(DB_CONN* dc) : + DB_BASE("host", dc?dc:&boinc_db){} +DB_WORKUNIT::DB_WORKUNIT(DB_CONN* dc) : + DB_BASE("workunit", dc?dc:&boinc_db){} +DB_RESULT::DB_RESULT(DB_CONN* dc) : + DB_BASE("result", dc?dc:&boinc_db){} +DB_MSG_FROM_HOST::DB_MSG_FROM_HOST(DB_CONN* dc) : + DB_BASE("msg_from_host", dc?dc:&boinc_db){} +DB_MSG_TO_HOST::DB_MSG_TO_HOST(DB_CONN* dc) : + DB_BASE("msg_to_host", dc?dc:&boinc_db){} +DB_TRANSITIONER_ITEM_SET::DB_TRANSITIONER_ITEM_SET(DB_CONN* dc) : + DB_BASE_SPECIAL(dc?dc:&boinc_db){} +DB_WORK_ITEM::DB_WORK_ITEM(DB_CONN* dc) : + DB_BASE_SPECIAL(dc?dc:&boinc_db){} +DB_SCHED_RESULT_ITEM_SET::DB_SCHED_RESULT_ITEM_SET(DB_CONN* dc) : + DB_BASE_SPECIAL(dc?dc:&boinc_db){} int DB_PLATFORM::get_id() {return id;} int DB_CORE_VERSION::get_id() {return id;} diff --git a/db/boinc_db.h b/db/boinc_db.h index 5f7ffa2495..cbaeefff51 100755 --- a/db/boinc_db.h +++ b/db/boinc_db.h @@ -466,7 +466,7 @@ struct TRANSITIONER_ITEM { class DB_PLATFORM : public DB_BASE, public PLATFORM { public: - DB_PLATFORM(); + DB_PLATFORM(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -474,7 +474,7 @@ public: class DB_CORE_VERSION : public DB_BASE, public CORE_VERSION { public: - DB_CORE_VERSION(); + DB_CORE_VERSION(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -482,7 +482,7 @@ public: class DB_APP : public DB_BASE, public APP { public: - DB_APP(); + DB_APP(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -490,7 +490,7 @@ public: class DB_APP_VERSION : public DB_BASE, public APP_VERSION { public: - DB_APP_VERSION(); + DB_APP_VERSION(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -498,7 +498,7 @@ public: class DB_USER : public DB_BASE, public USER { public: - DB_USER(); + DB_USER(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -507,7 +507,7 @@ public: class DB_TEAM : public DB_BASE, public TEAM { public: - DB_TEAM(); + DB_TEAM(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -515,7 +515,7 @@ public: class DB_HOST : public DB_BASE, public HOST { public: - DB_HOST(); + DB_HOST(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -524,7 +524,7 @@ public: class DB_RESULT : public DB_BASE, public RESULT { public: - DB_RESULT(); + DB_RESULT(DB_CONN* p=0); int get_id(); int update_subset(); void db_print(char*); @@ -535,7 +535,7 @@ public: class DB_WORKUNIT : public DB_BASE, public WORKUNIT { public: - DB_WORKUNIT(); + DB_WORKUNIT(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -544,7 +544,7 @@ public: class DB_MSG_FROM_HOST : public DB_BASE, public MSG_FROM_HOST { public: - DB_MSG_FROM_HOST(); + DB_MSG_FROM_HOST(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -552,7 +552,7 @@ public: class DB_MSG_TO_HOST : public DB_BASE, public MSG_TO_HOST { public: - DB_MSG_TO_HOST(); + DB_MSG_TO_HOST(DB_CONN* p=0); int get_id(); void db_print(char*); void db_parse(MYSQL_ROW &row); @@ -563,7 +563,7 @@ public: // class DB_TRANSITIONER_ITEM_SET : public DB_BASE_SPECIAL { public: - DB_TRANSITIONER_ITEM_SET(); + DB_TRANSITIONER_ITEM_SET(DB_CONN* p=0); TRANSITIONER_ITEM last_item; int nitems_this_query; @@ -586,7 +586,7 @@ struct WORK_ITEM { class DB_WORK_ITEM : public WORK_ITEM, public DB_BASE_SPECIAL { public: - DB_WORK_ITEM(); + DB_WORK_ITEM(DB_CONN* p=0); // CURSOR cursor; int enumerate(int limit); // used by feeder @@ -623,7 +623,7 @@ struct SCHED_RESULT_ITEM { class DB_SCHED_RESULT_ITEM_SET : public DB_BASE_SPECIAL { public: - DB_SCHED_RESULT_ITEM_SET(); + DB_SCHED_RESULT_ITEM_SET(DB_CONN* p=0); std::vector results; int add_result(char* result_name); diff --git a/db/db_base.C b/db/db_base.C index 4080893239..b75cd164e5 100644 --- a/db/db_base.C +++ b/db/db_base.C @@ -68,7 +68,7 @@ int DB_CONN::commit_transaction() { return do_query("COMMIT"); } -DB_BASE::DB_BASE(DB_CONN& p, char *tn) : db(&p), table_name(tn) { +DB_BASE::DB_BASE(char *tn, DB_CONN* p) : db(p), table_name(tn) { is_high_priority = false; } @@ -290,7 +290,7 @@ int DB_BASE::sum(double& x, char* field, char* clause) { } -DB_BASE_SPECIAL::DB_BASE_SPECIAL(DB_CONN& p) : db(&p) { +DB_BASE_SPECIAL::DB_BASE_SPECIAL(DB_CONN* p) : db(p) { } // convert a string into a form that allows it to be used diff --git a/db/db_base.h b/db/db_base.h index 5e45002d9e..21487a15ab 100644 --- a/db/db_base.h +++ b/db/db_base.h @@ -77,7 +77,7 @@ public: // class DB_BASE { public: - DB_BASE(DB_CONN&, char *table_name); + DB_BASE(char *table_name, DB_CONN*); int insert(); int insert_batch(const char*); int update(); @@ -107,7 +107,7 @@ public: // class DB_BASE_SPECIAL { public: - DB_BASE_SPECIAL(DB_CONN&); + DB_BASE_SPECIAL(DB_CONN*); DB_CONN* db; CURSOR cursor;