alamb commented on code in PR #4107: URL: https://github.com/apache/arrow-datafusion/pull/4107#discussion_r1014814305
########## 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: I agree the second approach makes sense to me. Maybe usability wise we can just add enough comments about what is happening, or maybe add that best practice is to explicitly specify the timezone in the create table statement / timestamp types. -- 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: github-unsubscr...@arrow.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org