[Refdb-cvs] CVS: refdb/src dbfncs.c,1.15.2.2,1.15.2.3 refdbd.c,1.74.2.6,1.74.2.7 refdbda.c,1.41.2.2,
Status: Beta
Brought to you by:
mhoenicka
From: Markus H. <mho...@us...> - 2005-02-10 20:38:48
|
Update of /cvsroot/refdb/refdb/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4024 Modified Files: Tag: Release_0_9_5_stable dbfncs.c refdbd.c refdbda.c refdbdref.c Log Message: added support for database versioning Index: dbfncs.c =================================================================== RCS file: /cvsroot/refdb/refdb/src/dbfncs.c,v retrieving revision 1.15.2.2 retrieving revision 1.15.2.3 diff -u -U2 -r1.15.2.2 -r1.15.2.3 --- dbfncs.c 25 Nov 2004 21:34:16 -0000 1.15.2.2 +++ dbfncs.c 10 Feb 2005 20:38:14 -0000 1.15.2.3 @@ -134,5 +134,5 @@ /* create the metadata table */ - dbires = dbi_conn_query(conn, "CREATE TABLE t_meta (meta_app VARCHAR(20), meta_type VARCHAR(20), meta_version VARCHAR(20), meta_create_date DATETIME, meta_modify_date DATETIME)"); + dbires = dbi_conn_query(conn, "CREATE TABLE t_meta (meta_app VARCHAR(20), meta_type VARCHAR(20), meta_version VARCHAR(20), meta_dbversion SMALLINT, meta_create_date DATETIME, meta_modify_date DATETIME)"); if (!dbires) { @@ -387,5 +387,5 @@ /* create the metadata table */ - dbires = dbi_conn_query(conn, "CREATE TABLE t_meta (meta_app VARCHAR(20), meta_type VARCHAR(20), meta_version VARCHAR(20), meta_create_date TIMESTAMP, meta_modify_date TIMESTAMP)"); + dbires = dbi_conn_query(conn, "CREATE TABLE t_meta (meta_app VARCHAR(20), meta_type VARCHAR(20), meta_version VARCHAR(20), meta_dbversion SMALLINT, meta_create_date TIMESTAMP, meta_modify_date TIMESTAMP)"); if (!dbires) { @@ -865,5 +865,5 @@ /* create the metadata table */ - dbires = dbi_conn_query(conn, "CREATE TABLE t_meta (meta_app VARCHAR(20), meta_type VARCHAR(20), meta_version VARCHAR(20), meta_create_date DATETIME, meta_modify_date DATETIME)"); + dbires = dbi_conn_query(conn, "CREATE TABLE t_meta (meta_app VARCHAR(20), meta_type VARCHAR(20), meta_version VARCHAR(20), meta_dbversion SMALLINT, meta_create_date DATETIME, meta_modify_date DATETIME)"); if (!dbires) { Index: refdbd.c =================================================================== RCS file: /cvsroot/refdb/refdb/src/refdbd.c,v retrieving revision 1.74.2.6 retrieving revision 1.74.2.7 diff -u -U2 -r1.74.2.6 -r1.74.2.7 --- refdbd.c 10 Dec 2004 10:32:14 -0000 1.74.2.6 +++ refdbd.c 10 Feb 2005 20:38:17 -0000 1.74.2.7 @@ -162,4 +162,5 @@ int n_pipe_buf = 512; /* maximum size of atomic write to fifo. 512 is the posix value. if the OS defines a larger value, this will be used below */ int num_drivers = 0; /* number of libdbi drivers */ + int n_have_requested_driver = 0; /* used to check the libdbi drivers */ struct sockaddr_in server_address; struct sockaddr_in client_address; @@ -476,7 +477,65 @@ LOG_PRINT(LOG_INFO, "Available libdbi database drivers:"); while ((driver = dbi_driver_list(driver)) != NULL) { - /* ToDo: check whether requested driver is available */ + /* check whether requested driver is available */ + if (!strcmp(ptr_clrequest->dbserver, dbi_driver_get_name(driver))) { + n_have_requested_driver++; + } LOG_PRINT(LOG_INFO, dbi_driver_get_name(driver)); } + + if (!n_have_requested_driver) { + LOG_PRINT(LOG_ERR, "Requested libdbi driver is not present"); + dbi_shutdown(); + free(ptr_clrequest); + exit(1); + } + else { + dbi_conn conn; /* libdbi connection structure */ + dbi_result dbires; /* libdbi result structure */ + char sql_command[] = "SELECT meta_dbversion from t_meta"; + short int main_dbversion; + + LOG_PRINT(LOG_ERR, "Requested libdbi driver found"); + + /* check presence of main database */ + if ((conn = connect_to_db(ptr_clrequest, MAIN_DB, 0)) != NULL) { + /* check version tag of main database */ + dbires = dbi_conn_query(conn, sql_command); + if (!dbires || !dbi_result_next_row(dbires)) { + LOG_PRINT(LOG_WARNING, "Reading main database meta information failed. Main database may be corrupt or too old."); + dbi_shutdown(); + free(ptr_clrequest); + exit(1); + } + + main_dbversion = dbi_result_get_short(dbires, "meta_dbversion"); + + if (dbi_conn_error_flag(conn)) { + LOG_PRINT(LOG_WARNING, "Reading main database version information failed. Main database may be corrupt or too old."); + dbi_result_free(dbires); + dbi_shutdown(); + free(ptr_clrequest); + exit(1); + } + dbi_result_free(dbires); + + if (main_dbversion < MIN_MAIN_DB_VERSION) { + LOG_PRINT(LOG_WARNING, "Main database version is not supported."); + dbi_result_free(dbires); + dbi_shutdown(); + free(ptr_clrequest); + exit(1); + } + } + else { + LOG_PRINT(LOG_ERR, "Cannot connect to the main database:"); + LOG_PRINT(LOG_ERR, MAIN_DB); + dbi_shutdown(); + free(ptr_clrequest); + exit(1); + } + LOG_PRINT(LOG_DEBUG, "Main database looks ok:"); + LOG_PRINT(LOG_DEBUG, MAIN_DB); + } /* shutdown for the time being. Each child will initialize libdbi again */ Index: refdbda.c =================================================================== RCS file: /cvsroot/refdb/refdb/src/refdbda.c,v retrieving revision 1.41.2.2 retrieving revision 1.41.2.3 diff -u -U2 -r1.41.2.2 -r1.41.2.3 --- refdbda.c 12 Oct 2004 00:18:46 -0000 1.41.2.2 +++ refdbda.c 10 Feb 2005 20:38:21 -0000 1.41.2.3 @@ -663,4 +663,5 @@ int retval = 0; int close_conn_ref = 0; + short int dbversion; if (conn) { @@ -675,5 +676,5 @@ } - sprintf(sql_command, "SELECT meta_app,meta_type from t_meta"); + sprintf(sql_command, "SELECT meta_app,meta_type,meta_dbversion from t_meta"); LOG_PRINT(LOG_DEBUG, sql_command); @@ -690,6 +691,9 @@ app = dbi_result_get_string(dbires, "meta_app"); type = dbi_result_get_string(dbires, "meta_type"); + dbversion = dbi_result_get_short(dbires, "meta_dbversion"); - if (!strcmp(app, "refdb")) { + if (!strcmp(app, "refdb") + && (!strcmp(type, "ris") || !strcmp(type, "risx")) + && dbversion >= MIN_DB_VERSION) { retval = 1; } @@ -957,5 +961,5 @@ time(&the_time); strftime(date_buffer, 24, "%Y-%m-%d %H:%M:%S", gmtime(&the_time)); - sprintf(sql_command, "INSERT INTO t_meta (meta_app,meta_type,meta_version,meta_create_date,meta_modify_date) VALUES (\'%s\', \'risx\', \'%s\', \'%s\', \'%s\')", PACKAGE, VERSION, date_buffer, date_buffer); + sprintf(sql_command, "INSERT INTO t_meta (meta_app,meta_type,meta_version,meta_dbversion,meta_create_date,meta_modify_date) VALUES (\'%s\', \'risx\', \'%s\', \'%d\', \'%s\', \'%s\')", PACKAGE, VERSION, DB_VERSION, date_buffer, date_buffer); LOG_PRINT(LOG_DEBUG, sql_command); Index: refdbdref.c =================================================================== RCS file: /cvsroot/refdb/refdb/src/refdbdref.c,v retrieving revision 1.65.2.4 retrieving revision 1.65.2.5 diff -u -U2 -r1.65.2.4 -r1.65.2.5 --- refdbdref.c 14 Nov 2004 16:25:09 -0000 1.65.2.4 +++ refdbdref.c 10 Feb 2005 20:38:22 -0000 1.65.2.5 @@ -146,4 +146,5 @@ unsigned long long maxnid; unsigned short fieldtype; + short int db_version; int numbyte; int error; @@ -212,5 +213,5 @@ dbi_result_free(dbires); - dbires = dbi_conn_query(conn, "SELECT meta_app,meta_type,meta_version,meta_create_date,meta_modify_date FROM t_meta"); + dbires = dbi_conn_query(conn, "SELECT meta_app,meta_type,meta_version,meta_dbversion,meta_create_date,meta_modify_date FROM t_meta"); if (!dbires) { tiwrite(ptr_clrequest->fd, "cannot get meta info\n", TERM_NO); @@ -257,5 +258,5 @@ /* The returned integers are quads (8byte) */ - sprintf(return_msg, "Current database: %s\nNumber of references: "ULLSPEC"\nHighest reference ID: "ULLSPEC"\nNumber of notes: "ULLSPEC"\nHighest note ID: "ULLSPEC"\nEncoding: %s\nDatabase type: %s\nDatabase server: %s\nCreated: %s UTC\nUsing %s version: %s\nLast modified: %s UTC\n", ptr_clrequest->current_db, (unsigned long long)numrefs, (unsigned long long)maxid, (unsigned long long)numnotes, (unsigned long long)maxnid, db_encoding, dbi_result_get_string(dbires, "meta_type"), dbi_driver_get_name(driver), create_date, dbi_result_get_string(dbires, "meta_app"), dbi_result_get_string(dbires, "meta_version"), modify_date); + sprintf(return_msg, "Current database: %s\nNumber of references: "ULLSPEC"\nHighest reference ID: "ULLSPEC"\nNumber of notes: "ULLSPEC"\nHighest note ID: "ULLSPEC"\nEncoding: %s\nDatabase type: %s\nDatabase version: %d\nDatabase server: %s\nCreated: %s UTC\nUsing %s version: %s\nLast modified: %s UTC\n", ptr_clrequest->current_db, (unsigned long long)numrefs, (unsigned long long)maxid, (unsigned long long)numnotes, (unsigned long long)maxnid, db_encoding, dbi_result_get_string(dbires, "meta_type"),dbi_result_get_short(dbires, "meta_dbversion"), dbi_driver_get_name(driver), create_date, dbi_result_get_string(dbires, "meta_app"), dbi_result_get_string(dbires, "meta_version"), modify_date); dbi_result_free(dbires); |