Fossil SCM
Many improvements to the indexed search debugging logic.
Commit
53d1f053ad9271639bfc998ead403fcc55aa877f54171825a4725d0baca1c421
Parent
4d351608666ae13…
2 files changed
+68
-15
+1
+68
-15
| --- src/search.c | ||
| +++ src/search.c | ||
| @@ -1852,18 +1852,25 @@ | ||
| 1852 | 1852 | ** |
| 1853 | 1853 | ** The current search settings are displayed after any changes are applied. |
| 1854 | 1854 | ** Run this command with no arguments to simply see the settings. |
| 1855 | 1855 | */ |
| 1856 | 1856 | void fts_config_cmd(void){ |
| 1857 | - static const struct { int iCmd; const char *z; } aCmd[] = { | |
| 1857 | + static const struct { | |
| 1858 | + int iCmd; | |
| 1859 | + const char *z; | |
| 1860 | + } aCmd[] = { | |
| 1858 | 1861 | { 1, "reindex" }, |
| 1859 | 1862 | { 2, "index" }, |
| 1860 | 1863 | { 3, "disable" }, |
| 1861 | 1864 | { 4, "enable" }, |
| 1862 | 1865 | { 5, "stemmer" }, |
| 1863 | 1866 | }; |
| 1864 | - static const struct { const char *zSetting; const char *zName; const char *zSw; } aSetng[] = { | |
| 1867 | + static const struct { | |
| 1868 | + const char *zSetting; | |
| 1869 | + const char *zName; | |
| 1870 | + const char *zSw; | |
| 1871 | + } aSetng[] = { | |
| 1865 | 1872 | { "search-ci", "check-in search:", "c" }, |
| 1866 | 1873 | { "search-doc", "document search:", "d" }, |
| 1867 | 1874 | { "search-tkt", "ticket search:", "t" }, |
| 1868 | 1875 | { "search-wiki", "wiki search:", "w" }, |
| 1869 | 1876 | { "search-technote", "tech note search:", "e" }, |
| @@ -1953,48 +1960,77 @@ | ||
| 1953 | 1960 | Stmt q; |
| 1954 | 1961 | const char *zId = P("id"); |
| 1955 | 1962 | const char *zType = P("y"); |
| 1956 | 1963 | const char *zIdxed = P("ixed"); |
| 1957 | 1964 | int id; |
| 1958 | - int cnt = 0; | |
| 1965 | + int cnt1 = 0, cnt2 = 0, cnt3 = 0; | |
| 1959 | 1966 | login_check_credentials(); |
| 1960 | 1967 | if( !g.perm.Admin ){ login_needed(0); return; } |
| 1961 | 1968 | if( !search_index_exists() ){ |
| 1962 | 1969 | @ <p>Indexed search is disabled |
| 1963 | 1970 | style_footer(); |
| 1964 | 1971 | return; |
| 1965 | 1972 | } |
| 1973 | + search_sql_setup(g.db); | |
| 1974 | + style_submenu_element("Setup","%R/srchsetup"); | |
| 1966 | 1975 | if( zId!=0 && (id = atoi(zId))>0 ){ |
| 1967 | 1976 | /* Show information about a single ftsdocs entry */ |
| 1968 | 1977 | style_header("Information about ftsdoc entry %d", id); |
| 1978 | + style_submenu_element("Summary","%R/test-ftsdocs"); | |
| 1969 | 1979 | db_prepare(&q, |
| 1970 | 1980 | "SELECT type||rid, name, idxed, label, url, datetime(mtime)" |
| 1971 | 1981 | " FROM ftsdocs WHERE rowid=%d", id |
| 1972 | 1982 | ); |
| 1973 | 1983 | if( db_step(&q)==SQLITE_ROW ){ |
| 1974 | 1984 | const char *zUrl = db_column_text(&q,4); |
| 1985 | + const char *zDocId = db_column_text(&q,0); | |
| 1986 | + char *zName; | |
| 1987 | + char *z; | |
| 1975 | 1988 | @ <table border=0> |
| 1976 | - @ <tr><td align='right'>rowid:<td> <td>%d(id) | |
| 1977 | - @ <tr><td align='right'>id:<td><td>%s(db_column_text(&q,0)) | |
| 1989 | + @ <tr><td align='right'>docid:<td> <td>%d(id) | |
| 1990 | + @ <tr><td align='right'>id:<td><td>%s(zDocId) | |
| 1978 | 1991 | @ <tr><td align='right'>name:<td><td>%h(db_column_text(&q,1)) |
| 1979 | 1992 | @ <tr><td align='right'>idxed:<td><td>%d(db_column_int(&q,2)) |
| 1980 | 1993 | @ <tr><td align='right'>label:<td><td>%h(db_column_text(&q,3)) |
| 1981 | 1994 | @ <tr><td align='right'>url:<td><td> |
| 1982 | 1995 | @ <a href='%R%s(zUrl)'>%h(zUrl)</a> |
| 1983 | 1996 | @ <tr><td align='right'>mtime:<td><td>%s(db_column_text(&q,5)) |
| 1997 | + z = db_text(0, "SELECT title FROM ftsidx WHERE docid=%d",id); | |
| 1998 | + if( z && z[0] ){ | |
| 1999 | + @ <tr><td align="right">title:<td><td>%h(z) | |
| 2000 | + fossil_free(z); | |
| 2001 | + } | |
| 2002 | + z = db_text(0, "SELECT body FROM ftsidx WHERE docid=%d",id); | |
| 2003 | + if( z && z[0] ){ | |
| 2004 | + @ <tr><td align="right" valign="top">body:<td><td>%h(z) | |
| 2005 | + fossil_free(z); | |
| 2006 | + } | |
| 1984 | 2007 | @ </table> |
| 2008 | + zName = mprintf("Indexed '%c' docs",zDocId[0]); | |
| 2009 | + style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=1",zDocId[0]); | |
| 2010 | + zName = mprintf("Unindexed '%c' docs",zDocId[0]); | |
| 2011 | + style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=0",zDocId[0]); | |
| 1985 | 2012 | } |
| 1986 | 2013 | db_finalize(&q); |
| 1987 | 2014 | style_footer(); |
| 1988 | 2015 | return; |
| 1989 | 2016 | } |
| 1990 | 2017 | if( zType!=0 && zType[0]!=0 && zType[1]==0 && |
| 1991 | 2018 | zIdxed!=0 && (zIdxed[0]=='1' || zIdxed[0]=='0') && zIdxed[1]==0 |
| 1992 | 2019 | ){ |
| 1993 | 2020 | int ixed = zIdxed[0]=='1'; |
| 2021 | + char *zName; | |
| 1994 | 2022 | style_header("List of '%c' documents that are%s indexed", |
| 1995 | 2023 | zType[0], ixed ? "" : " not"); |
| 2024 | + style_submenu_element("Summary","%R/test-ftsdocs"); | |
| 2025 | + if( ixed==0 ){ | |
| 2026 | + zName = mprintf("Indexed '%c' docs",zType[0]); | |
| 2027 | + style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=1",zType[0]); | |
| 2028 | + }else{ | |
| 2029 | + zName = mprintf("Unindexed '%c' docs",zType[0]); | |
| 2030 | + style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=0",zType[0]); | |
| 2031 | + } | |
| 1996 | 2032 | db_prepare(&q, |
| 1997 | 2033 | "SELECT rowid, type||rid ||' '|| coalesce(label,'')" |
| 1998 | 2034 | " FROM ftsdocs WHERE type='%c' AND %s idxed", |
| 1999 | 2035 | zType[0], ixed ? "" : "NOT" |
| 2000 | 2036 | ); |
| @@ -2008,29 +2044,46 @@ | ||
| 2008 | 2044 | style_footer(); |
| 2009 | 2045 | return; |
| 2010 | 2046 | } |
| 2011 | 2047 | style_header("Summary of ftsdocs"); |
| 2012 | 2048 | db_prepare(&q, |
| 2013 | - "SELECT type, idxed, count(*) FROM ftsdocs" | |
| 2014 | - " GROUP BY 1, 2 ORDER BY 3 DESC" | |
| 2049 | + "SELECT type, sum(idxed IS TRUE), sum(idxed IS FALSE), count(*)" | |
| 2050 | + " FROM ftsdocs" | |
| 2051 | + " GROUP BY 1 ORDER BY 4 DESC" | |
| 2015 | 2052 | ); |
| 2016 | 2053 | @ <table border=1 cellpadding=3 cellspacing=0> |
| 2017 | 2054 | @ <thead> |
| 2018 | - @ <tr><th>Type<th>Indexed?<th>Count<th>Link | |
| 2055 | + @ <tr><th>Type<th>Indexed<th>Unindexed<th>Total | |
| 2019 | 2056 | @ </thead> |
| 2020 | 2057 | @ <tbody> |
| 2021 | 2058 | while( db_step(&q)==SQLITE_ROW ){ |
| 2022 | 2059 | const char *zType = db_column_text(&q,0); |
| 2023 | - int idxed = db_column_int(&q,1); | |
| 2024 | - int n = db_column_int(&q,2); | |
| 2025 | - @ <tr><td>%h(zType)<td>%d(idxed) | |
| 2026 | - @ <td>%d(n) | |
| 2027 | - @ <td><a href='test-ftsdocs?y=%s(zType)&ixed=%d(idxed)'>listing</a> | |
| 2060 | + int nIndexed = db_column_int(&q, 1); | |
| 2061 | + int nUnindexed = db_column_int(&q, 2); | |
| 2062 | + int nTotal = db_column_int(&q, 3); | |
| 2063 | + @ <tr><td>%h(zType) | |
| 2064 | + if( nIndexed>0 ){ | |
| 2065 | + @ <td align="right"><a href='%R/test-ftsdocs?y=%s(zType)&ixed=1'>\ | |
| 2066 | + @ %d(nIndexed)</a> | |
| 2067 | + }else{ | |
| 2068 | + @ <td align="right">0 | |
| 2069 | + } | |
| 2070 | + if( nUnindexed>0 ){ | |
| 2071 | + @ <td align="right"><a href='%R/test-ftsdocs?y=%s(zType)&ixed=0'>\ | |
| 2072 | + @ %d(nUnindexed)</a> | |
| 2073 | + }else{ | |
| 2074 | + @ <td align="right">0 | |
| 2075 | + } | |
| 2076 | + @ <td align="right">%d(nTotal) | |
| 2028 | 2077 | @ </tr> |
| 2029 | - cnt += n; | |
| 2078 | + cnt1 += nIndexed; | |
| 2079 | + cnt2 += nUnindexed; | |
| 2080 | + cnt3 += nTotal; | |
| 2030 | 2081 | } |
| 2082 | + db_finalize(&q); | |
| 2031 | 2083 | @ </tbody><tfooter> |
| 2032 | - @ <tr><th>Total<th><th>%d(cnt)<th> | |
| 2084 | + @ <tr><th>Total<th align="right">%d(cnt1)<th align="right">%d(cnt2) | |
| 2085 | + @ <th align="right">%d(cnt3) | |
| 2033 | 2086 | @ </tfooter> |
| 2034 | 2087 | @ </table> |
| 2035 | 2088 | style_footer(); |
| 2036 | 2089 | } |
| 2037 | 2090 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -1852,18 +1852,25 @@ | |
| 1852 | ** |
| 1853 | ** The current search settings are displayed after any changes are applied. |
| 1854 | ** Run this command with no arguments to simply see the settings. |
| 1855 | */ |
| 1856 | void fts_config_cmd(void){ |
| 1857 | static const struct { int iCmd; const char *z; } aCmd[] = { |
| 1858 | { 1, "reindex" }, |
| 1859 | { 2, "index" }, |
| 1860 | { 3, "disable" }, |
| 1861 | { 4, "enable" }, |
| 1862 | { 5, "stemmer" }, |
| 1863 | }; |
| 1864 | static const struct { const char *zSetting; const char *zName; const char *zSw; } aSetng[] = { |
| 1865 | { "search-ci", "check-in search:", "c" }, |
| 1866 | { "search-doc", "document search:", "d" }, |
| 1867 | { "search-tkt", "ticket search:", "t" }, |
| 1868 | { "search-wiki", "wiki search:", "w" }, |
| 1869 | { "search-technote", "tech note search:", "e" }, |
| @@ -1953,48 +1960,77 @@ | |
| 1953 | Stmt q; |
| 1954 | const char *zId = P("id"); |
| 1955 | const char *zType = P("y"); |
| 1956 | const char *zIdxed = P("ixed"); |
| 1957 | int id; |
| 1958 | int cnt = 0; |
| 1959 | login_check_credentials(); |
| 1960 | if( !g.perm.Admin ){ login_needed(0); return; } |
| 1961 | if( !search_index_exists() ){ |
| 1962 | @ <p>Indexed search is disabled |
| 1963 | style_footer(); |
| 1964 | return; |
| 1965 | } |
| 1966 | if( zId!=0 && (id = atoi(zId))>0 ){ |
| 1967 | /* Show information about a single ftsdocs entry */ |
| 1968 | style_header("Information about ftsdoc entry %d", id); |
| 1969 | db_prepare(&q, |
| 1970 | "SELECT type||rid, name, idxed, label, url, datetime(mtime)" |
| 1971 | " FROM ftsdocs WHERE rowid=%d", id |
| 1972 | ); |
| 1973 | if( db_step(&q)==SQLITE_ROW ){ |
| 1974 | const char *zUrl = db_column_text(&q,4); |
| 1975 | @ <table border=0> |
| 1976 | @ <tr><td align='right'>rowid:<td> <td>%d(id) |
| 1977 | @ <tr><td align='right'>id:<td><td>%s(db_column_text(&q,0)) |
| 1978 | @ <tr><td align='right'>name:<td><td>%h(db_column_text(&q,1)) |
| 1979 | @ <tr><td align='right'>idxed:<td><td>%d(db_column_int(&q,2)) |
| 1980 | @ <tr><td align='right'>label:<td><td>%h(db_column_text(&q,3)) |
| 1981 | @ <tr><td align='right'>url:<td><td> |
| 1982 | @ <a href='%R%s(zUrl)'>%h(zUrl)</a> |
| 1983 | @ <tr><td align='right'>mtime:<td><td>%s(db_column_text(&q,5)) |
| 1984 | @ </table> |
| 1985 | } |
| 1986 | db_finalize(&q); |
| 1987 | style_footer(); |
| 1988 | return; |
| 1989 | } |
| 1990 | if( zType!=0 && zType[0]!=0 && zType[1]==0 && |
| 1991 | zIdxed!=0 && (zIdxed[0]=='1' || zIdxed[0]=='0') && zIdxed[1]==0 |
| 1992 | ){ |
| 1993 | int ixed = zIdxed[0]=='1'; |
| 1994 | style_header("List of '%c' documents that are%s indexed", |
| 1995 | zType[0], ixed ? "" : " not"); |
| 1996 | db_prepare(&q, |
| 1997 | "SELECT rowid, type||rid ||' '|| coalesce(label,'')" |
| 1998 | " FROM ftsdocs WHERE type='%c' AND %s idxed", |
| 1999 | zType[0], ixed ? "" : "NOT" |
| 2000 | ); |
| @@ -2008,29 +2044,46 @@ | |
| 2008 | style_footer(); |
| 2009 | return; |
| 2010 | } |
| 2011 | style_header("Summary of ftsdocs"); |
| 2012 | db_prepare(&q, |
| 2013 | "SELECT type, idxed, count(*) FROM ftsdocs" |
| 2014 | " GROUP BY 1, 2 ORDER BY 3 DESC" |
| 2015 | ); |
| 2016 | @ <table border=1 cellpadding=3 cellspacing=0> |
| 2017 | @ <thead> |
| 2018 | @ <tr><th>Type<th>Indexed?<th>Count<th>Link |
| 2019 | @ </thead> |
| 2020 | @ <tbody> |
| 2021 | while( db_step(&q)==SQLITE_ROW ){ |
| 2022 | const char *zType = db_column_text(&q,0); |
| 2023 | int idxed = db_column_int(&q,1); |
| 2024 | int n = db_column_int(&q,2); |
| 2025 | @ <tr><td>%h(zType)<td>%d(idxed) |
| 2026 | @ <td>%d(n) |
| 2027 | @ <td><a href='test-ftsdocs?y=%s(zType)&ixed=%d(idxed)'>listing</a> |
| 2028 | @ </tr> |
| 2029 | cnt += n; |
| 2030 | } |
| 2031 | @ </tbody><tfooter> |
| 2032 | @ <tr><th>Total<th><th>%d(cnt)<th> |
| 2033 | @ </tfooter> |
| 2034 | @ </table> |
| 2035 | style_footer(); |
| 2036 | } |
| 2037 |
| --- src/search.c | |
| +++ src/search.c | |
| @@ -1852,18 +1852,25 @@ | |
| 1852 | ** |
| 1853 | ** The current search settings are displayed after any changes are applied. |
| 1854 | ** Run this command with no arguments to simply see the settings. |
| 1855 | */ |
| 1856 | void fts_config_cmd(void){ |
| 1857 | static const struct { |
| 1858 | int iCmd; |
| 1859 | const char *z; |
| 1860 | } aCmd[] = { |
| 1861 | { 1, "reindex" }, |
| 1862 | { 2, "index" }, |
| 1863 | { 3, "disable" }, |
| 1864 | { 4, "enable" }, |
| 1865 | { 5, "stemmer" }, |
| 1866 | }; |
| 1867 | static const struct { |
| 1868 | const char *zSetting; |
| 1869 | const char *zName; |
| 1870 | const char *zSw; |
| 1871 | } aSetng[] = { |
| 1872 | { "search-ci", "check-in search:", "c" }, |
| 1873 | { "search-doc", "document search:", "d" }, |
| 1874 | { "search-tkt", "ticket search:", "t" }, |
| 1875 | { "search-wiki", "wiki search:", "w" }, |
| 1876 | { "search-technote", "tech note search:", "e" }, |
| @@ -1953,48 +1960,77 @@ | |
| 1960 | Stmt q; |
| 1961 | const char *zId = P("id"); |
| 1962 | const char *zType = P("y"); |
| 1963 | const char *zIdxed = P("ixed"); |
| 1964 | int id; |
| 1965 | int cnt1 = 0, cnt2 = 0, cnt3 = 0; |
| 1966 | login_check_credentials(); |
| 1967 | if( !g.perm.Admin ){ login_needed(0); return; } |
| 1968 | if( !search_index_exists() ){ |
| 1969 | @ <p>Indexed search is disabled |
| 1970 | style_footer(); |
| 1971 | return; |
| 1972 | } |
| 1973 | search_sql_setup(g.db); |
| 1974 | style_submenu_element("Setup","%R/srchsetup"); |
| 1975 | if( zId!=0 && (id = atoi(zId))>0 ){ |
| 1976 | /* Show information about a single ftsdocs entry */ |
| 1977 | style_header("Information about ftsdoc entry %d", id); |
| 1978 | style_submenu_element("Summary","%R/test-ftsdocs"); |
| 1979 | db_prepare(&q, |
| 1980 | "SELECT type||rid, name, idxed, label, url, datetime(mtime)" |
| 1981 | " FROM ftsdocs WHERE rowid=%d", id |
| 1982 | ); |
| 1983 | if( db_step(&q)==SQLITE_ROW ){ |
| 1984 | const char *zUrl = db_column_text(&q,4); |
| 1985 | const char *zDocId = db_column_text(&q,0); |
| 1986 | char *zName; |
| 1987 | char *z; |
| 1988 | @ <table border=0> |
| 1989 | @ <tr><td align='right'>docid:<td> <td>%d(id) |
| 1990 | @ <tr><td align='right'>id:<td><td>%s(zDocId) |
| 1991 | @ <tr><td align='right'>name:<td><td>%h(db_column_text(&q,1)) |
| 1992 | @ <tr><td align='right'>idxed:<td><td>%d(db_column_int(&q,2)) |
| 1993 | @ <tr><td align='right'>label:<td><td>%h(db_column_text(&q,3)) |
| 1994 | @ <tr><td align='right'>url:<td><td> |
| 1995 | @ <a href='%R%s(zUrl)'>%h(zUrl)</a> |
| 1996 | @ <tr><td align='right'>mtime:<td><td>%s(db_column_text(&q,5)) |
| 1997 | z = db_text(0, "SELECT title FROM ftsidx WHERE docid=%d",id); |
| 1998 | if( z && z[0] ){ |
| 1999 | @ <tr><td align="right">title:<td><td>%h(z) |
| 2000 | fossil_free(z); |
| 2001 | } |
| 2002 | z = db_text(0, "SELECT body FROM ftsidx WHERE docid=%d",id); |
| 2003 | if( z && z[0] ){ |
| 2004 | @ <tr><td align="right" valign="top">body:<td><td>%h(z) |
| 2005 | fossil_free(z); |
| 2006 | } |
| 2007 | @ </table> |
| 2008 | zName = mprintf("Indexed '%c' docs",zDocId[0]); |
| 2009 | style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=1",zDocId[0]); |
| 2010 | zName = mprintf("Unindexed '%c' docs",zDocId[0]); |
| 2011 | style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=0",zDocId[0]); |
| 2012 | } |
| 2013 | db_finalize(&q); |
| 2014 | style_footer(); |
| 2015 | return; |
| 2016 | } |
| 2017 | if( zType!=0 && zType[0]!=0 && zType[1]==0 && |
| 2018 | zIdxed!=0 && (zIdxed[0]=='1' || zIdxed[0]=='0') && zIdxed[1]==0 |
| 2019 | ){ |
| 2020 | int ixed = zIdxed[0]=='1'; |
| 2021 | char *zName; |
| 2022 | style_header("List of '%c' documents that are%s indexed", |
| 2023 | zType[0], ixed ? "" : " not"); |
| 2024 | style_submenu_element("Summary","%R/test-ftsdocs"); |
| 2025 | if( ixed==0 ){ |
| 2026 | zName = mprintf("Indexed '%c' docs",zType[0]); |
| 2027 | style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=1",zType[0]); |
| 2028 | }else{ |
| 2029 | zName = mprintf("Unindexed '%c' docs",zType[0]); |
| 2030 | style_submenu_element(zName,"%R/test-ftsdocs?y=%c&ixed=0",zType[0]); |
| 2031 | } |
| 2032 | db_prepare(&q, |
| 2033 | "SELECT rowid, type||rid ||' '|| coalesce(label,'')" |
| 2034 | " FROM ftsdocs WHERE type='%c' AND %s idxed", |
| 2035 | zType[0], ixed ? "" : "NOT" |
| 2036 | ); |
| @@ -2008,29 +2044,46 @@ | |
| 2044 | style_footer(); |
| 2045 | return; |
| 2046 | } |
| 2047 | style_header("Summary of ftsdocs"); |
| 2048 | db_prepare(&q, |
| 2049 | "SELECT type, sum(idxed IS TRUE), sum(idxed IS FALSE), count(*)" |
| 2050 | " FROM ftsdocs" |
| 2051 | " GROUP BY 1 ORDER BY 4 DESC" |
| 2052 | ); |
| 2053 | @ <table border=1 cellpadding=3 cellspacing=0> |
| 2054 | @ <thead> |
| 2055 | @ <tr><th>Type<th>Indexed<th>Unindexed<th>Total |
| 2056 | @ </thead> |
| 2057 | @ <tbody> |
| 2058 | while( db_step(&q)==SQLITE_ROW ){ |
| 2059 | const char *zType = db_column_text(&q,0); |
| 2060 | int nIndexed = db_column_int(&q, 1); |
| 2061 | int nUnindexed = db_column_int(&q, 2); |
| 2062 | int nTotal = db_column_int(&q, 3); |
| 2063 | @ <tr><td>%h(zType) |
| 2064 | if( nIndexed>0 ){ |
| 2065 | @ <td align="right"><a href='%R/test-ftsdocs?y=%s(zType)&ixed=1'>\ |
| 2066 | @ %d(nIndexed)</a> |
| 2067 | }else{ |
| 2068 | @ <td align="right">0 |
| 2069 | } |
| 2070 | if( nUnindexed>0 ){ |
| 2071 | @ <td align="right"><a href='%R/test-ftsdocs?y=%s(zType)&ixed=0'>\ |
| 2072 | @ %d(nUnindexed)</a> |
| 2073 | }else{ |
| 2074 | @ <td align="right">0 |
| 2075 | } |
| 2076 | @ <td align="right">%d(nTotal) |
| 2077 | @ </tr> |
| 2078 | cnt1 += nIndexed; |
| 2079 | cnt2 += nUnindexed; |
| 2080 | cnt3 += nTotal; |
| 2081 | } |
| 2082 | db_finalize(&q); |
| 2083 | @ </tbody><tfooter> |
| 2084 | @ <tr><th>Total<th align="right">%d(cnt1)<th align="right">%d(cnt2) |
| 2085 | @ <th align="right">%d(cnt3) |
| 2086 | @ </tfooter> |
| 2087 | @ </table> |
| 2088 | style_footer(); |
| 2089 | } |
| 2090 |
+1
| --- src/setup.c | ||
| +++ src/setup.c | ||
| @@ -1640,10 +1640,11 @@ | ||
| 1640 | 1640 | @ <p>Currently using an SQLite FTS4 search index. This makes search |
| 1641 | 1641 | @ run faster, especially on large repositories, but takes up space.</p> |
| 1642 | 1642 | onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); |
| 1643 | 1643 | @ <p><input type="submit" name="fts0" value="Delete The Full-Text Index"> |
| 1644 | 1644 | @ <input type="submit" name="fts1" value="Rebuild The Full-Text Index"> |
| 1645 | + style_submenu_element("FTS Index Debugging","%R/test-ftsdocs"); | |
| 1645 | 1646 | }else{ |
| 1646 | 1647 | @ <p>The SQLite FTS4 search index is disabled. All searching will be |
| 1647 | 1648 | @ a full-text scan. This usually works fine, but can be slow for |
| 1648 | 1649 | @ larger repositories.</p> |
| 1649 | 1650 | onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); |
| 1650 | 1651 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -1640,10 +1640,11 @@ | |
| 1640 | @ <p>Currently using an SQLite FTS4 search index. This makes search |
| 1641 | @ run faster, especially on large repositories, but takes up space.</p> |
| 1642 | onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); |
| 1643 | @ <p><input type="submit" name="fts0" value="Delete The Full-Text Index"> |
| 1644 | @ <input type="submit" name="fts1" value="Rebuild The Full-Text Index"> |
| 1645 | }else{ |
| 1646 | @ <p>The SQLite FTS4 search index is disabled. All searching will be |
| 1647 | @ a full-text scan. This usually works fine, but can be slow for |
| 1648 | @ larger repositories.</p> |
| 1649 | onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); |
| 1650 |
| --- src/setup.c | |
| +++ src/setup.c | |
| @@ -1640,10 +1640,11 @@ | |
| 1640 | @ <p>Currently using an SQLite FTS4 search index. This makes search |
| 1641 | @ run faster, especially on large repositories, but takes up space.</p> |
| 1642 | onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); |
| 1643 | @ <p><input type="submit" name="fts0" value="Delete The Full-Text Index"> |
| 1644 | @ <input type="submit" name="fts1" value="Rebuild The Full-Text Index"> |
| 1645 | style_submenu_element("FTS Index Debugging","%R/test-ftsdocs"); |
| 1646 | }else{ |
| 1647 | @ <p>The SQLite FTS4 search index is disabled. All searching will be |
| 1648 | @ a full-text scan. This usually works fine, but can be slow for |
| 1649 | @ larger repositories.</p> |
| 1650 | onoff_attribute("Use Porter Stemmer","search-stemmer","ss",0,0); |
| 1651 |