waitingkuo commented on code in PR #4107:
URL: https://github.com/apache/arrow-datafusion/pull/4107#discussion_r1013927044
##########
datafusion/sql/src/planner.rs:
##########
@@ -2809,6 +2918,7 @@ fn extract_possible_join_keys(
}
/// Convert SQL simple data type to relational representation of data type
+/*
pub fn convert_simple_data_type(sql_type: &SQLDataType) -> Result<DataType> {
match sql_type {
Review Comment:
this is the original function which is now the method of `SqlToRel`
perhaps we should a deprecated notifunction here as this is a pub function
##########
datafusion/sql/src/planner.rs:
##########
@@ -2671,6 +2673,113 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
Ok(lit(ScalarValue::new_list(Some(values), data_type)))
}
}
+
+ fn convert_data_type(&self, sql_type: &SQLDataType) -> Result<DataType> {
+ match sql_type {
+ SQLDataType::Array(inner_sql_type) => {
+ let data_type = self.convert_simple_data_type(inner_sql_type)?;
+
+ Ok(DataType::List(Box::new(Field::new(
+ "field", data_type, true,
+ ))))
+ }
+ other => self.convert_simple_data_type(other),
+ }
+ }
+ fn convert_simple_data_type(&self, sql_type: &SQLDataType) ->
Result<DataType> {
+ match sql_type {
+ SQLDataType::Boolean => Ok(DataType::Boolean),
+ SQLDataType::TinyInt(_) => Ok(DataType::Int8),
+ SQLDataType::SmallInt(_) => Ok(DataType::Int16),
+ SQLDataType::Int(_) | SQLDataType::Integer(_) =>
Ok(DataType::Int32),
+ SQLDataType::BigInt(_) => Ok(DataType::Int64),
+ SQLDataType::UnsignedTinyInt(_) => Ok(DataType::UInt8),
+ SQLDataType::UnsignedSmallInt(_) => Ok(DataType::UInt16),
+ SQLDataType::UnsignedInt(_) | SQLDataType::UnsignedInteger(_) => {
+ Ok(DataType::UInt32)
+ }
+ SQLDataType::UnsignedBigInt(_) => Ok(DataType::UInt64),
+ SQLDataType::Float(_) => Ok(DataType::Float32),
+ SQLDataType::Real => Ok(DataType::Float32),
+ SQLDataType::Double | SQLDataType::DoublePrecision =>
Ok(DataType::Float64),
+ SQLDataType::Char(_)
+ | SQLDataType::Varchar(_)
+ | SQLDataType::Text
+ | SQLDataType::String => Ok(DataType::Utf8),
+ SQLDataType::Timestamp(tz_info) => {
+ let tz = if matches!(tz_info, TimezoneInfo::Tz)
+ || matches!(tz_info, TimezoneInfo::WithTimeZone)
+ {
+ match
self.schema_provider.get_config_option("datafusion.execution.time_zone") {
+ Some(ScalarValue::Utf8(s)) => {
+ s
+ }
+ Some(_) => {
+ None
+ }
+ None => None
+ }
+ //Some("+00:00".to_string())
+
+ } else {
+ None
+ };
+ Ok(DataType::Timestamp(TimeUnit::Nanosecond, tz))
Review Comment:
as this becomes the method of `SqltoRel`, we can now get the timezone and
use it to replace the fixed UTC
note that we need to add some timezone validation here (e.g. 00:00.1 isn't
valid)
##########
datafusion/sql/src/planner.rs:
##########
@@ -2671,6 +2673,113 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
Ok(lit(ScalarValue::new_list(Some(values), data_type)))
}
}
+
+ fn convert_data_type(&self, sql_type: &SQLDataType) -> Result<DataType> {
+ match sql_type {
+ SQLDataType::Array(inner_sql_type) => {
+ let data_type = self.convert_simple_data_type(inner_sql_type)?;
+
+ Ok(DataType::List(Box::new(Field::new(
+ "field", data_type, true,
+ ))))
+ }
+ other => self.convert_simple_data_type(other),
+ }
+ }
+ fn convert_simple_data_type(&self, sql_type: &SQLDataType) ->
Result<DataType> {
+ match sql_type {
+ SQLDataType::Boolean => Ok(DataType::Boolean),
+ SQLDataType::TinyInt(_) => Ok(DataType::Int8),
+ SQLDataType::SmallInt(_) => Ok(DataType::Int16),
+ SQLDataType::Int(_) | SQLDataType::Integer(_) =>
Ok(DataType::Int32),
+ SQLDataType::BigInt(_) => Ok(DataType::Int64),
+ SQLDataType::UnsignedTinyInt(_) => Ok(DataType::UInt8),
+ SQLDataType::UnsignedSmallInt(_) => Ok(DataType::UInt16),
Review Comment:
becomes method of SqlToRel, so that we could get `SessionState` ->
`config_options` -> `timezone`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]