From: Florian G. <re...@us...> - 2006-12-12 23:44:21
|
Update of /cvsroot/perfparse/_perfparse/db_tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26324/db_tools Modified Files: convert.c convert.h Log Message: some db conversion work Index: convert.c =================================================================== RCS file: /cvsroot/perfparse/_perfparse/db_tools/convert.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** convert.c 11 Dec 2006 23:44:48 -0000 1.10 --- convert.c 12 Dec 2006 23:44:18 -0000 1.11 *************** *** 141,157 **** if (version < 0.20) { ! int steps=5; ! printf (_("Warning, this stage may take some time:\n")); ! printf (_("[Step 1/%d] Creating new group table:\n"),steps); ! query ("create table perfdata_groups \ (group_id INT AUTO_INCREMENT PRIMARY KEY, \ group_name VARCHAR(75) UNIQUE) type=InnoDB \ select group_name from perfdata_host_group"); ! printf (_("[Step 2/%d] Dropping foreign key from perfdata_host to perfdata_host_group table.\n"),steps); ! DropForeignKey ("perfdata_host", "perfdata_host_group"); ! printf (_("[Step 3/%d] Dropping table perfdata_host_group\n"),steps); ! query ("drop table perfdata_host_group"); ! printf(_("[Step 4/%d] Creating group mapping table perfdata_host_groups\n"),steps); ! query ("CREATE TABLE IF NOT EXISTS perfdata_host_groups ( \ group_id INT, \ FOREIGN KEY perfdata_host_groups_ibfk_1 (group_id) \ --- 141,186 ---- if (version < 0.20) { ! int i_steps=20; ! int i=0; ! char *s_cont_step=getRegistry("dummy","pp/database/conversion_step",NULL); ! int i_cont_step=0; ! if(s_cont_step != NULL) { ! i_cont_step=atoi(s_cont_step); ! printf(_("Previous database conversion not complete. Continuing with step %d.\n"), ! i_cont_step); ! } ! ! if(i_cont_step < i_steps) { ! printf (_("Warning, this stage may take some time:\n")); ! } ! ! if(i_cont_step < i++) { ! ! printf (_("[Step %d/%d] Creating new group table:\n"),i,i_steps); ! query ("create table perfdata_groups \ (group_id INT AUTO_INCREMENT PRIMARY KEY, \ group_name VARCHAR(75) UNIQUE) type=InnoDB \ select group_name from perfdata_host_group"); ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf (_("[Step %d/%d] Dropping foreign key from perfdata_host to perfdata_host_group table.\n"),i,i_steps); ! if(!DropForeignKey ("perfdata_host", "perfdata_host_group")) { ! printf("Foreign Key not found!\nExiting.\n"); ! exit(1); ! } ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf (_("[Step %d/%d] Dropping table perfdata_host_group\n"),i,i_steps); ! query ("drop table perfdata_host_group"); ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Creating group mapping table perfdata_host_groups\n"),i,i_steps); ! query ("CREATE TABLE IF NOT EXISTS perfdata_host_groups ( \ group_id INT, \ FOREIGN KEY perfdata_host_groups_ibfk_1 (group_id) \ *************** *** 161,170 **** REFERENCES perfdata_host(host_id) ON DELETE CASCADE \ ) type=InnoDB;"); ! printf(_("[Step 5/%d] Filling table perfdata_host_groups\n"),steps); ! query ("insert into perfdata_host_groups(group_id,host_id) \ select g.group_id, h.host_id from perfdata_groups g,\ perfdata_host h where g.group_name=h.group_name"); ! } --- 190,266 ---- REFERENCES perfdata_host(host_id) ON DELETE CASCADE \ ) type=InnoDB;"); ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Filling table perfdata_host_groups\n"),i,i_steps); ! query ("insert into perfdata_host_groups(group_id,host_id) \ select g.group_id, h.host_id from perfdata_groups g,\ perfdata_host h where g.group_name=h.group_name"); + setConversionStep(i); + } ! /* ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 1\n"),i,i_steps); ! if(!DropForeignKey ("perfdata_service_raw", "perfdata_host")) { ! printf("Foreign Key not found!\nExiting.\n"); ! exit(1); ! } ! setConversionStep(i); ! } ! ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 2\n"),i,i_steps); ! if(!DropForeignKey ("perfdata_service_metric", "perfdata_host")) { ! printf("Foreign Key not found!\nExiting.\n"); ! exit(1); ! } ! setConversionStep(i); ! } ! */ ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 3\n"),i,i_steps); ! if(!DropForeignKey ("perfdata_service", "perfdata_host")) { ! printf("Foreign Key not found!\nExiting.\n"); ! exit(1); ! } ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 4\n"),i,i_steps); ! if(!DropKey ("perfdata_host", "host_id")) { ! printf("Key not found!\nExiting.\n"); ! exit(1); ! } ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 5\n"),i,i_steps); ! query("alter table perfdata_host drop primary key"); ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 6\n"),i,i_steps); ! query("alter table perfdata_host add constraint unique key perfdata_host_ix0 (host_name)"); ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Fixing keys of perfdata_host table pt. 7\n"),i,i_steps); ! query("alter table perfdata_host modify column host_id INT AUTO_INCREMENT PRIMARY KEY"); ! setConversionStep(i); ! } ! ! if(i_cont_step < i++) { ! printf(_("[Step %d/%d] Dropping group_name from perfdata_host table\n"),i,i_steps); ! query("alter table perfdata_host drop column group_name"); ! setConversionStep(i); ! } } *************** *** 197,200 **** --- 293,352 ---- + void setConversionStep(int i) { + char s_i[4]; + snprintf(s_i,3,"%d",i); + setRegistry("dummy","pp/database/conversion_step",s_i,time(NULL)); + } + + int DropKey(char *sTableName, char *sColumnName) { + GString *querystr = g_string_new (""); + GString *resultstr = g_string_new (""); + char *tmpstr; + regex_t preg_struct; + regex_t *preg = &preg_struct; + GString *regex = g_string_new (""); + size_t nmatch = 10; + regmatch_t pmatch[10]; + int i; + + + g_string_printf (querystr, "show create table %s", sTableName); + query (querystr->str); + if ((result_row = mysql_fetch_row (query_result))) + { + g_string_assign (resultstr, result_row[1]); + g_string_printf (regex, + ".*KEY `(\\S+)` \\(`%s`\\).*", // todo: exclude foreign keys + sColumnName); + i = regcomp (preg, regex->str, REG_EXTENDED | REG_ICASE); + i = regexec (preg, resultstr->str, nmatch, pmatch, + REG_NOTEOL); + if (i == REG_NOMATCH) + { + return (FALSE); + } + else + { + for (i = 1; i < nmatch; i++) // pmatch[0] contains the whole search + { + if (pmatch[i].rm_so != -1 + && pmatch[i].rm_eo != -1) + { + tmpstr = resultstr->str + pmatch[i].rm_eo; + *tmpstr = '\0'; + printf ("Match %d so: %d, eo:%d String %s\n", i, + pmatch[i].rm_so, pmatch[i].rm_eo,resultstr->str+pmatch[i].rm_so); + g_string_printf (querystr, + "ALTER TABLE %s DROP KEY %s", + sTableName, resultstr->str + pmatch[i].rm_so); + query (querystr->str); + } + } + } + } + return(TRUE); + } + + int DropForeignKey (char *TableName, char *ForeignTableName) Index: convert.h =================================================================== RCS file: /cvsroot/perfparse/_perfparse/db_tools/convert.h,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** convert.h 7 Dec 2006 23:47:13 -0000 1.3 --- convert.h 12 Dec 2006 23:44:18 -0000 1.4 *************** *** 32,35 **** --- 32,37 ---- void install_database(void); int DropForeignKey(char *TableName, char *ForeignTableName); + int DropKey(char *sTableName, char *sColumnName); + void setConversionStep(int i); #endif |