adding ability to work with sqlite compiled with -DSQLITE_OMIT_DECLTYPE

fix #751
This commit is contained in:
Evgeniy A. Dushistov 2020-06-01 00:02:18 +03:00
parent 8cdfaf36ae
commit d16748ac9f
3 changed files with 10 additions and 2 deletions

View File

@ -59,6 +59,7 @@ in_gecko = ["modern_sqlite", "libsqlite3-sys/in_gecko"]
bundled-windows = ["libsqlite3-sys/bundled-windows"] bundled-windows = ["libsqlite3-sys/bundled-windows"]
# Build bundled sqlite with -fsanitize=address # Build bundled sqlite with -fsanitize=address
with-asan = ["libsqlite3-sys/with-asan"] with-asan = ["libsqlite3-sys/with-asan"]
column_decltype = []
# Helper feature for enabling both `bundled` and most non-build-related optional # Helper feature for enabling both `bundled` and most non-build-related optional
# features or dependencies. This is useful for running tests / clippy / etc. New # features or dependencies. This is useful for running tests / clippy / etc. New
@ -71,6 +72,7 @@ bundled-full = [
"bundled", "bundled",
"chrono", "chrono",
"collation", "collation",
"column_decltype",
"csvtab", "csvtab",
"extra_check", "extra_check",
"functions", "functions",
@ -134,7 +136,7 @@ name = "cache"
harness = false harness = false
[package.metadata.docs.rs] [package.metadata.docs.rs]
features = [ "backup", "blob", "chrono", "collation", "functions", "limits", "load_extension", "serde_json", "trace", "url", "vtab", "window", "modern_sqlite" ] features = [ "backup", "blob", "chrono", "collation", "functions", "limits", "load_extension", "serde_json", "trace", "url", "vtab", "window", "modern_sqlite", "column_decltype" ]
all-features = false all-features = false
no-default-features = true no-default-features = true
default-target = "x86_64-unknown-linux-gnu" default-target = "x86_64-unknown-linux-gnu"

View File

@ -86,6 +86,7 @@ impl Statement<'_> {
} }
/// Returns a slice describing the columns of the result of the query. /// Returns a slice describing the columns of the result of the query.
#[cfg(feature = "column_decltype")]
pub fn columns(&self) -> Vec<Column> { pub fn columns(&self) -> Vec<Column> {
let n = self.column_count(); let n = self.column_count();
let mut cols = Vec::with_capacity(n as usize); let mut cols = Vec::with_capacity(n as usize);
@ -123,6 +124,7 @@ impl<'stmt> Rows<'stmt> {
} }
/// Returns a slice describing the columns of the Rows. /// Returns a slice describing the columns of the Rows.
#[cfg(feature = "column_decltype")]
pub fn columns(&self) -> Option<Vec<Column>> { pub fn columns(&self) -> Option<Vec<Column>> {
self.stmt.map(Statement::columns) self.stmt.map(Statement::columns)
} }
@ -150,6 +152,7 @@ impl<'stmt> Row<'stmt> {
} }
/// Returns a slice describing the columns of the Row. /// Returns a slice describing the columns of the Row.
#[cfg(feature = "column_decltype")]
pub fn columns(&self) -> Vec<Column> { pub fn columns(&self) -> Vec<Column> {
self.stmt.columns() self.stmt.columns()
} }
@ -157,11 +160,13 @@ impl<'stmt> Row<'stmt> {
#[cfg(test)] #[cfg(test)]
mod test { mod test {
use super::Column;
use crate::Connection; use crate::Connection;
#[test] #[test]
#[cfg(feature = "column_decltype")]
fn test_columns() { fn test_columns() {
use super::Column;
let db = Connection::open_in_memory().unwrap(); let db = Connection::open_in_memory().unwrap();
let query = db.prepare("SELECT * FROM sqlite_master").unwrap(); let query = db.prepare("SELECT * FROM sqlite_master").unwrap();
let columns = query.columns(); let columns = query.columns();

View File

@ -63,6 +63,7 @@ impl RawStatement {
unsafe { ffi::sqlite3_column_type(self.ptr, idx as c_int) } unsafe { ffi::sqlite3_column_type(self.ptr, idx as c_int) }
} }
#[cfg(feature = "column_decltype")]
pub fn column_decltype(&self, idx: usize) -> Option<&CStr> { pub fn column_decltype(&self, idx: usize) -> Option<&CStr> {
unsafe { unsafe {
let decltype = ffi::sqlite3_column_decltype(self.ptr, idx as c_int); let decltype = ffi::sqlite3_column_decltype(self.ptr, idx as c_int);