From 22e82bf86e06d82deadf1d9f308a20d9c85fe8ba Mon Sep 17 00:00:00 2001 From: zhyass Date: Thu, 2 Apr 2026 12:06:28 +0800 Subject: [PATCH 1/5] fix --- src/query/expression/src/block.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/query/expression/src/block.rs b/src/query/expression/src/block.rs index b72ab86c11c91..4e27fd5e8c7e5 100644 --- a/src/query/expression/src/block.rs +++ b/src/query/expression/src/block.rs @@ -991,7 +991,7 @@ impl DataBlock { BlockEntry::Const(s, data_type, _) => { s.as_ref().estimated_scalar_repeat_size(num_rows, data_type) } - _ => entry.memory_size(), + _ => entry.memory_size_with_options(true), }) .sum() } From 5921fdbfc6943b293cf6858521cf892839993b08 Mon Sep 17 00:00:00 2001 From: zhyass Date: Thu, 2 Apr 2026 13:03:19 +0800 Subject: [PATCH 2/5] fix --- src/query/expression/src/values.rs | 6 +++--- src/query/expression/tests/it/block.rs | 28 +++++++++++++++++++++++++ src/query/expression/tests/it/kernel.rs | 15 ++++++++++--- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/query/expression/src/values.rs b/src/query/expression/src/values.rs index 3e53ef6d60dfa..1ddc65b4c3031 100755 --- a/src/query/expression/src/values.rs +++ b/src/query/expression/src/values.rs @@ -907,13 +907,13 @@ impl ScalarRef<'_> { ScalarRef::Decimal(_) => n * self.memory_size(), ScalarRef::Boolean(_) => n.div_ceil(8), ScalarRef::Binary(s) => s.len() * n + (n + 1) * 8, - ScalarRef::String(s) => n * 16 + if s.len() > 12 && n > 0 { s.len() } else { 0 }, + ScalarRef::String(s) => n * 16 + if s.len() > 12 { s.len() * n } else { 0 }, ScalarRef::Timestamp(_) => n * 8, ScalarRef::TimestampTz(_) => n * 16, ScalarRef::Date(_) => n * 4, ScalarRef::Interval(_) => n * 16, - ScalarRef::Array(col) => col.memory_size(false) * n + (n + 1) * 8, - ScalarRef::Map(col) => col.memory_size(false) * n + (n + 1) * 8, + ScalarRef::Array(col) => col.memory_size(true) * n + (n + 1) * 8, + ScalarRef::Map(col) => col.memory_size(true) * n + (n + 1) * 8, ScalarRef::Bitmap(b) => b.len() * n + (n + 1) * 8, ScalarRef::Tuple(fields) => { let DataType::Tuple(fields_ty) = data_type else { diff --git a/src/query/expression/tests/it/block.rs b/src/query/expression/tests/it/block.rs index 3ef3c9362bef3..71ca74baa8306 100644 --- a/src/query/expression/tests/it/block.rs +++ b/src/query/expression/tests/it/block.rs @@ -20,6 +20,7 @@ use databend_common_expression::DataField; use databend_common_expression::DataSchemaRefExt; use databend_common_expression::FromData; use databend_common_expression::Scalar; +use databend_common_expression::ScalarRef; use databend_common_expression::block_debug::box_render; use databend_common_expression::types::AccessType; use databend_common_expression::types::ArrayColumn; @@ -111,3 +112,30 @@ fn test_block_entry_memory_size() { array2.memory_size(false) + array3.memory_size(false) - 8 ); } + +#[test] +fn test_estimate_block_size_for_const_large_string() { + let rows = 245; + let value = "x".repeat(500_000); + + let const_block = DataBlock::new( + vec![BlockEntry::new_const_column( + DataType::String, + Scalar::String(value.clone()), + rows, + )], + rows, + ); + let full_block = DataBlock::new_from_columns(vec![Column::String( + StringColumnBuilder::repeat(&value, rows).build(), + )]); + + assert_eq!( + ScalarRef::String(value.as_str()).estimated_scalar_repeat_size(rows, &DataType::String), + full_block.get_by_offset(0).to_column().memory_size(true), + ); + assert_eq!( + const_block.estimate_block_size(), + full_block.estimate_block_size() + ); +} diff --git a/src/query/expression/tests/it/kernel.rs b/src/query/expression/tests/it/kernel.rs index 75f43f25ad151..84ef4b14cb696 100644 --- a/src/query/expression/tests/it/kernel.rs +++ b/src/query/expression/tests/it/kernel.rs @@ -602,6 +602,15 @@ fn assert_estimated_scalar_repeat_size(scalar: ScalarRef, num_rows: usize, ty: D ); } +fn assert_estimated_scalar_repeat_size_with_gc(scalar: ScalarRef, num_rows: usize, ty: DataType) { + let builder = ColumnBuilder::repeat(&scalar, num_rows, &ty); + let col = builder.build(); + assert_eq!( + scalar.estimated_scalar_repeat_size(num_rows, &ty), + col.memory_size(true) + ); +} + #[test] fn test_estimated_scalar_repeat_size() { let num_rows = 108; @@ -654,7 +663,7 @@ fn test_estimated_scalar_repeat_size() { { let scalar = ScalarRef::String("abcdefghijklmn123"); let ty = DataType::String; - assert_estimated_scalar_repeat_size(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); } // binary @@ -682,7 +691,7 @@ fn test_estimated_scalar_repeat_size() { { let scalar = ScalarRef::Array(StringType::from_data(vec!["abc", "abcdefghijklmn123"])); let ty = DataType::Array(Box::new(DataType::String)); - assert_estimated_scalar_repeat_size(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); } // map @@ -695,6 +704,6 @@ fn test_estimated_scalar_repeat_size() { DataType::Number(NumberDataType::UInt8), DataType::String, ]))); - assert_estimated_scalar_repeat_size(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); } } From 315d9f1e9ce9f4e1e8a4d28c96cf16e338f6bd42 Mon Sep 17 00:00:00 2001 From: zhyass Date: Thu, 2 Apr 2026 13:31:11 +0800 Subject: [PATCH 3/5] fix --- src/query/expression/src/values.rs | 2 +- src/query/expression/tests/it/block.rs | 91 +++++++++++++++++++++++++ src/query/expression/tests/it/kernel.rs | 2 +- 3 files changed, 93 insertions(+), 2 deletions(-) diff --git a/src/query/expression/src/values.rs b/src/query/expression/src/values.rs index 1ddc65b4c3031..5a6f71cea7810 100755 --- a/src/query/expression/src/values.rs +++ b/src/query/expression/src/values.rs @@ -907,7 +907,7 @@ impl ScalarRef<'_> { ScalarRef::Decimal(_) => n * self.memory_size(), ScalarRef::Boolean(_) => n.div_ceil(8), ScalarRef::Binary(s) => s.len() * n + (n + 1) * 8, - ScalarRef::String(s) => n * 16 + if s.len() > 12 { s.len() * n } else { 0 }, + ScalarRef::String(s) => n * 16 + s.len() * n, ScalarRef::Timestamp(_) => n * 8, ScalarRef::TimestampTz(_) => n * 16, ScalarRef::Date(_) => n * 4, diff --git a/src/query/expression/tests/it/block.rs b/src/query/expression/tests/it/block.rs index 71ca74baa8306..35ae31ce93cec 100644 --- a/src/query/expression/tests/it/block.rs +++ b/src/query/expression/tests/it/block.rs @@ -15,6 +15,7 @@ use databend_common_column::buffer::Buffer; use databend_common_expression::BlockEntry; use databend_common_expression::Column; +use databend_common_expression::ColumnBuilder; use databend_common_expression::DataBlock; use databend_common_expression::DataField; use databend_common_expression::DataSchemaRefExt; @@ -29,6 +30,7 @@ use databend_common_expression::types::Int32Type; use databend_common_expression::types::Int64Type; use databend_common_expression::types::NumberDataType; use databend_common_expression::types::StringType; +use databend_common_expression::types::UInt8Type; use databend_common_expression::types::number::NumberScalar; use databend_common_expression::types::string::StringColumnBuilder; @@ -113,6 +115,33 @@ fn test_block_entry_memory_size() { ); } +#[test] +fn test_estimate_block_size_for_const_short_string() { + let rows = 245; + let value = "abc"; + + let const_block = DataBlock::new( + vec![BlockEntry::new_const_column( + DataType::String, + Scalar::String(value.to_string()), + rows, + )], + rows, + ); + let full_block = DataBlock::new_from_columns(vec![Column::String( + StringColumnBuilder::repeat(value, rows).build(), + )]); + + assert_eq!( + ScalarRef::String(value).estimated_scalar_repeat_size(rows, &DataType::String), + full_block.get_by_offset(0).to_column().memory_size(true), + ); + assert_eq!( + const_block.estimate_block_size(), + full_block.estimate_block_size() + ); +} + #[test] fn test_estimate_block_size_for_const_large_string() { let rows = 245; @@ -139,3 +168,65 @@ fn test_estimate_block_size_for_const_large_string() { full_block.estimate_block_size() ); } + +#[test] +fn test_estimate_block_size_for_const_array() { + let rows = 245; + let scalar = ScalarRef::Array(StringType::from_data(vec!["abc", "abcdefghijklmn123"])); + let data_type = DataType::Array(Box::new(DataType::String)); + + let const_block = DataBlock::new( + vec![BlockEntry::new_const_column( + data_type.clone(), + scalar.to_owned(), + rows, + )], + rows, + ); + let full_block = DataBlock::new_from_columns(vec![ + ColumnBuilder::repeat(&scalar, rows, &data_type).build(), + ]); + + assert_eq!( + scalar.estimated_scalar_repeat_size(rows, &data_type), + full_block.get_by_offset(0).to_column().memory_size(true), + ); + assert_eq!( + const_block.estimate_block_size(), + full_block.estimate_block_size() + ); +} + +#[test] +fn test_estimate_block_size_for_const_map() { + let rows = 245; + let scalar = ScalarRef::Map(Column::Tuple(vec![ + UInt8Type::from_data(vec![1, 2]), + StringType::from_data(vec!["a", "abcdefghijklmn123"]), + ])); + let data_type = DataType::Map(Box::new(DataType::Tuple(vec![ + DataType::Number(NumberDataType::UInt8), + DataType::String, + ]))); + + let const_block = DataBlock::new( + vec![BlockEntry::new_const_column( + data_type.clone(), + scalar.to_owned(), + rows, + )], + rows, + ); + let full_block = DataBlock::new_from_columns(vec![ + ColumnBuilder::repeat(&scalar, rows, &data_type).build(), + ]); + + assert_eq!( + scalar.estimated_scalar_repeat_size(rows, &data_type), + full_block.get_by_offset(0).to_column().memory_size(true), + ); + assert_eq!( + const_block.estimate_block_size(), + full_block.estimate_block_size() + ); +} diff --git a/src/query/expression/tests/it/kernel.rs b/src/query/expression/tests/it/kernel.rs index 84ef4b14cb696..46b1b13d9af2a 100644 --- a/src/query/expression/tests/it/kernel.rs +++ b/src/query/expression/tests/it/kernel.rs @@ -656,7 +656,7 @@ fn test_estimated_scalar_repeat_size() { { let scalar = ScalarRef::String("abc"); let ty = DataType::String; - assert_estimated_scalar_repeat_size(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); } // string From eae6d5ef5bfdd8333dc74cd7a7f31fefa941f93c Mon Sep 17 00:00:00 2001 From: zhyass Date: Thu, 2 Apr 2026 15:32:58 +0800 Subject: [PATCH 4/5] fix test --- src/query/expression/tests/it/block.rs | 119 ------------------ src/query/expression/tests/it/kernel.rs | 48 ++++--- .../01_0006_streaming_load_parquet.result | 8 +- .../01_0007_streaming_load_placeholder.result | 8 +- .../01_0008_streaming_load_session.result | 4 +- 5 files changed, 43 insertions(+), 144 deletions(-) diff --git a/src/query/expression/tests/it/block.rs b/src/query/expression/tests/it/block.rs index 35ae31ce93cec..3ef3c9362bef3 100644 --- a/src/query/expression/tests/it/block.rs +++ b/src/query/expression/tests/it/block.rs @@ -15,13 +15,11 @@ use databend_common_column::buffer::Buffer; use databend_common_expression::BlockEntry; use databend_common_expression::Column; -use databend_common_expression::ColumnBuilder; use databend_common_expression::DataBlock; use databend_common_expression::DataField; use databend_common_expression::DataSchemaRefExt; use databend_common_expression::FromData; use databend_common_expression::Scalar; -use databend_common_expression::ScalarRef; use databend_common_expression::block_debug::box_render; use databend_common_expression::types::AccessType; use databend_common_expression::types::ArrayColumn; @@ -30,7 +28,6 @@ use databend_common_expression::types::Int32Type; use databend_common_expression::types::Int64Type; use databend_common_expression::types::NumberDataType; use databend_common_expression::types::StringType; -use databend_common_expression::types::UInt8Type; use databend_common_expression::types::number::NumberScalar; use databend_common_expression::types::string::StringColumnBuilder; @@ -114,119 +111,3 @@ fn test_block_entry_memory_size() { array2.memory_size(false) + array3.memory_size(false) - 8 ); } - -#[test] -fn test_estimate_block_size_for_const_short_string() { - let rows = 245; - let value = "abc"; - - let const_block = DataBlock::new( - vec![BlockEntry::new_const_column( - DataType::String, - Scalar::String(value.to_string()), - rows, - )], - rows, - ); - let full_block = DataBlock::new_from_columns(vec![Column::String( - StringColumnBuilder::repeat(value, rows).build(), - )]); - - assert_eq!( - ScalarRef::String(value).estimated_scalar_repeat_size(rows, &DataType::String), - full_block.get_by_offset(0).to_column().memory_size(true), - ); - assert_eq!( - const_block.estimate_block_size(), - full_block.estimate_block_size() - ); -} - -#[test] -fn test_estimate_block_size_for_const_large_string() { - let rows = 245; - let value = "x".repeat(500_000); - - let const_block = DataBlock::new( - vec![BlockEntry::new_const_column( - DataType::String, - Scalar::String(value.clone()), - rows, - )], - rows, - ); - let full_block = DataBlock::new_from_columns(vec![Column::String( - StringColumnBuilder::repeat(&value, rows).build(), - )]); - - assert_eq!( - ScalarRef::String(value.as_str()).estimated_scalar_repeat_size(rows, &DataType::String), - full_block.get_by_offset(0).to_column().memory_size(true), - ); - assert_eq!( - const_block.estimate_block_size(), - full_block.estimate_block_size() - ); -} - -#[test] -fn test_estimate_block_size_for_const_array() { - let rows = 245; - let scalar = ScalarRef::Array(StringType::from_data(vec!["abc", "abcdefghijklmn123"])); - let data_type = DataType::Array(Box::new(DataType::String)); - - let const_block = DataBlock::new( - vec![BlockEntry::new_const_column( - data_type.clone(), - scalar.to_owned(), - rows, - )], - rows, - ); - let full_block = DataBlock::new_from_columns(vec![ - ColumnBuilder::repeat(&scalar, rows, &data_type).build(), - ]); - - assert_eq!( - scalar.estimated_scalar_repeat_size(rows, &data_type), - full_block.get_by_offset(0).to_column().memory_size(true), - ); - assert_eq!( - const_block.estimate_block_size(), - full_block.estimate_block_size() - ); -} - -#[test] -fn test_estimate_block_size_for_const_map() { - let rows = 245; - let scalar = ScalarRef::Map(Column::Tuple(vec![ - UInt8Type::from_data(vec![1, 2]), - StringType::from_data(vec!["a", "abcdefghijklmn123"]), - ])); - let data_type = DataType::Map(Box::new(DataType::Tuple(vec![ - DataType::Number(NumberDataType::UInt8), - DataType::String, - ]))); - - let const_block = DataBlock::new( - vec![BlockEntry::new_const_column( - data_type.clone(), - scalar.to_owned(), - rows, - )], - rows, - ); - let full_block = DataBlock::new_from_columns(vec![ - ColumnBuilder::repeat(&scalar, rows, &data_type).build(), - ]); - - assert_eq!( - scalar.estimated_scalar_repeat_size(rows, &data_type), - full_block.get_by_offset(0).to_column().memory_size(true), - ); - assert_eq!( - const_block.estimate_block_size(), - full_block.estimate_block_size() - ); -} diff --git a/src/query/expression/tests/it/kernel.rs b/src/query/expression/tests/it/kernel.rs index 46b1b13d9af2a..e71e5dea072dc 100644 --- a/src/query/expression/tests/it/kernel.rs +++ b/src/query/expression/tests/it/kernel.rs @@ -594,15 +594,6 @@ fn test_builder() { } fn assert_estimated_scalar_repeat_size(scalar: ScalarRef, num_rows: usize, ty: DataType) { - let builder = ColumnBuilder::repeat(&scalar, num_rows, &ty); - let col = builder.build(); - assert_eq!( - scalar.estimated_scalar_repeat_size(num_rows, &ty), - col.memory_size(false) - ); -} - -fn assert_estimated_scalar_repeat_size_with_gc(scalar: ScalarRef, num_rows: usize, ty: DataType) { let builder = ColumnBuilder::repeat(&scalar, num_rows, &ty); let col = builder.build(); assert_eq!( @@ -652,18 +643,32 @@ fn test_estimated_scalar_repeat_size() { assert_estimated_scalar_repeat_size(scalar, num_rows, ty); } - // string + // string short { let scalar = ScalarRef::String("abc"); let ty = DataType::String; - assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size(scalar, num_rows, ty); } - // string + // string short, single row + { + let scalar = ScalarRef::String("abc"); + let ty = DataType::String; + assert_estimated_scalar_repeat_size(scalar, 1, ty); + } + + // long string { let scalar = ScalarRef::String("abcdefghijklmn123"); let ty = DataType::String; - assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size(scalar, num_rows, ty); + } + + // nullable(string) + { + let scalar = ScalarRef::String("abc"); + let ty = DataType::Nullable(Box::new(DataType::String)); + assert_estimated_scalar_repeat_size(scalar, num_rows, ty); } // binary @@ -691,7 +696,7 @@ fn test_estimated_scalar_repeat_size() { { let scalar = ScalarRef::Array(StringType::from_data(vec!["abc", "abcdefghijklmn123"])); let ty = DataType::Array(Box::new(DataType::String)); - assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size(scalar, num_rows, ty); } // map @@ -704,6 +709,19 @@ fn test_estimated_scalar_repeat_size() { DataType::Number(NumberDataType::UInt8), DataType::String, ]))); - assert_estimated_scalar_repeat_size_with_gc(scalar, num_rows, ty); + assert_estimated_scalar_repeat_size(scalar, num_rows, ty); + } + + // tuple + { + let scalar = ScalarRef::Tuple(vec![ + ScalarRef::Number(NumberScalar::UInt8(1)), + ScalarRef::String("abc"), + ]); + let ty = DataType::Tuple(vec![ + DataType::Number(NumberDataType::UInt8), + DataType::String, + ]); + assert_estimated_scalar_repeat_size(scalar, num_rows, ty); } } diff --git a/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result b/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result index 03049019faee1..5738af25f21c1 100755 --- a/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result +++ b/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result @@ -5,7 +5,7 @@ q1.parquet 637 1 >>>> streaming load: q1.parquet error : + curl -sS -H x-databend-query-id:load-q1 -H 'X-Databend-SQL:insert into streaming_load_parquet(c2,c3) from @_databend_load file_format = (type='\''parquet'\'', missing_field_as=error, null_if=())' -F upload=@/tmp/streaming_load_parquet/q1.parquet -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-q1","stats":{"rows":1,"bytes":27}} +{"id":"load-q1","stats":{"rows":1,"bytes":29}} <<<< >>>> select * from streaming_load_parquet; ok 1 2021-01-01 @@ -26,7 +26,7 @@ q2.parquet 431 1 q3.parquet 431 1 >>>> streaming load: q3.parquet field_default : + curl -sS -H x-databend-query-id:load-q3 -H 'X-Databend-SQL:insert into streaming_load_parquet(c2,c3) from @_databend_load file_format = (type='\''parquet'\'', missing_field_as=field_default, null_if=())' -F upload=@/tmp/streaming_load_parquet/q3.parquet -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-q3","stats":{"rows":1,"bytes":23}} +{"id":"load-q3","stats":{"rows":1,"bytes":25}} <<<< >>>> select * from streaming_load_parquet; ok NULL 2021-01-01 @@ -37,10 +37,10 @@ ok NULL 2021-01-01 q4.parquet 655 1 >>>> streaming load: q4.parquet error : + curl -sS -H x-databend-query-id:load-q4 -H 'X-Databend-SQL:insert into streaming_load_parquet(c1,c3) from @_databend_load file_format = (type='\''parquet'\'', missing_field_as=error, null_if=())' -F upload=@/tmp/streaming_load_parquet/q4.parquet -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-q4","stats":{"rows":1,"bytes":34}} +{"id":"load-q4","stats":{"rows":1,"bytes":30}} <<<< >>>> select * from streaming_load_parquet; -my_null NULL 2021-01-01 +my_null NULL 2021-01-01 <<<< >>>> truncate table streaming_load_parquet --'2021-01-01' as c3, 'my_null' as c1 diff --git a/tests/suites/1_stateful/01_streaming_load/01_0007_streaming_load_placeholder.result b/tests/suites/1_stateful/01_streaming_load/01_0007_streaming_load_placeholder.result index 86e95e71b0cda..195c2e58666fc 100755 --- a/tests/suites/1_stateful/01_streaming_load/01_0007_streaming_load_placeholder.result +++ b/tests/suites/1_stateful/01_streaming_load/01_0007_streaming_load_placeholder.result @@ -4,7 +4,7 @@ >>>> copy into @streaming_load_07/data.csv from (select '2020-01-02' as c4, 110 as c2) file_format=(type='csv') single=true include_query_id=false use_raw_path=true detailed_output=true overwrite=true; data.csv 17 1 + curl -sS -H x-databend-query-id:load-csv -H 'X-Databend-SQL:insert into streaming_load_07(c3, c4, c2) values ('\''a'\'', ?, ?) from @_databend_load file_format = (type=csv)' -F upload=@/tmp/streaming_load_07/data.csv -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-csv","stats":{"rows":1,"bytes":44}} +{"id":"load-csv","stats":{"rows":1,"bytes":47}} <<<< >>>> select * from streaming_load_07; ok 110 a 2020-01-02 @@ -14,7 +14,7 @@ ok 110 a 2020-01-02 >>>> copy into @streaming_load_07/data.text from (select '2020-01-02' as c4, 110 as c2) file_format=(type='text') single=true include_query_id=false use_raw_path=true detailed_output=true overwrite=true; data.text 15 1 + curl -sS -H x-databend-query-id:load-text -H 'X-Databend-SQL:insert into streaming_load_07(c3, c4, c2) values ('\''a'\'', ?, ?) from @_databend_load file_format = (type=text)' -F upload=@/tmp/streaming_load_07/data.text -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-text","stats":{"rows":1,"bytes":44}} +{"id":"load-text","stats":{"rows":1,"bytes":47}} <<<< >>>> select * from streaming_load_07; ok 110 a 2020-01-02 @@ -24,7 +24,7 @@ ok 110 a 2020-01-02 >>>> copy into @streaming_load_07/data.ndjson from (select '2020-01-02' as c4, 110 as c2) file_format=(type='ndjson') single=true include_query_id=false use_raw_path=true detailed_output=true overwrite=true; data.ndjson 29 1 + curl -sS -H x-databend-query-id:load-ndjson -H 'X-Databend-SQL:insert into streaming_load_07(c3, c4, c2) values ('\''a'\'', ?, ?) from @_databend_load file_format = (type=ndjson)' -F upload=@/tmp/streaming_load_07/data.ndjson -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-ndjson","stats":{"rows":1,"bytes":44}} +{"id":"load-ndjson","stats":{"rows":1,"bytes":47}} <<<< >>>> select * from streaming_load_07; ok 110 a 2020-01-02 @@ -34,7 +34,7 @@ ok 110 a 2020-01-02 >>>> copy into @streaming_load_07/data.parquet from (select '2020-01-02' as c4, 110 as c2) file_format=(type='parquet') single=true include_query_id=false use_raw_path=true detailed_output=true overwrite=true; data.parquet 678 1 + curl -sS -H x-databend-query-id:load-parquet -H 'X-Databend-SQL:insert into streaming_load_07(c3, c4, c2) values ('\''a'\'', ?, ?) from @_databend_load file_format = (type=parquet)' -F upload=@/tmp/streaming_load_07/data.parquet -u root: -XPUT http://localhost:8000/v1/streaming_load -{"id":"load-parquet","stats":{"rows":1,"bytes":44}} +{"id":"load-parquet","stats":{"rows":1,"bytes":47}} <<<< >>>> select * from streaming_load_07; ok 110 a 2020-01-02 diff --git a/tests/suites/1_stateful/01_streaming_load/01_0008_streaming_load_session.result b/tests/suites/1_stateful/01_streaming_load/01_0008_streaming_load_session.result index 33df07dfb197e..8a9e68aca03e9 100644 --- a/tests/suites/1_stateful/01_streaming_load/01_0008_streaming_load_session.result +++ b/tests/suites/1_stateful/01_streaming_load/01_0008_streaming_load_session.result @@ -3,5 +3,5 @@ >>>> copy into @streaming_load_08/data.csv from (select '2020-01-02', 110) file_format=(type=csv) single=true include_query_id=false use_raw_path=true detailed_output=true overwrite=true; data.csv 17 1 {"need_sticky":false,"need_keep_alive":false,"internal":"{\"last_query_ids\":[\"load-csv\"]}"} -{"id":"load-csv","stats":{"rows":1,"bytes":22}} -{"id":"load-csv","stats":{"rows":1,"bytes":22}} \ No newline at end of file +{"id":"load-csv","stats":{"rows":1,"bytes":32}} +{"id":"load-csv","stats":{"rows":1,"bytes":32}} \ No newline at end of file From 60b494dea0a8fbe038f909b76e19a7d282ca25bd Mon Sep 17 00:00:00 2001 From: zhyass Date: Thu, 2 Apr 2026 16:10:02 +0800 Subject: [PATCH 5/5] fix test --- .../01_streaming_load/01_0006_streaming_load_parquet.result | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result b/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result index 5738af25f21c1..fb5af87e01899 100755 --- a/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result +++ b/tests/suites/1_stateful/01_streaming_load/01_0006_streaming_load_parquet.result @@ -40,7 +40,7 @@ q4.parquet 655 1 {"id":"load-q4","stats":{"rows":1,"bytes":30}} <<<< >>>> select * from streaming_load_parquet; -my_null NULL 2021-01-01 +my_null NULL 2021-01-01 <<<< >>>> truncate table streaming_load_parquet --'2021-01-01' as c3, 'my_null' as c1