Fossil SCM
Omit special characters from the search pattern for indexed search.
Commit
977bb3fdf2c9e6ae8180d56211da56c3b6066ed665fbaa20c38c0507c6f03124
Parent
15785eec6b07ed0…
1 file changed
+6
-1
+6
-1
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -921,13 +921,18 @@ | ||
| 921 | 921 | static void search_indexed( |
| 922 | 922 | const char *zPattern, /* The query pattern */ |
| 923 | 923 | unsigned int srchFlags /* What to search over */ |
| 924 | 924 | ){ |
| 925 | 925 | Blob sql; |
| 926 | + char *zPat = mprintf("%s",zPattern); | |
| 927 | + int i; | |
| 926 | 928 | if( srchFlags==0 ) return; |
| 927 | 929 | sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0, |
| 928 | 930 | search_rank_sqlfunc, 0, 0); |
| 931 | + for(i=0; zPat[i]; i++){ | |
| 932 | + if( zPat[i]=='-' || zPat[i]=='"' ) zPat[i] = ' '; | |
| 933 | + } | |
| 929 | 934 | blob_init(&sql, 0, 0); |
| 930 | 935 | blob_appendf(&sql, |
| 931 | 936 | "INSERT INTO x(label,url,score,id,date,snip) " |
| 932 | 937 | " SELECT ftsdocs.label," |
| 933 | 938 | " ftsdocs.url," |
| @@ -936,11 +941,11 @@ | ||
| 936 | 941 | " datetime(ftsdocs.mtime)," |
| 937 | 942 | " snippet(ftsidx,'<mark>','</mark>',' ... ',-1,35)" |
| 938 | 943 | " FROM ftsidx CROSS JOIN ftsdocs" |
| 939 | 944 | " WHERE ftsidx MATCH %Q" |
| 940 | 945 | " AND ftsdocs.rowid=ftsidx.docid", |
| 941 | - zPattern | |
| 946 | + zPat | |
| 942 | 947 | ); |
| 943 | 948 | if( srchFlags!=SRCH_ALL ){ |
| 944 | 949 | const char *zSep = " AND ("; |
| 945 | 950 | static const struct { unsigned m; char c; } aMask[] = { |
| 946 | 951 | { SRCH_CKIN, 'c' }, |
| 947 | 952 |
| --- 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 |