Fossil SCM
Much faster implementation of the ftsearch_content() function for file content.
Commit
bbcce76f2645a98d35973467bee421ae75dd8de1
Parent
83c67816701851c…
2 files changed
-1
+13
-5
M
src/db.c
-1
| --- src/db.c | ||
| +++ src/db.c | ||
| @@ -838,11 +838,10 @@ | ||
| 838 | 838 | ); |
| 839 | 839 | if( g.fSqlTrace ) sqlite3_trace(db, db_sql_trace, 0); |
| 840 | 840 | re_add_sql_func(db); |
| 841 | 841 | foci_register(db); |
| 842 | 842 | ftsearch_add_sql_func(db); |
| 843 | - add_content_sql_commands(db); | |
| 844 | 843 | sqlite3_exec(db, "PRAGMA foreign_keys=OFF;", 0, 0, 0); |
| 845 | 844 | return db; |
| 846 | 845 | } |
| 847 | 846 | |
| 848 | 847 | |
| 849 | 848 |
| --- 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 @@ | ||
| 74 | 74 | " AND event.type GLOB 'c*'", |
| 75 | 75 | TAG_BRANCH, id, id); |
| 76 | 76 | break; |
| 77 | 77 | } |
| 78 | 78 | 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" | |
| 81 | 83 | " FROM filename, mlink, event" |
| 82 | 84 | " WHERE filename.fnid=%d" |
| 83 | 85 | " AND mlink.fnid=filename.fnid" |
| 84 | 86 | " 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 | + } | |
| 88 | 96 | break; |
| 89 | 97 | } |
| 90 | 98 | default: { |
| 91 | 99 | /* No-op */ |
| 92 | 100 | } |
| 93 | 101 |
| --- 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 |