odbc_api_helper/bridge/
dameng_to_pg.rs

1use 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}