forked from apache/datafusion-comet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlib.rs
More file actions
130 lines (112 loc) · 4.27 KB
/
lib.rs
File metadata and controls
130 lines (112 loc) · 4.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// 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;
pub mod timezone;
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;
pub use agg_funcs::*;
pub use cast::{spark_cast, Cast, SparkCastOptions};
mod bloom_filter;
pub use bloom_filter::{BloomFilterAgg, BloomFilterMightContain};
mod conditional_funcs;
mod conversion_funcs;
mod map_funcs;
mod math_funcs;
mod nondetermenistic_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::{
SparkDateDiff, SparkDateFromUnixDate, SparkDateTrunc, SparkHour, SparkHoursTransform,
SparkMakeDate, SparkMinute, SparkSecond, SparkUnixTimestamp, TimestampTruncExpr,
};
pub use error::{decimal_overflow_error, SparkError, SparkErrorWithContext, SparkResult};
pub use hash_funcs::*;
pub use json_funcs::{FromJson, ToJson};
pub use math_funcs::{
create_modulo_expr, create_negate_expr, spark_ceil, spark_decimal_div,
spark_decimal_integral_div, spark_floor, spark_log, spark_make_decimal, spark_round,
spark_unhex, spark_unscaled_value, CheckOverflow, DecimalRescaleCheckOverflow, NegativeExpr,
NormalizeNaNAndZero, 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(),
}
}
pub(crate) fn decimal_sum_overflow_error() -> SparkError {
SparkError::DecimalSumOverflow
}
pub(crate) fn divide_by_zero_error() -> SparkError {
SparkError::DivideByZero
}