Skip to content

Commit

Permalink
chore: add translate_data_type unit test
Browse files Browse the repository at this point in the history
  • Loading branch information
ever0de committed Nov 18, 2023
1 parent a70fdb5 commit 6879507
Showing 1 changed file with 78 additions and 1 deletion.
79 changes: 78 additions & 1 deletion core/src/translate/data_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ pub fn translate_data_type(sql_data_type: &SqlDataType) -> Result<DataType> {
SqlDataType::UnsignedInt(None) | SqlDataType::UnsignedInteger(None) => Ok(DataType::Uint64),
SqlDataType::UnsignedInt8(None) => Ok(DataType::Uint8),

SqlDataType::Float(_) => Ok(DataType::Float),
SqlDataType::Float(None) | SqlDataType::Float(Some(64)) => Ok(DataType::Float),

SqlDataType::Text => Ok(DataType::Text),
SqlDataType::Bytea => Ok(DataType::Bytea),
SqlDataType::Date => Ok(DataType::Date),
Expand Down Expand Up @@ -52,3 +53,79 @@ pub fn translate_data_type(sql_data_type: &SqlDataType) -> Result<DataType> {
_ => Err(TranslateError::UnsupportedDataType(sql_data_type.to_string()).into()),
}
}

#[cfg(test)]
mod tests {
use {super::*, crate::parse_sql::parse_data_type, sqlparser::ast::ObjectName};

#[test]
fn support_data_type() {
macro_rules! test {
($text:literal => $parser:expr => $gluesql: expr) => {
assert_eq!(parse_data_type($text), Ok($parser));
assert_eq!(translate_data_type(&$parser), $gluesql);
};
}

test!("BOOLEAN" => SqlDataType::Boolean => Ok(DataType::Boolean));

test!("INT" => SqlDataType::Int(None) => Ok(DataType::Int));
test!("INTEGER" => SqlDataType::Integer(None) => Ok(DataType::Int));
test!("INT64" => SqlDataType::Int64 => Ok(DataType::Int));

test!("INT8" => SqlDataType::Int8(None) => Ok(DataType::Int8));

test!("INT UNSIGNED" => SqlDataType::UnsignedInt(None) => Ok(DataType::Uint64));
test!("INTEGER UNSIGNED" => SqlDataType::UnsignedInteger(None) => Ok(DataType::Uint64));

test!("INT8 UNSIGNED" => SqlDataType::UnsignedInt8(None) => Ok(DataType::Uint8));

test!("FLOAT" => SqlDataType::Float(None) => Ok(DataType::Float));
test!("FLOAT(64)" => SqlDataType::Float(Some(64)) => Ok(DataType::Float));

test!("TEXT" => SqlDataType::Text => Ok(DataType::Text));

test!("BYTEA" => SqlDataType::Bytea => Ok(DataType::Bytea));

test!("DATE" => SqlDataType::Date => Ok(DataType::Date));
test!("TIMESTAMP" => SqlDataType::Timestamp(None, SqlTimezoneInfo::None) => Ok(DataType::Timestamp));
test!("TIME" => SqlDataType::Time(None, SqlTimezoneInfo::None) => Ok(DataType::Time));
test!("INTERVAL" => SqlDataType::Interval => Ok(DataType::Interval));
test!("UUID" => SqlDataType::Uuid => Ok(DataType::Uuid));
test!("DECIMAL" => SqlDataType::Decimal(SqlExactNumberInfo::None) => Ok(DataType::Decimal));
}

#[test]
fn support_custom_data_type() {
macro_rules! test {
($text:literal => $gluesql: expr) => {
assert_eq!(
translate_data_type(&SqlDataType::Custom(
ObjectName(vec![$text.into()]),
vec![]
)),
$gluesql
);
};
}

test!("MAP" => Ok(DataType::Map));
test!("LIST" => Ok(DataType::List));

test!("INT8" => Ok(DataType::Int8));
test!("INT16" => Ok(DataType::Int16));
test!("INT32" => Ok(DataType::Int32));
test!("INT128" => Ok(DataType::Int128));

test!("UINT8" => Ok(DataType::Uint8));
test!("UINT16" => Ok(DataType::Uint16));
test!("UINT32" => Ok(DataType::Uint32));
test!("UINT64" => Ok(DataType::Uint64));
test!("UINT128" => Ok(DataType::Uint128));

test!("POINT" => Ok(DataType::Point));
test!("INET" => Ok(DataType::Inet));

test!("FLOAT32" => Ok(DataType::Float32));
}
}

0 comments on commit 6879507

Please sign in to comment.