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(()); }