[Pkg-owncloud-commits] [owncloud-client] 119/484: csync_statedb: Use the index in csync_statedb_get_below_path
Sandro Knauß
hefee-guest at moszumanska.debian.org
Wed Dec 16 00:37:27 UTC 2015
This is an automated email from the git hooks/post-receive script.
hefee-guest pushed a commit to branch master
in repository owncloud-client.
commit 597d36dcf20b838524c250eba55ed0425480565a
Author: Olivier Goffart <ogoffart at woboq.com>
Date: Wed Oct 21 15:44:16 2015 +0200
csync_statedb: Use the index in csync_statedb_get_below_path
Make an index from the path, and make a query that uses the index
---
csync/src/csync_statedb.c | 24 ++++++++----------------
src/libsync/syncjournaldb.cpp | 6 +++---
2 files changed, 11 insertions(+), 19 deletions(-)
diff --git a/csync/src/csync_statedb.c b/csync/src/csync_statedb.c
index 92ca528..61fc897 100644
--- a/csync/src/csync_statedb.c
+++ b/csync/src/csync_statedb.c
@@ -416,15 +416,10 @@ csync_file_stat_t *csync_statedb_get_stat_by_inode(CSYNC *ctx,
return st;
}
-#define BELOW_PATH_QUERY "SELECT phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote FROM metadata WHERE pathlen>? AND path LIKE(?)"
-
int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
int rc;
sqlite3_stmt *stmt = NULL;
int64_t cnt = 0;
- char *likepath;
- int asp;
- int min_path_len;
if( !path ) {
return -1;
@@ -434,7 +429,12 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
return -1;
}
- SQLITE_BUSY_HANDLED(sqlite3_prepare_v2(ctx->statedb.db, BELOW_PATH_QUERY, -1, &stmt, NULL));
+ /* Select the entries for anything that starts with (path+'/')
+ * In other words, anything that is between path+'/' and path+'0',
+ * (because '0' follows '/' in ascii)
+ */
+ const char *below_path_query = "SELECT phash, pathlen, path, inode, uid, gid, mode, modtime, type, md5, fileid, remotePerm, filesize, ignoredChildrenRemote FROM metadata WHERE path > (?||'/') AND path < (?||'0')";
+ SQLITE_BUSY_HANDLED(sqlite3_prepare_v2(ctx->statedb.db, below_path_query, -1, &stmt, NULL));
ctx->statedb.lastReturnValue = rc;
if( rc != SQLITE_OK ) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "WRN: Unable to create stmt for below path query.");
@@ -445,15 +445,8 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
return -1;
}
- asp = asprintf( &likepath, "%s/%%%%", path);
- if (asp < 0) {
- CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "asprintf failed!");
- return -1;
- }
-
- min_path_len = strlen(path);
- sqlite3_bind_int(stmt, 1, min_path_len);
- sqlite3_bind_text(stmt, 2, likepath, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 1, path, -1, SQLITE_STATIC);
+ sqlite3_bind_text(stmt, 2, path, -1, SQLITE_STATIC);
cnt = 0;
@@ -496,7 +489,6 @@ int csync_statedb_get_below_path( CSYNC *ctx, const char *path ) {
CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "%" PRId64 " entries read below path %s from db.", cnt, path);
}
sqlite3_finalize(stmt);
- SAFE_FREE(likepath);
return 0;
}
diff --git a/src/libsync/syncjournaldb.cpp b/src/libsync/syncjournaldb.cpp
index 4da2ed6..aaa53a1 100644
--- a/src/libsync/syncjournaldb.cpp
+++ b/src/libsync/syncjournaldb.cpp
@@ -509,12 +509,12 @@ bool SyncJournalDb::updateMetadataTableStructure()
if( 1 ) {
SqlQuery query(_db);
- query.prepare("CREATE INDEX IF NOT EXISTS metadata_pathlen ON metadata(pathlen);");
+ query.prepare("CREATE INDEX IF NOT EXISTS metadata_path ON metadata(path);");
if( !query.exec()) {
- sqlFail("updateMetadataTableStructure: create index pathlen", query);
+ sqlFail("updateMetadataTableStructure: create index path", query);
re = false;
}
- commitInternal("update database structure: add pathlen index");
+ commitInternal("update database structure: add path index");
}
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git
More information about the Pkg-owncloud-commits
mailing list