diff --git a/rdbc-mysql/src/lib.rs b/rdbc-mysql/src/lib.rs index b53a6f5..36b1aac 100644 --- a/rdbc-mysql/src/lib.rs +++ b/rdbc-mysql/src/lib.rs @@ -222,7 +222,7 @@ fn rewrite(sql: &str, params: &[rdbc::Value]) -> rdbc::Result { Token::Word(Word { value: param.to_string(), quote_style: None, - keyword: "".to_owned(), + keyword: sqlparser::dialect::keywords::Keyword::NoKeyword, }) } _ => t.clone(), diff --git a/rdbc-postgres/src/lib.rs b/rdbc-postgres/src/lib.rs index 6b9ebf5..751bd06 100644 --- a/rdbc-postgres/src/lib.rs +++ b/rdbc-postgres/src/lib.rs @@ -70,7 +70,7 @@ impl rdbc::Connection for PConnection { Token::Word(Word { value: format!("${}", i), quote_style: None, - keyword: "".to_owned(), + keyword: sqlparser::dialect::keywords::Keyword::NoKeyword, }) } _ => t.clone(), @@ -163,6 +163,27 @@ impl rdbc::ResultSet for PResultSet { get_string -> String, get_bytes -> Vec } + + fn get(&self, i: u64) -> rdbc::Result> where T: rdbc::ResultSetGet { + T::get(self, i) + } +} + +macro_rules! impl_resultget { + ($($ty: ty),*) => { + $( + impl rdbc::ResultSetGet for $ty { + type Set = PResultSet; + fn get(set: &Self::Set, i: u64) -> rdbc::Result> { + Ok(set.rows.get(set.i - 1).get(i as usize)) + } + } + )* + }; +} + +impl_resultget! { + i8, i16, i32, i64, f32, f64, String, Vec } /// Convert a Postgres error into an RDBC error @@ -214,6 +235,8 @@ mod tests { assert_eq!(Some(123), rs.get_i32(0)?); assert!(!rs.next()); + let x = rs.get::(0)??; + Ok(()) } diff --git a/rdbc/src/lib.rs b/rdbc/src/lib.rs index 3dceb18..0c76768 100644 --- a/rdbc/src/lib.rs +++ b/rdbc/src/lib.rs @@ -88,6 +88,13 @@ pub trait ResultSet { fn get_f64(&self, i: u64) -> Result>; fn get_string(&self, i: u64) -> Result>; fn get_bytes(&self, i: u64) -> Result>>; + + fn get(&self, i: u64) -> Result> where T: ResultSetGet; +} + +pub trait ResultSetGet { + type Set: ResultSet; + fn get(set: &Self::Set, i: u64) -> Result>; } /// Meta data for result set