diff --git a/setup/extensions.json b/setup/extensions.json index 4abbde7edd..8397388f57 100644 --- a/setup/extensions.json +++ b/setup/extensions.json @@ -75,7 +75,7 @@ "name": "sqlite_extension", "headers": "calibre/utils/cpp_binding.h", "sources": "calibre/db/sqlite_extension.cpp", - "needs_c++11": true, + "needs_c++14": true, "libraries": "icudata icui18n icuuc icuio stemmer", "windows_libraries": "icudt icuin icuuc icuio libstemmer", "lib_dirs": "!icu_lib_dirs", diff --git a/src/calibre/db/sqlite_extension.cpp b/src/calibre/db/sqlite_extension.cpp index 1b98f55cd8..7757de6142 100644 --- a/src/calibre/db/sqlite_extension.cpp +++ b/src/calibre/db/sqlite_extension.cpp @@ -246,8 +246,7 @@ private: if (!lang[0]) lang = current_ui_language.c_str(); auto ans = stemmers.find(lang); if (ans == stemmers.end()) { - if (stem_words) stemmers[lang] = StemmerPtr(new Stemmer(lang)); - else stemmers[lang] = StemmerPtr(new Stemmer()); + stemmers[lang] = stem_words ? std::make_unique(lang) : std::make_unique(); ans = stemmers.find(lang); } return ans->second; @@ -375,10 +374,11 @@ _tok_create(void *sqlite3, const char **azArg, int nArg, Fts5Tokenizer **ppOut, int rc = SQLITE_OK; try { Tokenizer *p = new Tokenizer(azArg, nArg, stem_words); - *ppOut = reinterpret_cast(p); if (p->constructor_error != SQLITE_OK) { rc = p->constructor_error; delete p; + } else { + *ppOut = reinterpret_cast(p); } } catch (std::bad_alloc const&) { return SQLITE_NOMEM;