diff --git a/src/calibre/db/sqlite_extension.cpp b/src/calibre/db/sqlite_extension.cpp index 64671c3bb9..daacd3b86a 100644 --- a/src/calibre/db/sqlite_extension.cpp +++ b/src/calibre/db/sqlite_extension.cpp @@ -88,7 +88,7 @@ populate_icu_string(const char *text, int text_sz, icu::UnicodeString &str, std: } // }}} -static char ui_language[16] = {0}; +static char ui_language[16] = {'e', 'n', 0}; static std::mutex global_mutex; class IteratorDescription { diff --git a/src/calibre/db/tests/fts.py b/src/calibre/db/tests/fts.py index 4783cf8b68..fdef37545d 100644 --- a/src/calibre/db/tests/fts.py +++ b/src/calibre/db/tests/fts.py @@ -18,9 +18,9 @@ def print(*args, **kwargs): class TestConn(Connection): - def __init__(self, remove_diacritics=True): + def __init__(self, remove_diacritics=True, language='en'): from calibre_extensions.sqlite_extension import set_ui_language - set_ui_language('en') + set_ui_language(language) super().__init__(':memory:') plugins.load_apsw_extension(self, 'sqlite_extension') options = [] @@ -59,6 +59,14 @@ def tokenize(text, flags=None, remove_diacritics=True): class FTSTest(BaseTest): ae = BaseTest.assertEqual + def setUp(self): + from calibre_extensions.sqlite_extension import set_ui_language + set_ui_language('en') + + def tearDown(self): + from calibre_extensions.sqlite_extension import set_ui_language + set_ui_language('en') + def test_fts_tokenize(self): # {{{ def t(x, s, e, f=0): return {'text': x, 'start': s, 'end': e, 'flags': f} @@ -118,3 +126,22 @@ class FTSTest(BaseTest): self.ae(conn.search('''"don't"'''), [("你>don't<叫mess",)]) self.ae(conn.search("你"), [(">你one two three<',)]) + self.ae(conn.search('two'), [('one >two< three',)]) + for q in ('"one two thr" *', 'one + two + thr*'): + self.ae(conn.search(q), [('>one two three<',)]) + self.ae(conn.search('^one'), [('>one< two three',)]) + self.ae(conn.search('^"one"'), [('>one< two three',)]) + self.ae(conn.search('^two'), []) + conn = TestConn() + conn.insert_text('one two three four five six seven') + self.ae(conn.search('NEAR(one four)'), [('>one< two three >four<…',)]) + self.ae(conn.search('NEAR("one two" "three four")'), [('>one two< >three four<…',)]) + self.ae(conn.search('NEAR(one six, 2)'), []) + + # }}}