Enlightenment CVS committal Author : chaos Project : e17 Module : apps/evfs
Dir : e17/apps/evfs/src/bin Modified Files: evfs_metadata.c evfs_metadata_db.c Log Message: * Prevent duplication of metadata per file. * printfs-- =================================================================== RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_metadata.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- evfs_metadata.c 22 Jul 2006 18:11:44 -0000 1.24 +++ evfs_metadata.c 23 Jul 2006 04:49:42 -0000 1.25 @@ -665,11 +665,11 @@ ecore_list_goto_first(evfs_metadata_queue); if ( (ref = ecore_list_current(evfs_metadata_queue))) { - printf("..item on queue..\n"); + /*printf("..item on queue..\n");*/ evfs_metadata_extract_fork(ref); } } else { - printf("...metadata runner executing..\n"); + /*printf("...metadata runner executing..\n");*/ if ((waitpid(_metadata_fork, &status, WNOHANG) > 0) || errno == ECHILD) { @@ -681,7 +681,7 @@ ecore_list_remove_first(evfs_metadata_queue); - printf("Execution complete..\n"); + /*printf("Execution complete..\n");*/ } } return 1; @@ -710,7 +710,7 @@ /*Wait up to 10 seconds in this fork for the db to be available*/ sqlite3_busy_timeout(dbi,10000); - printf("Extract fork started: %s..\n", ref->path); + /*printf("Extract fork started: %s..\n", ref->path);*/ file = evfs_metadata_db_id_for_file(dbi,ref,1); =================================================================== RCS file: /cvs/e/e17/apps/evfs/src/bin/evfs_metadata_db.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- evfs_metadata_db.c 22 Jul 2006 18:11:44 -0000 1.5 +++ evfs_metadata_db.c 23 Jul 2006 04:49:42 -0000 1.6 @@ -10,7 +10,7 @@ * * Make a 'bulk-run' function to avoid the endless repeated sqlite3_exec */ -#define EVFS_METADATA_DB_CONFIG_LATEST 3 +#define EVFS_METADATA_DB_CONFIG_LATEST 4 static char metadata_db[PATH_MAX]; static char* homedir; static Ecore_Hash* db_upgrade_hash = NULL; @@ -118,6 +118,20 @@ return evfs_metadata_db_version_bump(db, "3"); } +int evfs_metadata_db_upgrade_3_4(sqlite3* db) +{ + int ret; + char* errMsg = 0; + + printf("Performing upgrade from v.3 to v.4\n"); + + ret = sqlite3_exec(db, + "create index FileMeta_idx_keyword_value_file on FileMeta(File,Keyword,Value);", + NULL, 0,&errMsg); + + return evfs_metadata_db_version_bump(db, "4"); +} + int evfs_metadata_db_version_bump(sqlite3* db, char* ver) { int ret; @@ -146,6 +160,7 @@ ecore_hash_set(db_upgrade_hash, (int*)0, evfs_metadata_db_upgrade_0_1); ecore_hash_set(db_upgrade_hash, (int*)1, evfs_metadata_db_upgrade_1_2); ecore_hash_set(db_upgrade_hash, (int*)2, evfs_metadata_db_upgrade_2_3); + ecore_hash_set(db_upgrade_hash, (int*)3, evfs_metadata_db_upgrade_3_4); /*Check if we need to seed the DB*/ if (stat(metadata_db, &config_dir_stat)) { @@ -245,12 +260,11 @@ /*Build a path*/ file_path = evfs_filereference_to_string(ref); - printf("File path is: %s\n", file_path); + /*printf("File path is: %s\n", file_path);*/ snprintf(query, sizeof(query), "select id from File where filename ='%s'", file_path); - ret = sqlite3_prepare(db, query, - -1, &pStmt, 0); + ret = sqlite3_prepare(db, query, -1, &pStmt, 0); if (ret == SQLITE_OK) { ret = sqlite3_step(pStmt); @@ -279,20 +293,36 @@ void evfs_metadata_db_file_keyword_add(sqlite3* db, int file, char* key, char* value) { - char* file_path; char query[512]; int ret; char* errMsg = 0; + int cnt; + sqlite3_stmt *pStmt; - if (key&&value) { - snprintf(query,sizeof(query), "insert into FileMeta (File, keyword, value) select %d, '%s', '%s';", file,key,value); - printf("Running %p:%s\n", db,query); - ret = sqlite3_exec(db, - query, - NULL, 0,&errMsg); - if (errMsg) printf("ERROR: %s\n", errMsg); - } else { - printf("db_file_keyword_add: key or value is null\n"); + /*Check we don't already have a match for this file/keyword/value triplet*/ + snprintf(query, sizeof(query), "select count(*) from FileMeta where file=%d and keyword='%s' and value='%s'", file,key,value); + ret = sqlite3_prepare(db, query, -1, &pStmt, 0); + if (ret == SQLITE_OK) { + ret = sqlite3_step(pStmt); + if (ret == SQLITE_ROW) { + cnt = sqlite3_column_int(pStmt,0); + + sqlite3_reset(pStmt); + sqlite3_finalize(pStmt); + + if (cnt == 0 &&key&&value) { + snprintf(query,sizeof(query), + "insert into FileMeta (File, keyword, value) select %d, '%s', '%s';", file,key,value); + + /*printf("Running %p:%s\n", db,query);*/ + ret = sqlite3_exec(db, + query, + NULL, 0,&errMsg); + if (errMsg) printf("ERROR: %s\n", errMsg); + } else { + /*printf("db_file_keyword_add: key or value is null\n");*/ + } + } } } ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys -- and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs