Skip to content

Commit 9963404

Browse files
committed
Merge branch 'main' of https://github.com/datafuselabs/databend into substr
2 parents 0480df5 + a156c2b commit 9963404

File tree

22 files changed

+831
-762
lines changed

22 files changed

+831
-762
lines changed

.github/actions/test_sqllogic_cluster_linux/action.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ runs:
2828
run: |
2929
docker run --rm --tty --net=host \
3030
--user $(id -u):$(id -g) \
31+
--env BUILD_PROFILE \
3132
--volume "${PWD}:/workspace" \
3233
--workdir "/workspace" \
3334
datafuselabs/build-tool:sqllogic \

.github/actions/test_sqllogic_standalone_linux/action.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ runs:
2828
run: |
2929
docker run --rm --tty --net=host \
3030
--user $(id -u):$(id -g) \
31+
--env BUILD_PROFILE \
3132
--volume "${PWD}:/workspace" \
3233
--workdir "/workspace" \
3334
datafuselabs/build-tool:sqllogic \

.github/actions/test_sqllogic_standalone_macos/action.yml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,3 @@ runs:
3232
shell: bash
3333
run: |
3434
bash ./scripts/ci/ci-run-sqllogic-tests.sh ${{ inputs.dirs }}
35-
36-
# - name: Upload failure
37-
# if: failure()
38-
# uses: ./.github/actions/artifact_failure
39-
# with:
40-
# name: test-sqllogic-standalone-macos

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/query/codegen/src/writes/arithmetics_type_v2.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,7 @@ pub fn codegen_arithmetic_type_v2() {
5555
5656
// This code is generated by {codegen_src_path}. DO NOT EDIT.
5757
58-
use ordered_float::OrderedFloat;
59-
60-
use super::number::Number;
58+
use crate::types::number::{{Number, F64, F32}};
6159
6260
pub trait ResultTypeOfBinary: Sized {{
6361
type AddMul: Number;
@@ -210,8 +208,8 @@ fn to_primitive_str(dt: NumberDataType) -> &'static str {
210208
NumberDataType::Int16 => "i16",
211209
NumberDataType::Int32 => "i32",
212210
NumberDataType::Int64 => "i64",
213-
NumberDataType::Float32 => "OrderedFloat<f32>",
214-
NumberDataType::Float64 => "OrderedFloat<f64>",
211+
NumberDataType::Float32 => "F32",
212+
NumberDataType::Float64 => "F64",
215213
}
216214
}
217215

src/query/expression/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ num-traits = "0.2.15"
2929
# TODO(andylokandy): Use the version from crates.io once
3030
# https://github.com/reem/rust-ordered-float/pull/110 is released.
3131
ordered-float = { git = "https://github.com/andylokandy/rust-ordered-float.git", branch = "as", features = ["serde"] }
32+
rust_decimal = "1.26"
3233
serde = "1.0"
3334
# TODO: Switch to jsonb. bson is used for placeholder.
3435
bson = "2.4"

src/query/expression/src/column_from.rs

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

1515
use std::iter::Iterator;
1616

17-
use ordered_float::OrderedFloat;
18-
1917
use crate::types::nullable::NullableColumn;
2018
use crate::types::number::*;
2119
use crate::types::*;
@@ -126,23 +124,19 @@ impl<'a, D: AsRef<[&'a str]>> ColumnFrom<D, [Vec<u8>; 2]> for Column {
126124

127125
impl<D: AsRef<[f32]>> ColumnFrom<D, [Vec<f32>; 0]> for Column {
128126
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-
)
127+
NumberType::<F32>::upcast_column(NumberType::<F32>::column_from_iter(
128+
d.as_ref().iter().map(|f| (*f).into()),
129+
&[],
130+
))
135131
}
136132
}
137133

138134
impl<D: AsRef<[f64]>> ColumnFrom<D, [Vec<f64>; 0]> for Column {
139135
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-
)
136+
NumberType::<F64>::upcast_column(NumberType::<F64>::column_from_iter(
137+
d.as_ref().iter().map(|f| (*f).into()),
138+
&[],
139+
))
146140
}
147141
}
148142

src/query/expression/src/display.rs

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ use chrono::Utc;
2424
use comfy_table::Cell;
2525
use comfy_table::Table;
2626
use itertools::Itertools;
27+
use num_traits::FromPrimitive;
28+
use rust_decimal::Decimal;
29+
use rust_decimal::RoundingStrategy;
2730

2831
use crate::chunk::Chunk;
2932
use crate::expression::Expr;
@@ -53,6 +56,8 @@ use crate::values::ValueRef;
5356
use crate::with_number_type;
5457
use crate::Column;
5558

59+
const FLOAT_NUM_FRAC_DIGITS: u32 = 10;
60+
5661
impl Debug for Chunk {
5762
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
5863
let mut table = Table::new();
@@ -168,8 +173,24 @@ impl Debug for NumberScalar {
168173
NumberScalar::Int16(val) => write!(f, "{val}_i16"),
169174
NumberScalar::Int32(val) => write!(f, "{val}_i32"),
170175
NumberScalar::Int64(val) => write!(f, "{val}_i64"),
171-
NumberScalar::Float32(val) => write!(f, "{:?}_f32", val.0),
172-
NumberScalar::Float64(val) => write!(f, "{:?}_f64", val.0),
176+
NumberScalar::Float32(val) => match Decimal::from_f32(val.0) {
177+
Some(d) => write!(
178+
f,
179+
"{}_f32",
180+
d.round_dp_with_strategy(FLOAT_NUM_FRAC_DIGITS, RoundingStrategy::ToZero)
181+
.normalize()
182+
),
183+
None => write!(f, "{val}_f32"),
184+
},
185+
NumberScalar::Float64(val) => match Decimal::from_f64(val.0) {
186+
Some(d) => write!(
187+
f,
188+
"{}_f64",
189+
d.round_dp_with_strategy(FLOAT_NUM_FRAC_DIGITS, RoundingStrategy::ToZero)
190+
.normalize()
191+
),
192+
None => write!(f, "{val}_f64"),
193+
},
173194
}
174195
}
175196
}
@@ -185,8 +206,24 @@ impl Display for NumberScalar {
185206
NumberScalar::Int16(val) => write!(f, "{val}"),
186207
NumberScalar::Int32(val) => write!(f, "{val}"),
187208
NumberScalar::Int64(val) => write!(f, "{val}"),
188-
NumberScalar::Float32(val) => write!(f, "{:?}", val.0),
189-
NumberScalar::Float64(val) => write!(f, "{:?}", val.0),
209+
NumberScalar::Float32(val) => match Decimal::from_f32(val.0) {
210+
Some(d) => write!(
211+
f,
212+
"{}",
213+
d.round_dp_with_strategy(FLOAT_NUM_FRAC_DIGITS, RoundingStrategy::ToZero)
214+
.normalize()
215+
),
216+
None => write!(f, "{val}"),
217+
},
218+
NumberScalar::Float64(val) => match Decimal::from_f64(val.0) {
219+
Some(d) => write!(
220+
f,
221+
"{}",
222+
d.round_dp_with_strategy(FLOAT_NUM_FRAC_DIGITS, RoundingStrategy::ToZero)
223+
.normalize()
224+
),
225+
None => write!(f, "{val}"),
226+
},
190227
}
191228
}
192229
}
@@ -204,11 +241,39 @@ impl Debug for NumberColumn {
204241
NumberColumn::Int64(val) => f.debug_tuple("Int64").field(val).finish(),
205242
NumberColumn::Float32(val) => f
206243
.debug_tuple("Float32")
207-
.field(&val.iter().map(|x| x.0).collect::<Vec<_>>())
244+
.field(&format_args!(
245+
"[{}]",
246+
&val.iter()
247+
.map(|x| match Decimal::from_f32(x.0) {
248+
Some(d) => d
249+
.round_dp_with_strategy(
250+
FLOAT_NUM_FRAC_DIGITS,
251+
RoundingStrategy::ToZero
252+
)
253+
.normalize()
254+
.to_string(),
255+
None => x.to_string(),
256+
})
257+
.join(", ")
258+
))
208259
.finish(),
209260
NumberColumn::Float64(val) => f
210261
.debug_tuple("Float64")
211-
.field(&val.iter().map(|x| x.0).collect::<Vec<_>>())
262+
.field(&format_args!(
263+
"[{}]",
264+
&val.iter()
265+
.map(|x| match Decimal::from_f64(x.0) {
266+
Some(d) => d
267+
.round_dp_with_strategy(
268+
FLOAT_NUM_FRAC_DIGITS,
269+
RoundingStrategy::ToZero
270+
)
271+
.normalize()
272+
.to_string(),
273+
None => x.to_string(),
274+
})
275+
.join(", ")
276+
))
212277
.finish(),
213278
}
214279
}

src/query/expression/src/type_check.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ use std::collections::HashMap;
1616
use std::fmt::Write;
1717

1818
use itertools::Itertools;
19-
use ordered_float::OrderedFloat;
2019

2120
use crate::error::Result;
2221
use crate::expression::Expr;
@@ -168,11 +167,11 @@ pub fn check_literal(literal: &Literal) -> (Scalar, DataType) {
168167
DataType::Number(NumberDataType::Int64),
169168
),
170169
Literal::Float32(v) => (
171-
Scalar::Number(NumberScalar::Float32(OrderedFloat(*v))),
170+
Scalar::Number(NumberScalar::Float32((*v).into())),
172171
DataType::Number(NumberDataType::Float32),
173172
),
174173
Literal::Float64(v) => (
175-
Scalar::Number(NumberScalar::Float64(OrderedFloat(*v))),
174+
Scalar::Number(NumberScalar::Float64((*v).into())),
176175
DataType::Number(NumberDataType::Float64),
177176
),
178177
Literal::Boolean(v) => (Scalar::Boolean(*v), DataType::Boolean),

0 commit comments

Comments
 (0)