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}