odbc_api_helper/bridge/
dameng_to_pg.rs1use crate::TryConvert;
2use dameng_helper::table::DmTableItem;
3use dameng_helper::DmDateType;
4use pg_helper::table::PgTableItem;
5use pg_helper::PgType;
6
7impl TryConvert<PgType> for DmDateType {
8 type Error = anyhow::Error;
9
10 fn try_convert(self) -> Result<PgType, Self::Error> {
11 match self {
12 DmDateType::NUMERIC => Ok(PgType::NUMERIC),
13 DmDateType::NUMBER => Ok(PgType::NUMERIC),
14 DmDateType::DECIMAL => Ok(PgType::NUMERIC),
15 DmDateType::BIT => Ok(PgType::BOOL),
16 DmDateType::INTEGER => Ok(PgType::INT4),
17 DmDateType::BIGINT => Ok(PgType::INT8),
18 DmDateType::TINYINT => Ok(PgType::INT2),
19 DmDateType::BYTE => Ok(PgType::INT2),
20 DmDateType::SMALLINT => Ok(PgType::INT2),
21 DmDateType::BINARY => Ok(PgType::BYTEA),
22 DmDateType::VARBINARY => Ok(PgType::VARBIT),
23 DmDateType::REAL => Ok(PgType::FLOAT4),
24 DmDateType::FLOAT => Ok(PgType::FLOAT4),
25 DmDateType::DOUBLE => Ok(PgType::FLOAT4),
26 DmDateType::DOUBLE_PRECISION => Ok(PgType::FLOAT8),
27 DmDateType::CHAR => Ok(PgType::CHAR),
28 DmDateType::VARCHAR => Ok(PgType::VARCHAR),
29 DmDateType::TEXT => Ok(PgType::TEXT),
30 DmDateType::IMAGE => Ok(PgType::BYTEA),
31 DmDateType::BLOB => Ok(PgType::BYTEA),
32 DmDateType::CLOB => Ok(PgType::TEXT),
33 DmDateType::BFILE => Ok(PgType::BYTEA),
34 DmDateType::DATE => Ok(PgType::DATE),
35 DmDateType::TIME => Ok(PgType::TIME),
36 DmDateType::TIMESTAMP => Ok(PgType::TIMESTAMP),
37 DmDateType::TIME_WITH_TIME_ZONE => Ok(PgType::TIMETZ),
38 DmDateType::TIMESTAMP_WITH_TIME_ZONE => Ok(PgType::TIMESTAMPTZ),
39 DmDateType::TIMESTAMP_WITH_LOCAL_TIME_ZONE => Ok(PgType::TIMESTAMPTZ),
40 DmDateType::BOOL => Ok(PgType::BOOL),
41 DmDateType::Unknown => Ok(PgType::UNKNOWN),
42 }
43 }
44}
45
46impl TryConvert<PgTableItem> for DmTableItem {
47 type Error = anyhow::Error;
48
49 fn try_convert(self) -> Result<PgTableItem, Self::Error> {
50 let pg_type: PgType = self.r#type.try_convert()?;
51 Ok(PgTableItem {
52 name: self.name.to_string(),
53 table_id: self.table_id,
54 col_index: self.col_index,
55 r#type: pg_type,
56 length: self.length,
57 scale: self.scale,
58 nullable: self.nullable,
59 default_val: self.default_val,
60 table_name: self.table_name,
61 create_time: self.create_time,
62 })
63 }
64}