Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
Omega359 committed Mar 14, 2024
2 parents 2026df4 + 3c26e59 commit b6d2172
Show file tree
Hide file tree
Showing 18 changed files with 572 additions and 491 deletions.
1 change: 1 addition & 0 deletions datafusion-cli/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

56 changes: 1 addition & 55 deletions datafusion/expr/src/built_in_function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ use std::fmt;
use std::str::FromStr;
use std::sync::{Arc, OnceLock};

use crate::signature::TIMEZONE_WILDCARD;
use crate::type_coercion::functions::data_types;
use crate::{FuncMonotonicity, Signature, TypeSignature, Volatility};

use arrow::datatypes::{DataType, Field, TimeUnit};
use arrow::datatypes::{DataType, Field};
use datafusion_common::{plan_err, DataFusionError, Result};

use strum::IntoEnumIterator;
Expand Down Expand Up @@ -190,8 +189,6 @@ pub enum BuiltinScalarFunction {
Substr,
/// to_hex
ToHex,
/// make_date
MakeDate,
/// translate
Translate,
/// trim
Expand All @@ -208,8 +205,6 @@ pub enum BuiltinScalarFunction {
SubstrIndex,
/// find_in_set
FindInSet,
/// to_char
ToChar,
}

/// Maps the sql function name to `BuiltinScalarFunction`
Expand Down Expand Up @@ -335,8 +330,6 @@ impl BuiltinScalarFunction {
BuiltinScalarFunction::Strpos => Volatility::Immutable,
BuiltinScalarFunction::Substr => Volatility::Immutable,
BuiltinScalarFunction::ToHex => Volatility::Immutable,
BuiltinScalarFunction::ToChar => Volatility::Immutable,
BuiltinScalarFunction::MakeDate => Volatility::Immutable,
BuiltinScalarFunction::Translate => Volatility::Immutable,
BuiltinScalarFunction::Trim => Volatility::Immutable,
BuiltinScalarFunction::Upper => Volatility::Immutable,
Expand Down Expand Up @@ -490,8 +483,6 @@ impl BuiltinScalarFunction {
BuiltinScalarFunction::FindInSet => {
utf8_to_int_type(&input_expr_types[0], "find_in_set")
}
BuiltinScalarFunction::ToChar => Ok(Utf8),
BuiltinScalarFunction::MakeDate => Ok(Date32),
BuiltinScalarFunction::Translate => {
utf8_to_str_type(&input_expr_types[0], "translate")
}
Expand Down Expand Up @@ -567,7 +558,6 @@ impl BuiltinScalarFunction {
/// Return the argument [`Signature`] supported by this function
pub fn signature(&self) -> Signature {
use DataType::*;
use TimeUnit::*;
use TypeSignature::*;
// note: the physical expression must accept the type returned by this function or the execution panics.

Expand Down Expand Up @@ -651,41 +641,6 @@ impl BuiltinScalarFunction {
vec![Exact(vec![Utf8, Int64]), Exact(vec![LargeUtf8, Int64])],
self.volatility(),
),
BuiltinScalarFunction::ToChar => Signature::one_of(
vec![
Exact(vec![Date32, Utf8]),
Exact(vec![Date64, Utf8]),
Exact(vec![Time32(Millisecond), Utf8]),
Exact(vec![Time32(Second), Utf8]),
Exact(vec![Time64(Microsecond), Utf8]),
Exact(vec![Time64(Nanosecond), Utf8]),
Exact(vec![Timestamp(Second, None), Utf8]),
Exact(vec![
Timestamp(Second, Some(TIMEZONE_WILDCARD.into())),
Utf8,
]),
Exact(vec![Timestamp(Millisecond, None), Utf8]),
Exact(vec![
Timestamp(Millisecond, Some(TIMEZONE_WILDCARD.into())),
Utf8,
]),
Exact(vec![Timestamp(Microsecond, None), Utf8]),
Exact(vec![
Timestamp(Microsecond, Some(TIMEZONE_WILDCARD.into())),
Utf8,
]),
Exact(vec![Timestamp(Nanosecond, None), Utf8]),
Exact(vec![
Timestamp(Nanosecond, Some(TIMEZONE_WILDCARD.into())),
Utf8,
]),
Exact(vec![Duration(Second), Utf8]),
Exact(vec![Duration(Millisecond), Utf8]),
Exact(vec![Duration(Microsecond), Utf8]),
Exact(vec![Duration(Nanosecond), Utf8]),
],
self.volatility(),
),
BuiltinScalarFunction::SplitPart => Signature::one_of(
vec![
Exact(vec![Utf8, Utf8, Int64]),
Expand Down Expand Up @@ -821,11 +776,6 @@ impl BuiltinScalarFunction {
// will be as good as the number of digits in the number
Signature::uniform(1, vec![Float64, Float32], self.volatility())
}
BuiltinScalarFunction::MakeDate => Signature::uniform(
3,
vec![Int32, Int64, UInt32, UInt64, Utf8],
self.volatility(),
),
BuiltinScalarFunction::Iszero => Signature::one_of(
vec![Exact(vec![Float32]), Exact(vec![Float64])],
self.volatility(),
Expand Down Expand Up @@ -943,10 +893,6 @@ impl BuiltinScalarFunction {
BuiltinScalarFunction::SubstrIndex => &["substr_index", "substring_index"],
BuiltinScalarFunction::FindInSet => &["find_in_set"],

// time/date functions
BuiltinScalarFunction::MakeDate => &["make_date"],
BuiltinScalarFunction::ToChar => &["to_char", "date_format"],

// hashing functions
BuiltinScalarFunction::ArrayElement => &[
"array_element",
Expand Down
8 changes: 0 additions & 8 deletions datafusion/expr/src/expr_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -768,14 +768,6 @@ nary_scalar_expr!(
"replace the substring of string that starts at the start'th character and extends for count characters with new substring"
);

// date functions
scalar_expr!(
ToChar,
to_char,
datetime format,
"converts a date, time, timestamp or duration to a string based on the provided format"
);
scalar_expr!(MakeDate, make_date, year month day, "make a date from year, month and day component parts");
scalar_expr!(Nanvl, nanvl, x y, "returns x if x is not NaN otherwise returns y");
scalar_expr!(
Iszero,
Expand Down
9 changes: 9 additions & 0 deletions datafusion/functions/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ path = "src/lib.rs"
[dependencies]
arrow = { workspace = true }
arrow-array = { workspace = true }
arrow-schema = { workspace = true }
base64 = { version = "0.22", optional = true }
blake2 = { version = "^0.10.2", optional = true }
blake3 = { version = "1.0", optional = true }
Expand Down Expand Up @@ -85,3 +86,11 @@ name = "to_timestamp"
[[bench]]
harness = false
name = "regx"

[[bench]]
harness = false
name = "make_date"

[[bench]]
harness = false
name = "to_char"
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ use rand::Rng;

use datafusion_common::ScalarValue;
use datafusion_expr::ColumnarValue;
use datafusion_physical_expr::datetime_expressions::make_date;
use datafusion_functions::datetime::make_date;

fn years(rng: &mut ThreadRng) -> Int32Array {
let mut years = vec![];
Expand Down Expand Up @@ -63,7 +63,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
make_date(&[years.clone(), months.clone(), days.clone()])
make_date()
.invoke(&[years.clone(), months.clone(), days.clone()])
.expect("make_date should work on valid values"),
)
})
Expand All @@ -77,7 +78,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
make_date(&[year.clone(), months.clone(), days.clone()])
make_date()
.invoke(&[year.clone(), months.clone(), days.clone()])
.expect("make_date should work on valid values"),
)
})
Expand All @@ -91,7 +93,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
make_date(&[year.clone(), month.clone(), days.clone()])
make_date()
.invoke(&[year.clone(), month.clone(), days.clone()])
.expect("make_date should work on valid values"),
)
})
Expand All @@ -104,7 +107,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
make_date(&[year.clone(), month.clone(), day.clone()])
make_date()
.invoke(&[year.clone(), month.clone(), day.clone()])
.expect("make_date should work on valid values"),
)
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ use rand::Rng;
use datafusion_common::ScalarValue;
use datafusion_common::ScalarValue::TimestampNanosecond;
use datafusion_expr::ColumnarValue;
use datafusion_physical_expr::datetime_expressions::to_char;
use datafusion_functions::datetime::to_char;

fn random_date_in_range(
rng: &mut ThreadRng,
Expand Down Expand Up @@ -87,7 +87,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
to_char(&[data.clone(), patterns.clone()])
to_char()
.invoke(&[data.clone(), patterns.clone()])
.expect("to_char should work on valid values"),
)
})
Expand All @@ -101,7 +102,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
to_char(&[data.clone(), patterns.clone()])
to_char()
.invoke(&[data.clone(), patterns.clone()])
.expect("to_char should work on valid values"),
)
})
Expand All @@ -123,7 +125,8 @@ fn criterion_benchmark(c: &mut Criterion) {

b.iter(|| {
black_box(
to_char(&[data.clone(), pattern.clone()])
to_char()
.invoke(&[data.clone(), pattern.clone()])
.expect("to_char should work on valid values"),
)
})
Expand Down
Loading

0 comments on commit b6d2172

Please sign in to comment.