mirror of
https://github.com/isar/rusqlite.git
synced 2024-11-23 00:39:20 +08:00
Fix Clippy warnings
This commit is contained in:
parent
1e3dc542a4
commit
5fa3810a4b
@ -63,22 +63,22 @@ use types::{ToSql, ToSqlOutput, FromSql, FromSqlError, ValueRef};
|
|||||||
|
|
||||||
use {Result, Error, Connection, str_to_cstring, InnerConnection};
|
use {Result, Error, Connection, str_to_cstring, InnerConnection};
|
||||||
|
|
||||||
pub fn set_result<'a>(ctx: *mut sqlite3_context, result: &ToSqlOutput<'a>) {
|
pub unsafe fn set_result<'a>(ctx: *mut sqlite3_context, result: &ToSqlOutput<'a>) {
|
||||||
let value = match *result {
|
let value = match *result {
|
||||||
ToSqlOutput::Borrowed(v) => v,
|
ToSqlOutput::Borrowed(v) => v,
|
||||||
ToSqlOutput::Owned(ref v) => ValueRef::from(v),
|
ToSqlOutput::Owned(ref v) => ValueRef::from(v),
|
||||||
|
|
||||||
#[cfg(feature = "blob")]
|
#[cfg(feature = "blob")]
|
||||||
ToSqlOutput::ZeroBlob(len) => {
|
ToSqlOutput::ZeroBlob(len) => {
|
||||||
return unsafe { ffi::sqlite3_result_zeroblob(ctx, len) };
|
return ffi::sqlite3_result_zeroblob(ctx, len);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match value {
|
match value {
|
||||||
ValueRef::Null => unsafe { ffi::sqlite3_result_null(ctx) },
|
ValueRef::Null => ffi::sqlite3_result_null(ctx),
|
||||||
ValueRef::Integer(i) => unsafe { ffi::sqlite3_result_int64(ctx, i) },
|
ValueRef::Integer(i) => ffi::sqlite3_result_int64(ctx, i),
|
||||||
ValueRef::Real(r) => unsafe { ffi::sqlite3_result_double(ctx, r) },
|
ValueRef::Real(r) => ffi::sqlite3_result_double(ctx, r),
|
||||||
ValueRef::Text(s) => unsafe {
|
ValueRef::Text(s) => {
|
||||||
let length = s.len();
|
let length = s.len();
|
||||||
if length > ::std::i32::MAX as usize {
|
if length > ::std::i32::MAX as usize {
|
||||||
ffi::sqlite3_result_error_toobig(ctx);
|
ffi::sqlite3_result_error_toobig(ctx);
|
||||||
@ -96,7 +96,7 @@ pub fn set_result<'a>(ctx: *mut sqlite3_context, result: &ToSqlOutput<'a>) {
|
|||||||
ffi::sqlite3_result_text(ctx, c_str.as_ptr(), length as c_int, destructor);
|
ffi::sqlite3_result_text(ctx, c_str.as_ptr(), length as c_int, destructor);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ValueRef::Blob(b) => unsafe {
|
ValueRef::Blob(b) => {
|
||||||
let length = b.len();
|
let length = b.len();
|
||||||
if length > ::std::i32::MAX as usize {
|
if length > ::std::i32::MAX as usize {
|
||||||
ffi::sqlite3_result_error_toobig(ctx);
|
ffi::sqlite3_result_error_toobig(ctx);
|
||||||
|
@ -58,7 +58,7 @@ impl CSVTab {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl VTab<CSVTabCursor> for CSVTab {
|
impl VTab<CSVTabCursor> for CSVTab {
|
||||||
fn connect(db: *mut ffi::sqlite3, _aux: *mut c_void, args: &[&[u8]]) -> Result<CSVTab> {
|
unsafe fn connect(db: *mut ffi::sqlite3, _aux: *mut c_void, args: &[&[u8]]) -> Result<CSVTab> {
|
||||||
if args.len() < 4 {
|
if args.len() < 4 {
|
||||||
return Err(Error::ModuleError("no CSV file specified".to_owned()));
|
return Err(Error::ModuleError("no CSV file specified".to_owned()));
|
||||||
}
|
}
|
||||||
@ -159,7 +159,7 @@ impl CSVTabCursor {
|
|||||||
fn new(reader: csv::Reader<File>) -> CSVTabCursor {
|
fn new(reader: csv::Reader<File>) -> CSVTabCursor {
|
||||||
CSVTabCursor {
|
CSVTabCursor {
|
||||||
base: Default::default(),
|
base: Default::default(),
|
||||||
reader: reader,
|
reader,
|
||||||
row_number: 0,
|
row_number: 0,
|
||||||
cols: Vec::new(),
|
cols: Vec::new(),
|
||||||
eof: false,
|
eof: false,
|
||||||
@ -168,8 +168,8 @@ impl CSVTabCursor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl VTabCursor<CSVTab> for CSVTabCursor {
|
impl VTabCursor<CSVTab> for CSVTabCursor {
|
||||||
fn vtab(&self) -> &mut CSVTab {
|
fn vtab(&self) -> &CSVTab {
|
||||||
unsafe { &mut *(self.base.pVtab as *mut CSVTab) }
|
unsafe { & *(self.base.pVtab as *const CSVTab) }
|
||||||
}
|
}
|
||||||
|
|
||||||
fn filter(&mut self,
|
fn filter(&mut self,
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
//! Port of C ["intarray"](http://www.sqlite.org/cgi/src/finfo?name=src/test_intarray.h).
|
//! Port of C ["intarray"](http://www.sqlite.org/cgi/src/finfo?name=src/test_intarray.h).
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::default::Default;
|
use std::default::Default;
|
||||||
use std::mem;
|
|
||||||
use std::os::raw::{c_char, c_int, c_void};
|
use std::os::raw::{c_char, c_int, c_void};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
@ -61,14 +60,14 @@ struct IntArrayVTab {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl VTab<IntArrayVTabCursor> for IntArrayVTab {
|
impl VTab<IntArrayVTabCursor> for IntArrayVTab {
|
||||||
fn connect(db: *mut ffi::sqlite3,
|
unsafe fn connect(db: *mut ffi::sqlite3,
|
||||||
aux: *mut c_void,
|
aux: *mut c_void,
|
||||||
_args: &[&[u8]])
|
_args: &[&[u8]])
|
||||||
-> Result<IntArrayVTab> {
|
-> Result<IntArrayVTab> {
|
||||||
let array = unsafe { mem::transmute(aux) };
|
let array = aux as *const Rc<RefCell<Vec<i64>>>;
|
||||||
let vtab = IntArrayVTab {
|
let vtab = IntArrayVTab {
|
||||||
base: Default::default(),
|
base: Default::default(),
|
||||||
array: array,
|
array,
|
||||||
};
|
};
|
||||||
try!(declare_vtab(db, "CREATE TABLE x(value INTEGER PRIMARY KEY)"));
|
try!(declare_vtab(db, "CREATE TABLE x(value INTEGER PRIMARY KEY)"));
|
||||||
Ok(vtab)
|
Ok(vtab)
|
||||||
@ -102,8 +101,8 @@ impl IntArrayVTabCursor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl VTabCursor<IntArrayVTab> for IntArrayVTabCursor {
|
impl VTabCursor<IntArrayVTab> for IntArrayVTabCursor {
|
||||||
fn vtab(&self) -> &mut IntArrayVTab {
|
fn vtab(&self) -> &IntArrayVTab {
|
||||||
unsafe { &mut *(self.base.pVtab as *mut IntArrayVTab) }
|
unsafe { & *(self.base.pVtab as *const IntArrayVTab) }
|
||||||
}
|
}
|
||||||
fn filter(&mut self,
|
fn filter(&mut self,
|
||||||
_idx_num: c_int,
|
_idx_num: c_int,
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
//! (See http://sqlite.org/vtab.html)
|
//! (See http://sqlite.org/vtab.html)
|
||||||
use std::borrow::Cow::{self, Borrowed, Owned};
|
use std::borrow::Cow::{self, Borrowed, Owned};
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::mem;
|
|
||||||
use std::os::raw::{c_char, c_int, c_void};
|
use std::os::raw::{c_char, c_int, c_void};
|
||||||
use std::ptr;
|
use std::ptr;
|
||||||
use std::slice;
|
use std::slice;
|
||||||
@ -46,12 +45,12 @@ pub trait VTab<C: VTabCursor<Self>>: Sized {
|
|||||||
/// Create a new instance of a virtual table in response to a CREATE VIRTUAL TABLE statement.
|
/// Create a new instance of a virtual table in response to a CREATE VIRTUAL TABLE statement.
|
||||||
/// The `db` parameter is a pointer to the SQLite database connection that is executing
|
/// The `db` parameter is a pointer to the SQLite database connection that is executing
|
||||||
/// the CREATE VIRTUAL TABLE statement.
|
/// the CREATE VIRTUAL TABLE statement.
|
||||||
fn create(db: *mut ffi::sqlite3, aux: *mut c_void, args: &[&[u8]]) -> Result<Self> {
|
unsafe fn create(db: *mut ffi::sqlite3, aux: *mut c_void, args: &[&[u8]]) -> Result<Self> {
|
||||||
Self::connect(db, aux, args)
|
Self::connect(db, aux, args)
|
||||||
}
|
}
|
||||||
/// Similar to `create`. The difference is that `connect` is called to establish a new connection
|
/// Similar to `create`. The difference is that `connect` is called to establish a new connection
|
||||||
/// to an _existing_ virtual table whereas `create` is called to create a new virtual table from scratch.
|
/// to an _existing_ virtual table whereas `create` is called to create a new virtual table from scratch.
|
||||||
fn connect(db: *mut ffi::sqlite3, aux: *mut c_void, args: &[&[u8]]) -> Result<Self>;
|
unsafe fn connect(db: *mut ffi::sqlite3, aux: *mut c_void, args: &[&[u8]]) -> Result<Self>;
|
||||||
/// Determine the best way to access the virtual table.
|
/// Determine the best way to access the virtual table.
|
||||||
fn best_index(&self, info: &mut IndexInfo) -> Result<()>;
|
fn best_index(&self, info: &mut IndexInfo) -> Result<()>;
|
||||||
/// Create a new cursor used for accessing a virtual table.
|
/// Create a new cursor used for accessing a virtual table.
|
||||||
@ -183,7 +182,7 @@ impl<'a> IndexConstraintUsage<'a> {
|
|||||||
/// Virtual table cursor trait.
|
/// Virtual table cursor trait.
|
||||||
pub trait VTabCursor<V: VTab<Self>>: Sized {
|
pub trait VTabCursor<V: VTab<Self>>: Sized {
|
||||||
/// Accessor to the associated virtual table.
|
/// Accessor to the associated virtual table.
|
||||||
fn vtab(&self) -> &mut V;
|
fn vtab(&self) -> &V;
|
||||||
/// Begin a search of a virtual table.
|
/// Begin a search of a virtual table.
|
||||||
fn filter(&mut self, idx_num: c_int, idx_str: Option<&str>, args: &Values) -> Result<()>;
|
fn filter(&mut self, idx_num: c_int, idx_str: Option<&str>, args: &Values) -> Result<()>;
|
||||||
/// Advance cursor to the next row of a result set initiated by `filter`.
|
/// Advance cursor to the next row of a result set initiated by `filter`.
|
||||||
@ -206,7 +205,7 @@ impl Context {
|
|||||||
pub fn set_result<T: ToSql>(&mut self, value: &T) {
|
pub fn set_result<T: ToSql>(&mut self, value: &T) {
|
||||||
let t = value.to_sql();
|
let t = value.to_sql();
|
||||||
match t {
|
match t {
|
||||||
Ok(ref value) => set_result(self.0, value),
|
Ok(ref value) => unsafe { set_result(self.0, value) },
|
||||||
Err(err) => unsafe { report_error(self.0, &err) },
|
Err(err) => unsafe { report_error(self.0, &err) },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -296,7 +295,7 @@ impl InnerConnection {
|
|||||||
ffi::sqlite3_create_module_v2(self.db(),
|
ffi::sqlite3_create_module_v2(self.db(),
|
||||||
c_name.as_ptr(),
|
c_name.as_ptr(),
|
||||||
module,
|
module,
|
||||||
mem::transmute(boxed_aux),
|
boxed_aux as *mut c_void,
|
||||||
Some(free_boxed_value::<A>))
|
Some(free_boxed_value::<A>))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -313,9 +312,9 @@ impl InnerConnection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Declare the schema of a virtual table.
|
/// Declare the schema of a virtual table.
|
||||||
pub fn declare_vtab(db: *mut ffi::sqlite3, sql: &str) -> Result<()> {
|
pub unsafe fn declare_vtab(db: *mut ffi::sqlite3, sql: &str) -> Result<()> {
|
||||||
let c_sql = try!(CString::new(sql));
|
let c_sql = try!(CString::new(sql));
|
||||||
let rc = unsafe { ffi::sqlite3_declare_vtab(db, c_sql.as_ptr()) };
|
let rc = ffi::sqlite3_declare_vtab(db, c_sql.as_ptr());
|
||||||
if rc == ffi::SQLITE_OK {
|
if rc == ffi::SQLITE_OK {
|
||||||
Ok(())
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
@ -335,7 +334,7 @@ pub fn escape_double_quote(identifier: &str) -> Cow<str> {
|
|||||||
|
|
||||||
// FIXME copy/paste from function.rs
|
// FIXME copy/paste from function.rs
|
||||||
unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) {
|
unsafe extern "C" fn free_boxed_value<T>(p: *mut c_void) {
|
||||||
let _: Box<T> = Box::from_raw(mem::transmute(p));
|
let _: Box<T> = Box::from_raw(p as *mut T);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
@ -61,7 +61,7 @@ struct SeriesTab {
|
|||||||
|
|
||||||
|
|
||||||
impl VTab<SeriesTabCursor> for SeriesTab {
|
impl VTab<SeriesTabCursor> for SeriesTab {
|
||||||
fn connect(db: *mut ffi::sqlite3,
|
unsafe fn connect(db: *mut ffi::sqlite3,
|
||||||
_aux: *mut c_void,
|
_aux: *mut c_void,
|
||||||
_args: &[&[u8]])
|
_args: &[&[u8]])
|
||||||
-> Result<SeriesTab> {
|
-> Result<SeriesTab> {
|
||||||
@ -172,8 +172,8 @@ impl SeriesTabCursor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl VTabCursor<SeriesTab> for SeriesTabCursor {
|
impl VTabCursor<SeriesTab> for SeriesTabCursor {
|
||||||
fn vtab(&self) -> &mut SeriesTab {
|
fn vtab(&self) -> &SeriesTab {
|
||||||
unsafe { &mut *(self.base.pVtab as *mut SeriesTab) }
|
unsafe { & *(self.base.pVtab as *const SeriesTab) }
|
||||||
}
|
}
|
||||||
fn filter(&mut self,
|
fn filter(&mut self,
|
||||||
idx_num: c_int,
|
idx_num: c_int,
|
||||||
|
Loading…
Reference in New Issue
Block a user