Skip to content

Commit 92a83b0

Browse files
authored
chore: upgrade arrow to 56. (#724)
* chore: upgrade arrow to 56.
1 parent eaa184e commit 92a83b0

11 files changed

Lines changed: 90 additions & 23 deletions

File tree

Cargo.toml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,14 @@ tokio-stream = "0.1"
3232
chrono = { version = "0.4.40", default-features = false, features = ["clock"] }
3333
chrono-tz = { version = "0.10.4" }
3434
jiff = { version = "0.2.10", features = ["tzdb-bundle-always"] }
35-
arrow = { version = "55.0" }
36-
arrow-array = { version = "55.0" }
37-
arrow-buffer = { version = "55.0" }
38-
arrow-schema = { version = "55.0" }
39-
arrow-flight = { version = "55.0", features = ["flight-sql-experimental"] }
40-
arrow-ipc = { version = "55.0", features = ["lz4", "zstd"]}
41-
tonic = { version = "0.12", default-features = false, features = [
35+
arrow = { version = "56" }
36+
arrow-array = { version = "56" }
37+
arrow-schema = { version = "56" }
38+
arrow-flight = { version = "56", features = ["flight-sql-experimental"] }
39+
arrow-ipc = { version = "56", features = ["lz4", "zstd"]}
40+
tonic = { version = "0.13", default-features = false, features = [
4241
"transport",
4342
"codegen",
44-
"tls",
4543
"tls-webpki-roots",
4644
"prost",
4745
] }

bindings/nodejs/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,9 @@ impl ToNapiValue for NumberValue {
405405
databend_driver::NumberValue::UInt64(i) => u64::to_napi_value(env, i),
406406
databend_driver::NumberValue::Float32(i) => f32::to_napi_value(env, i),
407407
databend_driver::NumberValue::Float64(i) => f64::to_napi_value(env, i),
408+
databend_driver::NumberValue::Decimal64(_, _) => {
409+
String::to_napi_value(env, val.0.to_string())
410+
}
408411
databend_driver::NumberValue::Decimal128(_, _) => {
409412
String::to_napi_value(env, val.0.to_string())
410413
}

bindings/python/src/types.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,13 @@ impl<'py> IntoPyObject<'py> for NumberValue {
174174
databend_driver::NumberValue::UInt64(i) => i.into_bound_py_any(py)?,
175175
databend_driver::NumberValue::Float32(i) => i.into_bound_py_any(py)?,
176176
databend_driver::NumberValue::Float64(i) => i.into_bound_py_any(py)?,
177+
databend_driver::NumberValue::Decimal64(_, _) => {
178+
let dec_cls = get_decimal_cls(py).expect("failed to load decimal.Decimal");
179+
let ret = dec_cls
180+
.call1((self.0.to_string(),))
181+
.expect("failed to call decimal.Decimal(value)");
182+
ret.into_bound()
183+
}
177184
databend_driver::NumberValue::Decimal128(_, _) => {
178185
let dec_cls = get_decimal_cls(py).expect("failed to load decimal.Decimal");
179186
let ret = dec_cls

core/src/schema.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,15 @@ pub struct DecimalSize {
5454

5555
#[derive(Debug, Clone, PartialEq, Eq)]
5656
pub enum DecimalDataType {
57+
Decimal64(DecimalSize),
5758
Decimal128(DecimalSize),
5859
Decimal256(DecimalSize),
5960
}
6061

6162
impl DecimalDataType {
6263
pub fn decimal_size(&self) -> &DecimalSize {
6364
match self {
65+
DecimalDataType::Decimal64(size) => size,
6466
DecimalDataType::Decimal128(size) => size,
6567
DecimalDataType::Decimal256(size) => size,
6668
}
@@ -370,6 +372,12 @@ impl TryFrom<&Arc<ArrowField>> for Field {
370372
}
371373
ArrowDataType::Timestamp(_, _) => DataType::Timestamp,
372374
ArrowDataType::Date32 => DataType::Date,
375+
ArrowDataType::Decimal64(p, s) => {
376+
DataType::Decimal(DecimalDataType::Decimal64(DecimalSize {
377+
precision: *p,
378+
scale: *s as u8,
379+
}))
380+
}
373381
ArrowDataType::Decimal128(p, s) => {
374382
DataType::Decimal(DecimalDataType::Decimal128(DecimalSize {
375383
precision: *p,

driver/tests/driver/select_simple.rs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@
1212
// See the License for the specific language governing permissions and
1313
// limitations under the License.
1414

15-
use std::assert_eq;
16-
use std::collections::HashMap;
17-
1815
use chrono::{DateTime, NaiveDate, NaiveDateTime};
1916
use chrono_tz::Tz;
17+
use databend_client::schema::{DataType, DecimalDataType};
2018
use databend_driver::{params, Client, Connection, DecimalSize, NumberValue, Value};
19+
use std::assert_eq;
20+
use std::collections::HashMap;
2121

2222
use crate::common::DEFAULT_DSN;
2323

@@ -219,25 +219,44 @@ async fn select_decimal() {
219219
.unwrap();
220220
assert!(row.is_some());
221221
let row = row.unwrap();
222-
assert_eq!(
223-
row.values().to_owned(),
224-
vec![
222+
let values = row.values().to_owned();
223+
let ty = values[0].get_type();
224+
let exp = match ty {
225+
DataType::Decimal(DecimalDataType::Decimal64(_)) => vec![
226+
Value::Number(NumberValue::Decimal64(
227+
100i64,
228+
DecimalSize {
229+
precision: 15,
230+
scale: 2,
231+
},
232+
)),
233+
Value::Number(NumberValue::Decimal64(
234+
50i64,
235+
DecimalSize {
236+
precision: 2,
237+
scale: 1,
238+
},
239+
)),
240+
],
241+
DataType::Decimal(DecimalDataType::Decimal128(_)) => vec![
225242
Value::Number(NumberValue::Decimal128(
226243
100i128,
227244
DecimalSize {
228245
precision: 15,
229-
scale: 2
246+
scale: 2,
230247
},
231248
)),
232249
Value::Number(NumberValue::Decimal128(
233250
50i128,
234251
DecimalSize {
235252
precision: 2,
236-
scale: 1
253+
scale: 1,
237254
},
238255
)),
239-
]
240-
);
256+
],
257+
_ => unreachable!(),
258+
};
259+
assert_eq!(values, exp);
241260
}
242261

243262
#[tokio::test]

sql/src/value/arrow_decoder.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,10 @@ use crate::error::{ConvertError, Error};
1919
use crate::value::geo::convert_geometry;
2020
use arrow_array::{
2121
Array as ArrowArray, BinaryArray, BooleanArray, Date32Array, Decimal128Array, Decimal256Array,
22-
Float32Array, Float64Array, Int16Array, Int32Array, Int64Array, Int8Array, LargeBinaryArray,
23-
LargeListArray, LargeStringArray, ListArray, MapArray, StringArray, StringViewArray,
24-
StructArray, TimestampMicrosecondArray, UInt16Array, UInt32Array, UInt64Array, UInt8Array,
22+
Decimal64Array, Float32Array, Float64Array, Int16Array, Int32Array, Int64Array, Int8Array,
23+
LargeBinaryArray, LargeListArray, LargeStringArray, ListArray, MapArray, StringArray,
24+
StringViewArray, StructArray, TimestampMicrosecondArray, UInt16Array, UInt32Array, UInt64Array,
25+
UInt8Array,
2526
};
2627
use arrow_schema::{DataType as ArrowDataType, Field as ArrowField, TimeUnit};
2728
use databend_client::schema::{
@@ -291,7 +292,18 @@ impl
291292
Some(array) => Ok(Value::Number(NumberValue::Float64(array.value(seq)))),
292293
None => Err(ConvertError::new("float64", format!("{array:?}")).into()),
293294
},
294-
295+
ArrowDataType::Decimal64(p, s) => {
296+
match array.as_any().downcast_ref::<Decimal64Array>() {
297+
Some(array) => Ok(Value::Number(NumberValue::Decimal64(
298+
array.value(seq),
299+
DecimalSize {
300+
precision: *p,
301+
scale: *s as u8,
302+
},
303+
))),
304+
None => Err(ConvertError::new("Decimal64", format!("{array:?}")).into()),
305+
}
306+
}
295307
ArrowDataType::Decimal128(p, s) => {
296308
match array.as_any().downcast_ref::<Decimal128Array>() {
297309
Some(array) => Ok(Value::Number(NumberValue::Decimal128(

sql/src/value/base.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub enum NumberValue {
3333
UInt64(u64),
3434
Float32(f32),
3535
Float64(f64),
36+
Decimal64(i64, DecimalSize),
3637
Decimal128(i128, DecimalSize),
3738
Decimal256(i256, DecimalSize),
3839
}
@@ -81,6 +82,7 @@ impl Value {
8182
NumberValue::UInt64(_) => DataType::Number(NumberDataType::UInt64),
8283
NumberValue::Float32(_) => DataType::Number(NumberDataType::Float32),
8384
NumberValue::Float64(_) => DataType::Number(NumberDataType::Float64),
85+
NumberValue::Decimal64(_, s) => DataType::Decimal(DecimalDataType::Decimal64(*s)),
8486
NumberValue::Decimal128(_, s) => DataType::Decimal(DecimalDataType::Decimal128(*s)),
8587
NumberValue::Decimal256(_, s) => DataType::Decimal(DecimalDataType::Decimal256(*s)),
8688
},

sql/src/value/format/display.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ impl std::fmt::Display for NumberValue {
3838
NumberValue::UInt64(i) => write!(f, "{i}"),
3939
NumberValue::Float32(i) => write!(f, "{i}"),
4040
NumberValue::Float64(i) => write!(f, "{i}"),
41+
NumberValue::Decimal64(v, s) => {
42+
write!(f, "{}", display_decimal_128(*v as i128, s.scale))
43+
}
4144
NumberValue::Decimal128(v, s) => write!(f, "{}", display_decimal_128(*v, s.scale)),
4245
NumberValue::Decimal256(v, s) => write!(f, "{}", display_decimal_256(*v, s.scale)),
4346
}

sql/src/value/format/into_string.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ impl TryFrom<Value> for String {
2525
match val {
2626
Value::String(s) => Ok(s),
2727
Value::Bitmap(s) => Ok(s),
28+
Value::Number(NumberValue::Decimal64(v, s)) => {
29+
Ok(display_decimal_128(v as i128, s.scale))
30+
}
2831
Value::Number(NumberValue::Decimal128(v, s)) => Ok(display_decimal_128(v, s.scale)),
2932
Value::Number(NumberValue::Decimal256(v, s)) => Ok(display_decimal_256(v, s.scale)),
3033
Value::Geometry(s) => Ok(s),

sql/src/value/format/result_encode.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ impl Value {
6767
NumberValue::UInt64(v) => Self::write_int(bytes, *v),
6868
NumberValue::Float32(v) => Self::write_float(bytes, *v, format_options),
6969
NumberValue::Float64(v) => Self::write_float(bytes, *v, format_options),
70+
NumberValue::Decimal64(v, size) => {
71+
let s = display_decimal_128(*v as i128, size.scale);
72+
Self::write_string(bytes, &s, true);
73+
}
7074
NumberValue::Decimal128(v, size) => {
7175
let s = display_decimal_128(*v, size.scale);
7276
Self::write_string(bytes, &s, true);

0 commit comments

Comments
 (0)