Fossil SCM

Omit special characters from the search pattern for indexed search.

drh 2020-06-18 17:42 trunk
Commit 977bb3fdf2c9e6ae8180d56211da56c3b6066ed665fbaa20c38c0507c6f03124
1 file changed +6 -1
+6 -1
--- src/search.c
+++ src/search.c
@@ -921,13 +921,18 @@
921921
static void search_indexed(
922922
const char *zPattern, /* The query pattern */
923923
unsigned int srchFlags /* What to search over */
924924
){
925925
Blob sql;
926
+ char *zPat = mprintf("%s",zPattern);
927
+ int i;
926928
if( srchFlags==0 ) return;
927929
sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
928930
search_rank_sqlfunc, 0, 0);
931
+ for(i=0; zPat[i]; i++){
932
+ if( zPat[i]=='-' || zPat[i]=='"' ) zPat[i] = ' ';
933
+ }
929934
blob_init(&sql, 0, 0);
930935
blob_appendf(&sql,
931936
"INSERT INTO x(label,url,score,id,date,snip) "
932937
" SELECT ftsdocs.label,"
933938
" ftsdocs.url,"
@@ -936,11 +941,11 @@
936941
" datetime(ftsdocs.mtime),"
937942
" snippet(ftsidx,'<mark>','</mark>',' ... ',-1,35)"
938943
" FROM ftsidx CROSS JOIN ftsdocs"
939944
" WHERE ftsidx MATCH %Q"
940945
" AND ftsdocs.rowid=ftsidx.docid",
941
- zPattern
946
+ zPat
942947
);
943948
if( srchFlags!=SRCH_ALL ){
944949
const char *zSep = " AND (";
945950
static const struct { unsigned m; char c; } aMask[] = {
946951
{ SRCH_CKIN, 'c' },
947952
--- src/search.c
+++ src/search.c
@@ -921,13 +921,18 @@
921 static void search_indexed(
922 const char *zPattern, /* The query pattern */
923 unsigned int srchFlags /* What to search over */
924 ){
925 Blob sql;
 
 
926 if( srchFlags==0 ) return;
927 sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
928 search_rank_sqlfunc, 0, 0);
 
 
 
929 blob_init(&sql, 0, 0);
930 blob_appendf(&sql,
931 "INSERT INTO x(label,url,score,id,date,snip) "
932 " SELECT ftsdocs.label,"
933 " ftsdocs.url,"
@@ -936,11 +941,11 @@
936 " datetime(ftsdocs.mtime),"
937 " snippet(ftsidx,'<mark>','</mark>',' ... ',-1,35)"
938 " FROM ftsidx CROSS JOIN ftsdocs"
939 " WHERE ftsidx MATCH %Q"
940 " AND ftsdocs.rowid=ftsidx.docid",
941 zPattern
942 );
943 if( srchFlags!=SRCH_ALL ){
944 const char *zSep = " AND (";
945 static const struct { unsigned m; char c; } aMask[] = {
946 { SRCH_CKIN, 'c' },
947
--- src/search.c
+++ src/search.c
@@ -921,13 +921,18 @@
921 static void search_indexed(
922 const char *zPattern, /* The query pattern */
923 unsigned int srchFlags /* What to search over */
924 ){
925 Blob sql;
926 char *zPat = mprintf("%s",zPattern);
927 int i;
928 if( srchFlags==0 ) return;
929 sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0,
930 search_rank_sqlfunc, 0, 0);
931 for(i=0; zPat[i]; i++){
932 if( zPat[i]=='-' || zPat[i]=='"' ) zPat[i] = ' ';
933 }
934 blob_init(&sql, 0, 0);
935 blob_appendf(&sql,
936 "INSERT INTO x(label,url,score,id,date,snip) "
937 " SELECT ftsdocs.label,"
938 " ftsdocs.url,"
@@ -936,11 +941,11 @@
941 " datetime(ftsdocs.mtime),"
942 " snippet(ftsidx,'<mark>','</mark>',' ... ',-1,35)"
943 " FROM ftsidx CROSS JOIN ftsdocs"
944 " WHERE ftsidx MATCH %Q"
945 " AND ftsdocs.rowid=ftsidx.docid",
946 zPat
947 );
948 if( srchFlags!=SRCH_ALL ){
949 const char *zSep = " AND (";
950 static const struct { unsigned m; char c; } aMask[] = {
951 { SRCH_CKIN, 'c' },
952

Keyboard Shortcuts

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