chore: upgrade DataFusion family (#7558)

* chore: upgrade DataFusion family

Signed-off-by: luofucong <luofc@foxmail.com>

* use main proto

Signed-off-by: luofucong <luofc@foxmail.com>

* fix ci

Signed-off-by: luofucong <luofc@foxmail.com>

---------

Signed-off-by: luofucong <luofc@foxmail.com>
This commit is contained in:
LFC
2026-01-14 22:02:31 +08:00
committed by GitHub
parent a5cb0116a2
commit e64c31e59a
96 changed files with 2003 additions and 1531 deletions

View File

@@ -271,7 +271,7 @@ pub fn sql_data_type_to_concrete_data_type(
})?
.map(|t| ConcreteDataType::timestamp_datatype(t.unit()))
.unwrap_or(ConcreteDataType::timestamp_millisecond_datatype())),
SqlDataType::Interval => Ok(ConcreteDataType::interval_month_day_nano_datatype()),
SqlDataType::Interval { .. } => Ok(ConcreteDataType::interval_month_day_nano_datatype()),
SqlDataType::Decimal(exact_info) => match exact_info {
ExactNumberInfo::None => Ok(ConcreteDataType::decimal128_default_datatype()),
// refer to https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html
@@ -333,7 +333,7 @@ pub fn concrete_data_type_to_sql_data_type(data_type: &ConcreteDataType) -> Resu
ConcreteDataType::Int8(_) => Ok(SqlDataType::TinyInt(None)),
ConcreteDataType::UInt8(_) => Ok(SqlDataType::TinyIntUnsigned(None)),
ConcreteDataType::String(_) => Ok(SqlDataType::String(None)),
ConcreteDataType::Float32(_) => Ok(SqlDataType::Float(None)),
ConcreteDataType::Float32(_) => Ok(SqlDataType::Float(ExactNumberInfo::None)),
ConcreteDataType::Float64(_) => Ok(SqlDataType::Double(ExactNumberInfo::None)),
ConcreteDataType::Boolean(_) => Ok(SqlDataType::Boolean),
ConcreteDataType::Date(_) => Ok(SqlDataType::Date),
@@ -345,10 +345,13 @@ pub fn concrete_data_type_to_sql_data_type(data_type: &ConcreteDataType) -> Resu
Some(time_type.precision()),
TimezoneInfo::None,
)),
ConcreteDataType::Interval(_) => Ok(SqlDataType::Interval),
ConcreteDataType::Interval(_) => Ok(SqlDataType::Interval {
fields: None,
precision: None,
}),
ConcreteDataType::Binary(_) => Ok(SqlDataType::Varbinary(None)),
ConcreteDataType::Decimal128(d) => Ok(SqlDataType::Decimal(
ExactNumberInfo::PrecisionAndScale(d.precision() as u64, d.scale() as u64),
ExactNumberInfo::PrecisionAndScale(d.precision() as u64, d.scale() as i64),
)),
ConcreteDataType::Json(_) => Ok(SqlDataType::JSON),
ConcreteDataType::Vector(v) => Ok(SqlDataType::Custom(
@@ -412,7 +415,7 @@ mod tests {
ConcreteDataType::string_datatype(),
);
check_type(
SqlDataType::Float(None),
SqlDataType::Float(ExactNumberInfo::None),
ConcreteDataType::float32_datatype(),
);
check_type(
@@ -450,7 +453,10 @@ mod tests {
ConcreteDataType::timestamp_microsecond_datatype(),
);
check_type(
SqlDataType::Interval,
SqlDataType::Interval {
fields: None,
precision: None,
},
ConcreteDataType::interval_month_day_nano_datatype(),
);
check_type(SqlDataType::JSON, ConcreteDataType::json_datatype());

View File

@@ -114,7 +114,7 @@ impl TransformRule for ExpandIntervalTransformRule {
kind,
format,
} => {
if DataType::Interval == *data_type {
if matches!(data_type, DataType::Interval { .. }) {
match &**cast_exp {
Expr::Value(ValueWithSpan {
value: Value::SingleQuotedString(value),
@@ -129,7 +129,7 @@ impl TransformRule for ExpandIntervalTransformRule {
*expr = Expr::Cast {
kind: kind.clone(),
expr: single_quoted_string_expr(interval_value),
data_type: DataType::Interval,
data_type: data_type.clone(),
format: std::mem::take(format),
}
}
@@ -392,7 +392,10 @@ mod tests {
let mut cast_to_interval_expr = Expr::Cast {
expr: single_quoted_string_expr("3y2mon".to_string()),
data_type: DataType::Interval,
data_type: DataType::Interval {
fields: None,
precision: None,
},
format: None,
kind: sqlparser::ast::CastKind::Cast,
};
@@ -407,7 +410,10 @@ mod tests {
expr: Box::new(Expr::Value(
Value::SingleQuotedString("3 years 2 months".to_string()).into()
)),
data_type: DataType::Interval,
data_type: DataType::Interval {
fields: None,
precision: None,
},
format: None,
}
);

View File

@@ -178,9 +178,9 @@ pub(crate) fn get_type_by_alias(data_type: &DataType) -> Option<DataType> {
DataType::UInt16 => Some(DataType::SmallIntUnsigned(None)),
DataType::UInt32 => Some(DataType::IntUnsigned(None)),
DataType::UInt64 => Some(DataType::BigIntUnsigned(None)),
DataType::Float4 => Some(DataType::Float(None)),
DataType::Float4 => Some(DataType::Float(ExactNumberInfo::None)),
DataType::Float8 => Some(DataType::Double(ExactNumberInfo::None)),
DataType::Float32 => Some(DataType::Float(None)),
DataType::Float32 => Some(DataType::Float(ExactNumberInfo::None)),
DataType::Float64 => Some(DataType::Double(ExactNumberInfo::None)),
DataType::Bool => Some(DataType::Boolean),
DataType::Datetime(_) => Some(DataType::Timestamp(Some(6), TimezoneInfo::None)),
@@ -222,9 +222,9 @@ pub(crate) fn get_data_type_by_alias_name(name: &str) -> Option<DataType> {
"UINT16" => Some(DataType::SmallIntUnsigned(None)),
"UINT32" => Some(DataType::IntUnsigned(None)),
"UINT64" => Some(DataType::BigIntUnsigned(None)),
"FLOAT4" => Some(DataType::Float(None)),
"FLOAT4" => Some(DataType::Float(ExactNumberInfo::None)),
"FLOAT8" => Some(DataType::Double(ExactNumberInfo::None)),
"FLOAT32" => Some(DataType::Float(None)),
"FLOAT32" => Some(DataType::Float(ExactNumberInfo::None)),
"FLOAT64" => Some(DataType::Double(ExactNumberInfo::None)),
// String type alias
"TINYTEXT" | "MEDIUMTEXT" | "LONGTEXT" => Some(DataType::Text),
@@ -256,7 +256,7 @@ mod tests {
);
assert_eq!(
get_data_type_by_alias_name("float32"),
Some(DataType::Float(None))
Some(DataType::Float(ExactNumberInfo::None))
);
assert_eq!(
get_data_type_by_alias_name("float8"),
@@ -264,7 +264,7 @@ mod tests {
);
assert_eq!(
get_data_type_by_alias_name("float4"),
Some(DataType::Float(None))
Some(DataType::Float(ExactNumberInfo::None))
);
assert_eq!(
get_data_type_by_alias_name("int8"),
@@ -370,7 +370,7 @@ mod tests {
match &stmts[0] {
Statement::Query(q) => assert_eq!(
format!(
"SELECT arrow_cast(TIMESTAMP '2020-01-01 01:23:45.12345678', 'Timestamp({expected}, None)')"
"SELECT arrow_cast(TIMESTAMP '2020-01-01 01:23:45.12345678', 'Timestamp({expected})')"
),
q.to_string()
),
@@ -402,19 +402,19 @@ mod tests {
#[test]
fn test_transform_timestamp_alias() {
// Timestamp[Second | Millisecond | Microsecond | Nanosecond]
test_timestamp_alias("TimestampSecond", "Second");
test_timestamp_alias("Timestamp_s", "Second");
test_timestamp_alias("TimestampMillisecond", "Millisecond");
test_timestamp_alias("Timestamp_ms", "Millisecond");
test_timestamp_alias("TimestampMicrosecond", "Microsecond");
test_timestamp_alias("Timestamp_us", "Microsecond");
test_timestamp_alias("TimestampNanosecond", "Nanosecond");
test_timestamp_alias("Timestamp_ns", "Nanosecond");
test_timestamp_alias("TimestampSecond", "s");
test_timestamp_alias("Timestamp_s", "s");
test_timestamp_alias("TimestampMillisecond", "ms");
test_timestamp_alias("Timestamp_ms", "ms");
test_timestamp_alias("TimestampMicrosecond", "µs");
test_timestamp_alias("Timestamp_us", "µs");
test_timestamp_alias("TimestampNanosecond", "ns");
test_timestamp_alias("Timestamp_ns", "ns");
// Timestamp(precision)
test_timestamp_precision_type(0, "Second");
test_timestamp_precision_type(3, "Millisecond");
test_timestamp_precision_type(6, "Microsecond");
test_timestamp_precision_type(9, "Nanosecond");
test_timestamp_precision_type(0, "s");
test_timestamp_precision_type(3, "ms");
test_timestamp_precision_type(6, "µs");
test_timestamp_precision_type(9, "ns");
}
#[test]