Check current SQLite version while registering module

This commit is contained in:
gwenn 2022-04-04 10:29:35 +02:00 committed by Thom Chiovoloni
parent 6e0684b69f
commit 33e5f127cf
2 changed files with 12 additions and 1 deletions

View File

@ -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<T::Aux>,
) -> 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) => {

View File

@ -88,7 +88,7 @@ fn test_dummy_module() -> rusqlite::Result<()> {
db.create_module::<DummyTab>("dummy", module, None)?;
let version = version_number();
if version < 3_008_012 {
if version < 3_009_000 {
return Ok(());
}