Fossil SCM
When preparing a pattern for FTS search, if the pattern is empty convert it into a double-quoted empty string, to avoid FTS5 errors.
Commit
5bb323ff9eb82fbaa99d5c044abd729f08c605ffe8d27ace6587625a938202fe
Parent
08df33aa4cae9f3…
1 file changed
+5
+5
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -1005,10 +1005,15 @@ | ||
| 1005 | 1005 | if( srchFlags==0 ) return; |
| 1006 | 1006 | sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0, |
| 1007 | 1007 | search_rank_sqlfunc, 0, 0); |
| 1008 | 1008 | for(i=0; zPat[i]; i++){ |
| 1009 | 1009 | if( (zPat[i]&0x80)==0 && !fossil_isalnum(zPat[i]) ) zPat[i] = ' '; |
| 1010 | + } | |
| 1011 | + for(i--; i>=0 && zPat[i]==' '; i--){} | |
| 1012 | + if( i<0 ){ | |
| 1013 | + fossil_free(zPat); | |
| 1014 | + zPat = mprintf("\"\""); | |
| 1010 | 1015 | } |
| 1011 | 1016 | blob_init(&sql, 0, 0); |
| 1012 | 1017 | if( search_index_type(0)==4 ){ |
| 1013 | 1018 | /* If this repo is still using the legacy FTS4 search index, then |
| 1014 | 1019 | ** the snippet() function is slightly different */ |
| 1015 | 1020 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -1005,10 +1005,15 @@ | |
| 1005 | if( srchFlags==0 ) return; |
| 1006 | sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0, |
| 1007 | search_rank_sqlfunc, 0, 0); |
| 1008 | for(i=0; zPat[i]; i++){ |
| 1009 | if( (zPat[i]&0x80)==0 && !fossil_isalnum(zPat[i]) ) zPat[i] = ' '; |
| 1010 | } |
| 1011 | blob_init(&sql, 0, 0); |
| 1012 | if( search_index_type(0)==4 ){ |
| 1013 | /* If this repo is still using the legacy FTS4 search index, then |
| 1014 | ** the snippet() function is slightly different */ |
| 1015 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -1005,10 +1005,15 @@ | |
| 1005 | if( srchFlags==0 ) return; |
| 1006 | sqlite3_create_function(g.db, "rank", 1, SQLITE_UTF8|SQLITE_INNOCUOUS, 0, |
| 1007 | search_rank_sqlfunc, 0, 0); |
| 1008 | for(i=0; zPat[i]; i++){ |
| 1009 | if( (zPat[i]&0x80)==0 && !fossil_isalnum(zPat[i]) ) zPat[i] = ' '; |
| 1010 | } |
| 1011 | for(i--; i>=0 && zPat[i]==' '; i--){} |
| 1012 | if( i<0 ){ |
| 1013 | fossil_free(zPat); |
| 1014 | zPat = mprintf("\"\""); |
| 1015 | } |
| 1016 | blob_init(&sql, 0, 0); |
| 1017 | if( search_index_type(0)==4 ){ |
| 1018 | /* If this repo is still using the legacy FTS4 search index, then |
| 1019 | ** the snippet() function is slightly different */ |
| 1020 |