#[derive(Clone, Debug)]
pub struct OutputColumn {
pub display_name: String,
pub lookup_key: String,
pub ty: super::types::DdlColType,
}
#[derive(Clone, Debug, Default)]
pub struct OutputSchema {
pub columns: Vec<OutputColumn>,
pub is_star: bool,
}
pub fn sql_data_type_to_ddl_col_type(
ty: &nodedb_sql::types_expr::SqlDataType,
) -> super::types::DdlColType {
use super::types::DdlColType;
use nodedb_sql::types_expr::SqlDataType;
match ty {
SqlDataType::Int64 => DdlColType::Int8,
SqlDataType::Float64 => DdlColType::Float8,
SqlDataType::String => DdlColType::Text,
SqlDataType::Bool => DdlColType::Bool,
SqlDataType::Bytes => DdlColType::Bytea,
SqlDataType::Timestamp => DdlColType::Timestamp,
SqlDataType::Timestamptz => DdlColType::Timestamptz,
SqlDataType::Decimal => DdlColType::Text,
SqlDataType::Uuid => DdlColType::Text,
SqlDataType::Vector(_) => DdlColType::Text,
SqlDataType::Geometry => DdlColType::Text,
}
}
#[cfg(test)]
mod tests {
use super::super::types::DdlColType;
use super::*;
use nodedb_sql::types_expr::SqlDataType;
#[test]
fn maps_every_sql_data_type_variant() {
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Int64),
DdlColType::Int8
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Float64),
DdlColType::Float8
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::String),
DdlColType::Text
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Bool),
DdlColType::Bool
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Bytes),
DdlColType::Bytea
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Timestamp),
DdlColType::Timestamp
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Timestamptz),
DdlColType::Timestamptz
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Decimal),
DdlColType::Text
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Uuid),
DdlColType::Text
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Vector(3)),
DdlColType::Text
);
assert_eq!(
sql_data_type_to_ddl_col_type(&SqlDataType::Geometry),
DdlColType::Text
);
}
}