rbdc_oracle/
lib.rs

1use std::sync::Arc;
2use oracle::sql_type::OracleType;
3use rbdc::db::{Row, MetaData};
4use rbs::Value;
5use crate::decode::Decode;
6
7pub mod decode;
8pub mod driver;
9pub mod encode;
10pub mod options;
11pub mod connection;
12
13#[derive(Debug, Clone)]
14pub struct OracleColumn {
15    pub name: String,
16    pub column_type: OracleType,
17}
18
19#[derive(Debug)]
20pub struct OracleMetaData(pub Arc<Vec<OracleColumn>>);
21
22impl MetaData for OracleMetaData {
23    fn column_len(&self) -> usize {
24        self.0.len()
25    }
26
27    fn column_name(&self, i: usize) -> String {
28        self.0[i].name.to_string()
29    }
30
31    fn column_type(&self, i: usize) -> String {
32        format!("{:?}", self.0[i].column_type)
33    }
34}
35
36#[derive(Debug)]
37pub struct OracleData {
38    pub str: Option<String>,
39    pub bin: Option<Vec<u8>>,
40    pub column_type: OracleType,
41    pub is_sql_null: bool,
42}
43
44
45#[derive(Debug)]
46pub struct OracleRow {
47    pub columns: Arc<Vec<OracleColumn>>,
48    pub datas: Vec<OracleData>,
49}
50
51
52impl Row for OracleRow {
53    fn meta_data(&self) -> Box<dyn MetaData> {
54        Box::new(OracleMetaData(self.columns.clone()))
55    }
56
57    fn get(&mut self, i: usize) -> Result<Value, rbdc::Error> {
58        Value::decode(
59            &self.datas[i],
60        )
61    }
62}