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