From 33e5f127cfc056377319e4cf29fd9e0f4dddc0a4 Mon Sep 17 00:00:00 2001 From: gwenn Date: Mon, 4 Apr 2022 10:29:35 +0200 Subject: [PATCH] Check current SQLite version while registering module --- src/vtab/mod.rs | 11 +++++++++++ tests/vtab.rs | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/vtab/mod.rs b/src/vtab/mod.rs index 0856d96..e2b6a11 100644 --- a/src/vtab/mod.rs +++ b/src/vtab/mod.rs @@ -62,11 +62,15 @@ pub enum VTabKind { /// Non-eponymous Default, /// [`create`](CreateVTab::create) == [`connect`](VTab::connect) + /// + /// See [SQLite doc](https://sqlite.org/vtab.html#eponymous_virtual_tables) Eponymous, /// No [`create`](CreateVTab::create) / [`destroy`](CreateVTab::destroy) or /// not used /// /// SQLite >= 3.9.0 + /// + /// See [SQLite doc](https://sqlite.org/vtab.html#eponymous_only_virtual_tables) EponymousOnly, } @@ -835,6 +839,13 @@ impl InnerConnection { module: &'static Module<'vtab, T>, aux: Option, ) -> Result<()> { + use crate::version; + if version::version_number() < 3_009_000 && module.base.xCreate.is_none() { + return Err(Error::ModuleError(format!( + "Eponymous-only virtual table not supported by SQLite version {}", + version::version() + ))); + } let c_name = str_to_cstring(module_name)?; let r = match aux { Some(aux) => { diff --git a/tests/vtab.rs b/tests/vtab.rs index bb51356..6558206 100644 --- a/tests/vtab.rs +++ b/tests/vtab.rs @@ -88,7 +88,7 @@ fn test_dummy_module() -> rusqlite::Result<()> { db.create_module::("dummy", module, None)?; let version = version_number(); - if version < 3_008_012 { + if version < 3_009_000 { return Ok(()); }