| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| // The clippy throws an error if the reference clone not wrapped into `Arc::clone` | |
| // The lint makes easier for code reader/reviewer separate references clones from more heavyweight ones | |
| #![deny(clippy::clone_on_ref_ptr)] | |
| mod error; | |
| mod query_context; | |
| pub mod kernels; | |
| pub use kernels::temporal::date_trunc_dyn; | |
| mod static_invoke; | |
| pub use static_invoke::*; | |
| mod struct_funcs; | |
| pub use struct_funcs::{CreateNamedStruct, GetStructField}; | |
| mod csv_funcs; | |
| mod json_funcs; | |
| pub mod test_common; | |
| mod unbound; | |
| pub use unbound::UnboundColumn; | |
| mod predicate_funcs; | |
| pub mod utils; | |
| pub use predicate_funcs::{spark_isnan, RLike}; | |
| mod agg_funcs; | |
| mod array_funcs; | |
| mod comet_scalar_funcs; | |
| pub mod hash_funcs; | |
| mod string_funcs; | |
| mod datetime_funcs; | |
| mod iceberg_funcs; | |
| pub use agg_funcs::*; | |
| pub use iceberg_funcs::{SparkIcebergBucket, SparkIcebergTemporalTransform, SparkIcebergTruncate}; | |
| pub use cast::{spark_cast, Cast, SparkCastOptions}; | |
| mod bloom_filter; | |
| pub use bloom_filter::{BloomFilterAgg, BloomFilterMightContain, SparkBloomFilterVersion}; | |
| pub mod jvm_udf; | |
| mod subquery; | |
| pub use subquery::Subquery; | |
| mod conditional_funcs; | |
| mod conversion_funcs; | |
| mod float_semantics; | |
| pub use float_semantics::{ | |
| canonicalize_nan, normalize_floats, NormalizeNaNAndZero, NormalizeNestedFloats, | |
| }; | |
| mod hll_scalar; | |
| pub use hll_scalar::spark_hll_sketch_estimate; | |
| pub use hll_scalar::spark_hll_union; | |
| mod map_funcs; | |
| pub use map_funcs::{spark_map_sort, SparkMapExtract, SparkMapFromArrays}; | |
| mod math_funcs; | |
| mod nondetermenistic_funcs; | |
| pub mod url_funcs; | |
| pub use array_funcs::*; | |
| pub use conditional_funcs::*; | |
| pub use conversion_funcs::*; | |
| pub use nondetermenistic_funcs::*; | |
| pub use comet_scalar_funcs::{ | |
| create_comet_physical_fun, create_comet_physical_fun_with_eval_mode, | |
| register_all_comet_functions, | |
| }; | |
| pub use csv_funcs::*; | |
| pub use datetime_funcs::{ | |
| spark_day_name, spark_month_name, spark_seconds_of_time, spark_to_time, SparkDateDiff, | |
| SparkDateFromUnixDate, SparkDateTrunc, SparkDayOfWeek, SparkHour, SparkHoursTransform, | |
| SparkMakeDate, SparkMakeInterval, SparkMakeTime, SparkMinute, SparkNextDay, SparkSecond, | |
| SparkSecondsToTimestamp, SparkUnixTimestamp, SparkWeekDay, TimestampTruncExpr, | |
| }; | |
| pub use error::{decimal_overflow_error, SparkError, SparkErrorWithContext, SparkResult}; | |
| pub use hash_funcs::*; | |
| pub use json_funcs::{FromJson, JsonArrayLength, ToJson}; | |
| pub use math_funcs::{ | |
| abs, checked_add, checked_div, checked_mul, checked_sub, create_modulo_expr, | |
| create_negate_expr, spark_ceil, spark_decimal_div, spark_decimal_integral_div, spark_floor, | |
| spark_log, spark_make_decimal, spark_modulo, spark_pow, spark_round, spark_signum, spark_sqrt, | |
| spark_unhex, spark_unscaled_value, CheckOverflow, CheckedBinaryExpr, | |
| DecimalRescaleCheckOverflow, NegativeExpr, SparkGreatestLeast, WideDecimalBinaryExpr, | |
| WideDecimalOp, | |
| }; | |
| pub use query_context::{create_query_context_map, QueryContext, QueryContextMap}; | |
| pub use string_funcs::*; | |
| /// Spark supports three evaluation modes when evaluating expressions, which affect | |
| /// the behavior when processing input values that are invalid or would result in an | |
| /// error, such as divide by zero errors, and also affects behavior when converting | |
| /// between types. | |
| #[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)] | |
| pub enum EvalMode { | |
| /// Legacy is the default behavior in Spark prior to Spark 4.0. This mode silently ignores | |
| /// or replaces errors during SQL operations. Operations resulting in errors (like | |
| /// division by zero) will produce NULL values instead of failing. Legacy mode also | |
| /// enables implicit type conversions. | |
| Legacy, | |
| /// Adheres to the ANSI SQL standard for error handling by throwing exceptions for | |
| /// operations that result in errors. Does not perform implicit type conversions. | |
| Ansi, | |
| /// Same as Ansi mode, except that it converts errors to NULL values without | |
| /// failing the entire query. | |
| Try, | |
| } | |
| #[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)] | |
| pub enum BinaryOutputStyle { | |
| Utf8, | |
| Basic, | |
| Base64, | |
| Hex, | |
| HexDiscrete, | |
| } | |
| pub(crate) fn arithmetic_overflow_error(from_type: &str) -> SparkError { | |
| SparkError::ArithmeticOverflow { | |
| from_type: from_type.to_string(), | |
| function_name: String::new(), | |
| } | |
| } | |
| pub(crate) fn decimal_sum_overflow_error(function_name: &str) -> SparkError { | |
| SparkError::DecimalSumOverflow { | |
| function_name: function_name.to_string(), | |
| } | |
| } | |
| pub(crate) fn divide_by_zero_error() -> SparkError { | |
| SparkError::DivideByZero | |
| } | |
| pub(crate) fn integral_divide_overflow_error() -> SparkError { | |
| SparkError::IntegralDivideOverflow | |
| } | |
| pub(crate) fn remainder_by_zero_error() -> SparkError { | |
| SparkError::RemainderByZero | |
| } |