Fossil SCM

Much faster implementation of the ftsearch_content() function for file content.

drh 2014-12-17 18:51 search-using-fts4
Commit bbcce76f2645a98d35973467bee421ae75dd8de1
2 files changed -1 +13 -5
-1
--- src/db.c
+++ src/db.c
@@ -838,11 +838,10 @@
838838
);
839839
if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
840840
re_add_sql_func(db);
841841
foci_register(db);
842842
ftsearch_add_sql_func(db);
843
- add_content_sql_commands(db);
844843
sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
845844
return db;
846845
}
847846
848847
849848
--- src/db.c
+++ src/db.c
@@ -838,11 +838,10 @@
838 );
839 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
840 re_add_sql_func(db);
841 foci_register(db);
842 ftsearch_add_sql_func(db);
843 add_content_sql_commands(db);
844 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
845 return db;
846 }
847
848
849
--- src/db.c
+++ src/db.c
@@ -838,11 +838,10 @@
838 );
839 if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0);
840 re_add_sql_func(db);
841 foci_register(db);
842 ftsearch_add_sql_func(db);
 
843 sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0);
844 return db;
845 }
846
847
848
+13 -5
--- src/ftsearch.c
+++ src/ftsearch.c
@@ -74,19 +74,27 @@
7474
" AND event.type GLOB 'c*'",
7575
TAG_BRANCH, id, id);
7676
break;
7777
}
7878
case 'f': { /* A file with zDocId as the filename.fnid */
79
- zRes = db_text(0,
80
- "SELECT content(mlink.fid)"
79
+ Blob x;
80
+ int rid;
81
+ rid = db_int(0,
82
+ "SELECT mlink.fid"
8183
" FROM filename, mlink, event"
8284
" WHERE filename.fnid=%d"
8385
" AND mlink.fnid=filename.fnid"
8486
" AND event.objid=mlink.mid"
85
- " ORDER BY event.mtime DESC LIMIT 1",
86
- id
87
- );
87
+ " ORDER BY event.mtime DESC LIMIT 1", id);
88
+ blob_init(&x,0,0);
89
+ if( rid>0 ){
90
+ content_get(rid, &x);
91
+ }
92
+ zRes = blob_str(&x);
93
+ if( !blob_is_malloced(&x) ){
94
+ zRes = mprintf("%s", zRes);
95
+ }
8896
break;
8997
}
9098
default: {
9199
/* No-op */
92100
}
93101
--- src/ftsearch.c
+++ src/ftsearch.c
@@ -74,19 +74,27 @@
74 " AND event.type GLOB 'c*'",
75 TAG_BRANCH, id, id);
76 break;
77 }
78 case 'f': { /* A file with zDocId as the filename.fnid */
79 zRes = db_text(0,
80 "SELECT content(mlink.fid)"
 
 
81 " FROM filename, mlink, event"
82 " WHERE filename.fnid=%d"
83 " AND mlink.fnid=filename.fnid"
84 " AND event.objid=mlink.mid"
85 " ORDER BY event.mtime DESC LIMIT 1",
86 id
87 );
 
 
 
 
 
 
88 break;
89 }
90 default: {
91 /* No-op */
92 }
93
--- src/ftsearch.c
+++ src/ftsearch.c
@@ -74,19 +74,27 @@
74 " AND event.type GLOB 'c*'",
75 TAG_BRANCH, id, id);
76 break;
77 }
78 case 'f': { /* A file with zDocId as the filename.fnid */
79 Blob x;
80 int rid;
81 rid = db_int(0,
82 "SELECT mlink.fid"
83 " FROM filename, mlink, event"
84 " WHERE filename.fnid=%d"
85 " AND mlink.fnid=filename.fnid"
86 " AND event.objid=mlink.mid"
87 " ORDER BY event.mtime DESC LIMIT 1", id);
88 blob_init(&x,0,0);
89 if( rid>0 ){
90 content_get(rid, &x);
91 }
92 zRes = blob_str(&x);
93 if( !blob_is_malloced(&x) ){
94 zRes = mprintf("%s", zRes);
95 }
96 break;
97 }
98 default: {
99 /* No-op */
100 }
101

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button