I recently found out that FTS5 extension has been released.
What is the best way to check if my application can use it on users system?
Just python3 version check, or sqlite3.sqlite_version check according to release page?? Or something else?
/ this was previously edit of the OP post, but I moved it down here to keep the question clear
so this feels like it could work, found it in the question here
import sqlite3
con = sqlite3.connect(':memory:')
cur = con.cursor()
cur.execute('pragma compile_options;')
available_pragmas = cur.fetchall()
con.close()
print(available_pragmas)
if ('ENABLE_FTS5',) in available_pragmas:
print('YES')
else:
print('NO')
But what is strange is that I run it in a few virtual machines, and none had fts4 enabled, yet I used it happily like nothing... maybe its fts3/fts4 being rather the same, or maybe its just all wrong.
/edit
from the documentation
Note that enabling FTS3 also makes FTS4 available. There is not a separate SQLITE_ENABLE_FTS4 compile-time option. A build of SQLite either supports both FTS3 and FTS4 or it supports neither.
The documentation you link to mentions that FTS5 is disabled by default. Did you enable it when compiling SQLite?
One quick way to know is to use the peewee
ORM:
from playhouse.sqlite_ext import FTS5Model
FTS5Model.fts5_installed()
The above will return True
if you can use FTS5. You can install peewee
with pip install peewee
.
You could also use the apsw
wrapper, which includes FTS5 by default since version 3.11.0-r1. See the build instructions and use the --enable-all-extensions
flag. The apsw
wrapper uses the amalgamation.
EDIT:
Here is the code from the peewee
source demonstrating how this is done:
def fts5_installed(cls):
if sqlite3.sqlite_version_info[:3] < FTS5_MIN_VERSION:
return False
# Test in-memory DB to determine if the FTS5 extension is installed.
tmp_db = sqlite3.connect(':memory:')
try:
tmp_db.execute('CREATE VIRTUAL TABLE fts5test USING fts5 (data);')
except:
try:
sqlite3.enable_load_extension(True)
sqlite3.load_extension('fts5')
except:
return False
else:
cls._meta.database.load_extension('fts5')
finally:
tmp_db.close()
return True
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With