Skip to content

Commit abcc779

Browse files
committed
address comment
1 parent a4a9bec commit abcc779

File tree

8 files changed

+54
-91
lines changed

8 files changed

+54
-91
lines changed

src/query/codegen/Cargo.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ path = "src/bin/codegen.rs"
1818
common-datavalues = { path = "../datavalues" }
1919
common-expression = { path = "../expression" }
2020

21+
ordered-float = { git = "https://github.com/andylokandy/rust-ordered-float.git", branch = "as", features = ["serde"] }
2122
serde = { version = "1.0.137", features = ["derive"] }
2223
serde_json = "1.0.81"
23-
ordered-float = { git = "https://github.com/andylokandy/rust-ordered-float.git", branch = "as", features = ["serde"] }
24-

src/query/expression/src/column_from.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
use std::iter::Iterator;
1616

17+
use ordered_float::OrderedFloat;
18+
1719
use crate::types::nullable::NullableColumn;
1820
use crate::types::number::*;
1921
use crate::types::*;
@@ -122,6 +124,28 @@ impl<'a, D: AsRef<[&'a str]>> ColumnFrom<D, [Vec<u8>; 2]> for Column {
122124
}
123125
}
124126

127+
impl<'a, D: AsRef<[f32]>> ColumnFrom<D, [Vec<f32>; 0]> for Column {
128+
fn from_data(d: D) -> Column {
129+
NumberType::<OrderedFloat<f32>>::upcast_column(
130+
NumberType::<OrderedFloat<f32>>::column_from_iter(
131+
d.as_ref().iter().map(|f| OrderedFloat(*f)),
132+
&[],
133+
),
134+
)
135+
}
136+
}
137+
138+
impl<'a, D: AsRef<[f64]>> ColumnFrom<D, [Vec<f64>; 0]> for Column {
139+
fn from_data(d: D) -> Column {
140+
NumberType::<OrderedFloat<f64>>::upcast_column(
141+
NumberType::<OrderedFloat<f64>>::column_from_iter(
142+
d.as_ref().iter().map(|f| OrderedFloat(*f)),
143+
&[],
144+
),
145+
)
146+
}
147+
}
148+
125149
for_common_scalar_values! { impl_from_iterator }
126150
for_common_scalar_values! { impl_from_opt_iterator }
127151
for_common_scalar_values! { impl_from_vec }

src/query/expression/src/types/number.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ pub enum NumberDataType {
180180
Float64,
181181
}
182182

183-
#[derive(Clone, Copy, PartialEq, EnumAsInner, Serialize, Deserialize)]
183+
#[derive(Clone, Copy, PartialEq, Eq, EnumAsInner, Serialize, Deserialize)]
184184
pub enum NumberScalar {
185185
UInt8(u8),
186186
UInt16(u16),
@@ -208,7 +208,7 @@ pub enum NumberColumn {
208208
Float64(Buffer<OrderedFloat<f64>>),
209209
}
210210

211-
#[derive(Debug, Clone, PartialEq, EnumAsInner)]
211+
#[derive(Debug, Clone, PartialEq, Eq, EnumAsInner)]
212212
pub enum NumberColumnBuilder {
213213
UInt8(Vec<u8>),
214214
UInt16(Vec<u16>),
@@ -222,7 +222,7 @@ pub enum NumberColumnBuilder {
222222
Float64(Vec<OrderedFloat<f64>>),
223223
}
224224

225-
#[derive(Debug, Clone, PartialEq, EnumAsInner)]
225+
#[derive(Debug, Clone, PartialEq, Eq, EnumAsInner)]
226226
pub enum NumberDomain {
227227
UInt8(SimpleDomain<u8>),
228228
UInt16(SimpleDomain<u16>),
@@ -806,15 +806,15 @@ impl<T: Number> SimpleDomain<T> {
806806
}
807807

808808
fn overflow_cast<T: Number, U: Number>(src: T) -> (U, bool) {
809-
let dest_min: T = num_traits::cast(U::MIN).unwrap_or(T::MIN).into();
810-
let dest_max: T = num_traits::cast(U::MAX).unwrap_or(T::MAX).into();
809+
let dest_min: T = num_traits::cast(U::MIN).unwrap_or(T::MIN);
810+
let dest_max: T = num_traits::cast(U::MAX).unwrap_or(T::MAX);
811811
let src_clamp: T = src.clamp(dest_min, dest_max);
812812
let overflowing = src != src_clamp;
813813
// The number must be within the range that `U` can represent after clamping, therefore
814814
// it's safe to unwrap.
815815
let dest: U = num_traits::cast(src_clamp).unwrap();
816816

817-
(dest.into(), overflowing)
817+
(dest, overflowing)
818818
}
819819

820820
#[macro_export]

src/query/expression/tests/it/expression.rs

Lines changed: 12 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,7 @@ pub fn test_pass() {
221221
(
222222
"a",
223223
DataType::Nullable(Box::new(DataType::Number(NumberDataType::Float32))),
224-
Column::from_data_with_validity(
225-
vec![10f32, 11f32, 12f32]
226-
.into_iter()
227-
.map(OrderedFloat)
228-
.collect::<Vec<_>>(),
229-
vec![false, true, false],
230-
),
224+
Column::from_data_with_validity(vec![10f32, 11f32, 12f32], vec![false, true, false]),
231225
),
232226
(
233227
"b",
@@ -240,24 +234,12 @@ pub fn test_pass() {
240234
(
241235
"a",
242236
DataType::Nullable(Box::new(DataType::Number(NumberDataType::Float32))),
243-
Column::from_data_with_validity(
244-
vec![10f32, 11f32, 12f32]
245-
.into_iter()
246-
.map(OrderedFloat)
247-
.collect::<Vec<_>>(),
248-
vec![false, true, false],
249-
),
237+
Column::from_data_with_validity(vec![10f32, 11f32, 12f32], vec![false, true, false]),
250238
),
251239
(
252240
"b",
253241
DataType::Nullable(Box::new(DataType::Number(NumberDataType::Float64))),
254-
Column::from_data_with_validity(
255-
vec![1f64, 2f64, 3f64]
256-
.into_iter()
257-
.map(OrderedFloat)
258-
.collect::<Vec<_>>(),
259-
vec![false, true, true],
260-
),
242+
Column::from_data_with_validity(vec![1f64, 2f64, 3f64], vec![false, true, true]),
261243
),
262244
]);
263245

@@ -412,19 +394,14 @@ pub fn test_pass() {
412394
(
413395
"b",
414396
DataType::Number(NumberDataType::Float64),
415-
Column::from_data(
416-
vec![
417-
0.0,
418-
u32::MAX as f64,
419-
u64::MAX as f64,
420-
f64::MIN,
421-
f64::MAX,
422-
f64::INFINITY,
423-
]
424-
.into_iter()
425-
.map(OrderedFloat)
426-
.collect::<Vec<_>>(),
427-
),
397+
Column::from_data(vec![
398+
0.0,
399+
u32::MAX as f64,
400+
u64::MAX as f64,
401+
f64::MIN,
402+
f64::MAX,
403+
f64::INFINITY,
404+
]),
428405
),
429406
],
430407
);
@@ -464,12 +441,7 @@ pub fn test_pass() {
464441
run_ast(&mut file, "CAST(a AS INT16)", &[(
465442
"a",
466443
DataType::Number(NumberDataType::Float64),
467-
Column::from_data(
468-
vec![0.0f64, 1.1, 2.2, 3.3, -4.4]
469-
.into_iter()
470-
.map(OrderedFloat)
471-
.collect::<Vec<_>>(),
472-
),
444+
Column::from_data(vec![0.0f64, 1.1, 2.2, 3.3, -4.4]),
473445
)]);
474446

475447
run_ast(&mut file, "CAST(b AS INT16)", &[(

src/query/functions-v2/Cargo.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ hex = "0.4.3"
2323
itertools = "0.10.3"
2424
match-template = "0.0.1"
2525
num-traits = "0.2.15"
26-
ordered-float = { git = "https://github.com/andylokandy/rust-ordered-float.git", branch = "as", features = ["serde", "rand"] }
26+
ordered-float = { git = "https://github.com/andylokandy/rust-ordered-float.git", branch = "as", features = [
27+
"serde",
28+
"rand",
29+
] }
2730
rand = { version = "0.8.5", features = ["small_rng"] }
2831
strength_reduce = "0.2.3"
2932

src/query/functions-v2/tests/it/scalars/arithmetic.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,7 @@ fn test_arithmetic() {
5252
(
5353
"d",
5454
DataType::Number(NumberDataType::Float64),
55-
Column::from_data(
56-
vec![10f64, -20f64, 30f64]
57-
.into_iter()
58-
.map(OrderedFloat)
59-
.collect::<Vec<_>>(),
60-
),
55+
Column::from_data(vec![10f64, -20f64, 30f64]),
6156
),
6257
];
6358
test_add(file, columns);

src/query/functions-v2/tests/it/scalars/math.rs

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,7 @@ fn test_ceil(file: &mut impl Write) {
8383
run_ast(file, "ceil(a)", &[(
8484
"a",
8585
DataType::Number(NumberDataType::Float64),
86-
Column::from_data(
87-
vec![1.23f64, -1.23]
88-
.into_iter()
89-
.map(OrderedFloat)
90-
.collect::<Vec<_>>(),
91-
),
86+
Column::from_data(vec![1.23f64, -1.23]),
9287
)]);
9388
}
9489

@@ -113,12 +108,7 @@ fn test_round(file: &mut impl Write) {
113108
run_ast(file, "round(a)", &[(
114109
"a",
115110
DataType::Number(NumberDataType::Float64),
116-
Column::from_data(
117-
vec![22.22f64, -22.23, 10.0]
118-
.into_iter()
119-
.map(OrderedFloat)
120-
.collect::<Vec<_>>(),
121-
),
111+
Column::from_data(vec![22.22f64, -22.23, 10.0]),
122112
)]);
123113
}
124114

@@ -140,12 +130,7 @@ fn test_truncate(file: &mut impl Write) {
140130
run_ast(file, "truncate(a, 1)", &[(
141131
"a",
142132
DataType::Number(NumberDataType::Float64),
143-
Column::from_data(
144-
vec![22.22f64, -22.23, 10.0]
145-
.into_iter()
146-
.map(OrderedFloat)
147-
.collect::<Vec<_>>(),
148-
),
133+
Column::from_data(vec![22.22f64, -22.23, 10.0]),
149134
)]);
150135
}
151136

src/query/functions-v2/tests/it/scalars/string.rs

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -414,12 +414,7 @@ fn test_bin(file: &mut impl Write) {
414414
(
415415
"d",
416416
DataType::Number(NumberDataType::Float64),
417-
Column::from_data(
418-
vec![10f64, -20f64, 30f64]
419-
.into_iter()
420-
.map(OrderedFloat)
421-
.collect::<Vec<_>>(),
422-
),
417+
Column::from_data(vec![10f64, -20f64, 30f64]),
423418
),
424419
(
425420
"e",
@@ -460,12 +455,7 @@ fn test_oct(file: &mut impl Write) {
460455
(
461456
"d",
462457
DataType::Number(NumberDataType::Float64),
463-
Column::from_data(
464-
vec![10f64, -20f64, 30f64]
465-
.into_iter()
466-
.map(OrderedFloat)
467-
.collect::<Vec<_>>(),
468-
),
458+
Column::from_data(vec![10f64, -20f64, 30f64]),
469459
),
470460
(
471461
"e",
@@ -506,12 +496,7 @@ fn test_hex(file: &mut impl Write) {
506496
(
507497
"d",
508498
DataType::Number(NumberDataType::Float64),
509-
Column::from_data(
510-
vec![10f64, -20f64, 30f64]
511-
.into_iter()
512-
.map(OrderedFloat)
513-
.collect::<Vec<_>>(),
514-
),
499+
Column::from_data(vec![10f64, -20f64, 30f64]),
515500
),
516501
(
517502
"e",

0 commit comments

Comments
 (0)