1 use super::cursor::NamedCursor; 2 use super::result::PgResult; 3 use pg::Pg; 4 use row::*; 5 6 pub struct PgRow<'a> { 7 db_result: &'a PgResult, 8 row_idx: usize, 9 col_idx: usize, 10 } 11 12 impl<'a> PgRow<'a> { new(db_result: &'a PgResult, row_idx: usize) -> Self13 pub fn new(db_result: &'a PgResult, row_idx: usize) -> Self { 14 PgRow { 15 db_result: db_result, 16 row_idx: row_idx, 17 col_idx: 0, 18 } 19 } 20 } 21 22 impl<'a> Row<Pg> for PgRow<'a> { take(&mut self) -> Option<&[u8]>23 fn take(&mut self) -> Option<&[u8]> { 24 let current_idx = self.col_idx; 25 self.col_idx += 1; 26 self.db_result.get(self.row_idx, current_idx) 27 } 28 next_is_null(&self, count: usize) -> bool29 fn next_is_null(&self, count: usize) -> bool { 30 (0..count).all(|i| self.db_result.is_null(self.row_idx, self.col_idx + i)) 31 } 32 } 33 34 pub struct PgNamedRow<'a> { 35 cursor: &'a NamedCursor, 36 idx: usize, 37 } 38 39 impl<'a> PgNamedRow<'a> { new(cursor: &'a NamedCursor, idx: usize) -> Self40 pub fn new(cursor: &'a NamedCursor, idx: usize) -> Self { 41 PgNamedRow { cursor, idx } 42 } 43 } 44 45 impl<'a> NamedRow<Pg> for PgNamedRow<'a> { get_raw_value(&self, index: usize) -> Option<&[u8]>46 fn get_raw_value(&self, index: usize) -> Option<&[u8]> { 47 self.cursor.get_value(self.idx, index) 48 } 49 index_of(&self, column_name: &str) -> Option<usize>50 fn index_of(&self, column_name: &str) -> Option<usize> { 51 self.cursor.index_of_column(column_name) 52 } 53 } 54