diff --git a/src/config.h b/src/config.h index 4cad217..92295ab 100644 --- a/src/config.h +++ b/src/config.h @@ -13,7 +13,7 @@ #define VERSION "0.1.22" -#define BUILD 731 +#define BUILD 732 #define HOSTID "mailarchiver" diff --git a/src/reindex.c b/src/reindex.c index fb3c203..66fdccc 100644 --- a/src/reindex.c +++ b/src/reindex.c @@ -28,6 +28,7 @@ printf(" [-c|--config ] \n"); printf(" -f \n"); printf(" -t \n"); + printf(" -a\n"); printf(" [-p]\n"); exit(0); @@ -41,6 +42,31 @@ } +uint64 get_max_meta_id(struct session_data *sdata){ + MYSQL_RES *res; + MYSQL_ROW row; + char s[SMALLBUFSIZE]; + int rc; + uint64 id=0; + + snprintf(s, sizeof(s)-1, "SELECT MAX(`id`) FROM %s", SQL_METADATA_TABLE); + + rc = mysql_real_query(&(sdata->mysql), s, strlen(s)); + + if(rc == 0){ + res = mysql_store_result(&(sdata->mysql)); + if(res){ + row = mysql_fetch_row(res); + if(row){ + id = strtoull(row[0], NULL, 10); + } + mysql_free_result(res); + } + } + return id; +} + + uint64 retrieve_email_by_metadata_id(struct session_data *sdata, struct __data *data, uint64 from_id, uint64 to_id, struct __config *cfg){ MYSQL_RES *res; MYSQL_ROW row; @@ -111,7 +137,7 @@ int main(int argc, char **argv){ - int c; + int c, all=0; uint64 from_id=0, to_id=0, n=0; char *configfile=CONFIG_FILE, *folder=NULL; struct session_data sdata; @@ -120,7 +146,7 @@ while(1){ - c = getopt(argc, argv, "c:f:t:F:phv?"); + c = getopt(argc, argv, "c:f:t:F:pahv?"); if(c == -1) break; @@ -138,6 +164,10 @@ to_id = strtoull(optarg, NULL, 10); break; + case 'a' : + all = 1; + break; + case 'F' : folder = optarg; break; @@ -156,7 +186,7 @@ } - if(from_id <= 0 || to_id <= 0) usage(); + if(all == 0 && (from_id <= 0 || to_id <= 0) ) usage(); (void) openlog("reindex", LOG_PID, LOG_MAIL); @@ -195,6 +225,11 @@ mysql_real_query(&(sdata.mysql), "SET CHARACTER SET utf8", strlen("SET CHARACTER SET utf8")); + if(all == 1){ + from_id = 1; + to_id = get_max_meta_id(&sdata); + } + n = retrieve_email_by_metadata_id(&sdata, &data, from_id, to_id, &cfg); printf("put %llu messages to %s table for reindexing\n", n, SQL_SPHINX_TABLE);