diff --git a/Cargo.lock b/Cargo.lock index 146f4cfbed7ba..989eb1dbf4220 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3702,6 +3702,7 @@ dependencies = [ "num", "num-traits", "pretty_assertions", + "serde", "serde_json", "tokio", ] diff --git a/src/query/formats/Cargo.toml b/src/query/formats/Cargo.toml index c697d17bf0339..6e341887d6b8d 100644 --- a/src/query/formats/Cargo.toml +++ b/src/query/formats/Cargo.toml @@ -34,6 +34,7 @@ match-template = { workspace = true } micromarshal = { workspace = true } num = { workspace = true } num-traits = { workspace = true } +serde = { workspace = true } serde_json = { workspace = true } [dev-dependencies] diff --git a/src/query/formats/src/field_decoder/nested.rs b/src/query/formats/src/field_decoder/nested.rs index f41e3c9cb266e..a06a6642c6baf 100644 --- a/src/query/formats/src/field_decoder/nested.rs +++ b/src/query/formats/src/field_decoder/nested.rs @@ -56,6 +56,9 @@ use databend_common_io::parse_bitmap; use databend_common_io::parse_bytes_to_ewkb; use jsonb::parse_owned_jsonb_with_buf; use lexical_core::FromLexical; +use serde::Deserialize; +use serde_json::Deserializer; +use serde_json::value::RawValue; use crate::FileFormatOptionsExt; use crate::InputCommonSettings; @@ -209,7 +212,7 @@ impl NestedValues { column: &mut StringColumnBuilder, reader: &mut Cursor, ) -> Result<()> { - reader.read_quoted_text(&mut column.row_buffer, b'\'')?; + self.read_string_inner(reader, &mut column.row_buffer)?; column.commit_row(); Ok(()) } @@ -220,7 +223,7 @@ impl NestedValues { reader: &mut Cursor, ) -> Result<()> { let mut buf = Vec::new(); - reader.read_quoted_text(&mut buf, b'\'')?; + self.read_string_inner(reader, &mut buf)?; let decoded = decode_binary(&buf, self.common_settings.binary_format)?; column.put_slice(&decoded); column.commit_row(); @@ -232,7 +235,10 @@ impl NestedValues { reader: &mut Cursor, out_buf: &mut Vec, ) -> Result<()> { - reader.read_quoted_text(out_buf, b'\'')?; + if reader.read_quoted_text(out_buf, b'"').is_err() { + // Read single quoted text, compatible with previous implementations + reader.read_quoted_text(out_buf, b'\'')?; + } Ok(()) } @@ -320,8 +326,13 @@ impl NestedValues { column: &mut BinaryColumnBuilder, reader: &mut Cursor, ) -> Result<()> { - let mut buf = Vec::new(); - self.read_string_inner(reader, &mut buf)?; + let buf = if let Ok(val) = self.read_json(reader) { + val.as_bytes().to_vec() + } else { + let mut buf = Vec::new(); + reader.read_quoted_text(&mut buf, b'\'')?; + buf + }; match parse_owned_jsonb_with_buf(&buf, &mut column.data) { Ok(_) => { column.commit_row(); @@ -343,7 +354,12 @@ impl NestedValues { reader: &mut Cursor, ) -> Result<()> { let mut buf = Vec::new(); - self.read_string_inner(reader, &mut buf)?; + if reader.read_quoted_text(&mut buf, b'"').is_err() + && reader.read_quoted_text(&mut buf, b'\'').is_err() + { + let val = self.read_json(reader)?; + buf = val.as_bytes().to_vec(); + } let geom = parse_bytes_to_ewkb(&buf, None)?; column.put_slice(geom.as_bytes()); column.commit_row(); @@ -356,13 +372,27 @@ impl NestedValues { reader: &mut Cursor, ) -> Result<()> { let mut buf = Vec::new(); - self.read_string_inner(reader, &mut buf)?; + if reader.read_quoted_text(&mut buf, b'"').is_err() + && reader.read_quoted_text(&mut buf, b'\'').is_err() + { + let val = self.read_json(reader)?; + buf = val.as_bytes().to_vec(); + } let geog = geography_from_ewkt_bytes(&buf)?; column.put_slice(geog.as_bytes()); column.commit_row(); Ok(()) } + fn read_json>(&self, reader: &mut Cursor) -> Result { + let start = reader.position() as usize; + let data = reader.get_ref().as_ref(); + let mut deserializer = Deserializer::from_slice(&data[start..]); + let raw: Box = Box::::deserialize(&mut deserializer)?; + reader.set_position((start + raw.get().len()) as u64); + Ok(raw.to_string()) + } + fn read_nullable>( &self, column: &mut NullableColumnBuilder, diff --git a/src/query/formats/src/field_encoder/csv.rs b/src/query/formats/src/field_encoder/csv.rs index 4d36ca96d41a6..c82fb53757dcd 100644 --- a/src/query/formats/src/field_encoder/csv.rs +++ b/src/query/formats/src/field_encoder/csv.rs @@ -93,7 +93,8 @@ impl FieldEncoderCSV { binary_format: params.binary_format, geometry_format: params.geometry_format, }, - quote_char: 0, // not used + escape_char: 0, // not used + quote_char: 0, // not used }, string_formatter: StringFormatter::Csv { quote_char: params.quote.as_bytes()[0], @@ -116,7 +117,8 @@ impl FieldEncoderCSV { binary_format: Default::default(), geometry_format: Default::default(), }, - quote_char: 0, // not used + escape_char: 0, // not used + quote_char: 0, // not used }, string_formatter: StringFormatter::Tsv { record_delimiter: params.field_delimiter.as_bytes().to_vec()[0], diff --git a/src/query/formats/src/field_encoder/helpers/escape.rs b/src/query/formats/src/field_encoder/helpers/escape.rs index c2757026363fd..212b85b425381 100644 --- a/src/query/formats/src/field_encoder/helpers/escape.rs +++ b/src/query/formats/src/field_encoder/helpers/escape.rs @@ -44,7 +44,7 @@ static ESCAPE: [u8; 256] = [ __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, // F ]; -pub fn write_quoted_string(bytes: &[u8], buf: &mut Vec, quote: u8) { +pub fn write_quoted_string(bytes: &[u8], buf: &mut Vec, escape: u8, quote: u8) { let mut start = 0; for (i, &byte) in bytes.iter().enumerate() { @@ -52,7 +52,7 @@ pub fn write_quoted_string(bytes: &[u8], buf: &mut Vec, quote: u8) { if start < i { buf.extend_from_slice(&bytes[start..i]); } - buf.push(quote); + buf.push(escape); buf.push(quote); start = i + 1; } diff --git a/src/query/formats/src/field_encoder/json.rs b/src/query/formats/src/field_encoder/json.rs index aafddd1518db2..d97b8123be7bb 100644 --- a/src/query/formats/src/field_encoder/json.rs +++ b/src/query/formats/src/field_encoder/json.rs @@ -50,6 +50,7 @@ impl FieldEncoderJSON { binary_format: Default::default(), geometry_format: Default::default(), }, + escape_char: 0, quote_char: 0, }, quote_denormals: false, diff --git a/src/query/formats/src/field_encoder/values.rs b/src/query/formats/src/field_encoder/values.rs index 86c16216cca4b..7212589dc4cd2 100644 --- a/src/query/formats/src/field_encoder/values.rs +++ b/src/query/formats/src/field_encoder/values.rs @@ -61,6 +61,7 @@ use crate::field_encoder::helpers::write_quoted_string; pub struct FieldEncoderValues { pub common_settings: OutputCommonSettings, + pub escape_char: u8, pub quote_char: u8, } @@ -78,7 +79,8 @@ impl FieldEncoderValues { binary_format: Default::default(), geometry_format: Default::default(), }, - quote_char: b'\'', + escape_char: b'"', + quote_char: b'"', } } @@ -99,7 +101,8 @@ impl FieldEncoderValues { binary_format: Default::default(), geometry_format, }, - quote_char: b'\'', + escape_char: b'\\', + quote_char: b'"', } } @@ -124,7 +127,8 @@ impl FieldEncoderValues { binary_format: Default::default(), geometry_format, }, - quote_char: b'\'', + escape_char: b'\\', + quote_char: b'"', } } @@ -163,7 +167,7 @@ impl FieldEncoderValues { Column::Timestamp(c) => self.write_timestamp(c, row_index, out_buf, in_nested), Column::TimestampTz(c) => self.write_timestamp_tz(c, row_index, out_buf, in_nested), Column::Bitmap(b) => self.write_bitmap(b, row_index, out_buf, in_nested), - Column::Variant(c) => self.write_variant(c, row_index, out_buf, in_nested), + Column::Variant(c) => self.write_variant(c, row_index, out_buf), Column::Geometry(c) => self.write_geometry(c, row_index, out_buf, in_nested), Column::Geography(c) => self.write_geography(c, row_index, out_buf, in_nested), @@ -186,12 +190,13 @@ impl FieldEncoderValues { // so we do not expect the scalar literal to be used in sql. // it is better to keep it simple: minimal escape. // it make result easier to decode csv, tsv and http handler result. - write_quoted_string(in_buf, out_buf, self.quote_char); + write_quoted_string(in_buf, out_buf, self.escape_char, self.quote_char); out_buf.push(self.quote_char); } else { out_buf.extend_from_slice(in_buf); } } + fn write_bool(&self, column: &Bitmap, row_index: usize, out_buf: &mut Vec) { let v = if column.get_bit(row_index) { &self.common_settings().true_bytes @@ -328,16 +333,10 @@ impl FieldEncoderValues { self.write_string_inner(bitmap_result, out_buf, in_nested); } - fn write_variant( - &self, - column: &BinaryColumn, - row_index: usize, - out_buf: &mut Vec, - in_nested: bool, - ) { + fn write_variant(&self, column: &BinaryColumn, row_index: usize, out_buf: &mut Vec) { let v = unsafe { column.index_unchecked(row_index) }; let s = RawJsonb::new(v).to_string(); - self.write_string_inner(s.as_bytes(), out_buf, in_nested); + out_buf.extend_from_slice(s.as_bytes()); } fn write_geometry( @@ -360,7 +359,14 @@ impl FieldEncoderValues { }) .unwrap_or_else(|_| v.to_vec()); - self.write_string_inner(&s, out_buf, in_nested); + match self.common_settings().geometry_format { + GeometryDataType::GEOJSON => { + out_buf.extend_from_slice(&s); + } + _ => { + self.write_string_inner(&s, out_buf, in_nested); + } + } } fn write_geography( @@ -383,7 +389,14 @@ impl FieldEncoderValues { }) .unwrap_or_else(|_| v.0.to_vec()); - self.write_string_inner(&s, out_buf, in_nested); + match self.common_settings().geometry_format { + GeometryDataType::GEOJSON => { + out_buf.extend_from_slice(&s); + } + _ => { + self.write_string_inner(&s, out_buf, in_nested); + } + } } fn write_array(&self, column: &ArrayColumn, row_index: usize, out_buf: &mut Vec) { diff --git a/src/tests/sqlsmith/src/sql_gen/dml.rs b/src/tests/sqlsmith/src/sql_gen/dml.rs index 7eac5da3a4029..937266488409e 100644 --- a/src/tests/sqlsmith/src/sql_gen/dml.rs +++ b/src/tests/sqlsmith/src/sql_gen/dml.rs @@ -579,7 +579,8 @@ impl<'a, R: Rng + 'a> SqlGenerator<'a, R> { binary_format: Default::default(), geometry_format: Default::default(), }, - quote_char: b'\'', + escape_char: b'\\', + quote_char: b'"', }; for i in 0..row_count { diff --git a/tests/nox/noxfile.py b/tests/nox/noxfile.py index bb102b3f092f9..25f8050c844b2 100644 --- a/tests/nox/noxfile.py +++ b/tests/nox/noxfile.py @@ -2,7 +2,7 @@ import os -PYTHON_DRIVER = ["0.28.1", "0.28.2"] +PYTHON_DRIVER = ["0.33.1"] @nox.session diff --git a/tests/nox/python_client/test_data_type.py b/tests/nox/python_client/test_data_type.py index d17c979734a23..44186c226553f 100644 --- a/tests/nox/python_client/test_data_type.py +++ b/tests/nox/python_client/test_data_type.py @@ -1,4 +1,4 @@ -from datetime import datetime, date, timedelta +from datetime import datetime, date, timedelta, timezone from decimal import Decimal from databend_driver import BlockingDatabendClient @@ -37,6 +37,6 @@ def test_data_types(): # Tuple row = conn.query_row("select (10, '20', to_datetime('2024-04-16 12:34:56.789'))") - assert row.values() == ((10, "20", datetime(2024, 4, 16, 12, 34, 56, 789000)),), ( + assert row.values() == ((10, "20", datetime(2024, 4, 16, 12, 34, 56, 789000, tzinfo=timezone.utc)),), ( f"Tuple: {row.values()}" ) diff --git a/tests/nox/python_client/test_local.py b/tests/nox/python_client/test_local.py index 35907b662ed31..14c28af983880 100644 --- a/tests/nox/python_client/test_local.py +++ b/tests/nox/python_client/test_local.py @@ -1,5 +1,5 @@ from databend_driver import BlockingDatabendClient -from datetime import datetime, date +from datetime import datetime, date, timezone from .utils import DATABEND_DSL @@ -31,9 +31,9 @@ def test_insert(): rows = conn.query_iter("SELECT * FROM test") ret = [row.values() for row in rows] expected = [ - (-1, 1, 1.0, "'", None, date(2011, 3, 6), datetime(2011, 3, 6, 6, 20)), - (-2, 2, 2.0, '"', "", date(2012, 5, 31), datetime(2012, 5, 31, 11, 20)), - (-3, 3, 3.0, "\\", "NULL", date(2016, 4, 4), datetime(2016, 4, 4, 11, 30)), + (-1, 1, 1.0, "'", None, date(2011, 3, 6), datetime(2011, 3, 6, 6, 20, tzinfo=timezone.utc)), + (-2, 2, 2.0, '"', "", date(2012, 5, 31), datetime(2012, 5, 31, 11, 20, tzinfo=timezone.utc)), + (-3, 3, 3.0, '\\', "NULL", date(2016, 4, 4), datetime(2016, 4, 4, 11, 30, tzinfo=timezone.utc)) ] assert ret == expected, f"ret: {ret}" @@ -66,9 +66,9 @@ def test_stream_load(): rows = conn.query_iter("SELECT * FROM test") ret = [row.values() for row in rows] expected = [ - (-1, 1, 1.0, "'", None, date(2011, 3, 6), datetime(2011, 3, 6, 6, 20)), - (-2, 2, 2.0, '"', None, date(2012, 5, 31), datetime(2012, 5, 31, 11, 20)), - (-3, 3, 3.0, "\\", "NULL", date(2016, 4, 4), datetime(2016, 4, 4, 11, 30)), + (-1, 1, 1.0, "'", None, date(2011, 3, 6), datetime(2011, 3, 6, 6, 20, tzinfo=timezone.utc)), + (-2, 2, 2.0, '"', None, date(2012, 5, 31), datetime(2012, 5, 31, 11, 20, tzinfo=timezone.utc)), + (-3, 3, 3.0, "\\", "NULL", date(2016, 4, 4), datetime(2016, 4, 4, 11, 30, tzinfo=timezone.utc)), ] assert ret == expected, f"ret: {ret}" @@ -111,8 +111,8 @@ def run_load_file(load_method): rows = conn.query_iter("SELECT * FROM test") ret = [row.values() for row in rows] expected = [ - (-1, 1, 1.0, "'", None, date(2011, 3, 6), datetime(2011, 3, 6, 6, 20)), - (-2, 2, 2.0, '"', None, date(2012, 5, 31), datetime(2012, 5, 31, 11, 20)), - (-3, 3, 3.0, "\\", "NULL", date(2016, 4, 4), datetime(2016, 4, 4, 11, 30)), + (-1, 1, 1.0, "'", None, date(2011, 3, 6), datetime(2011, 3, 6, 6, 20, tzinfo=timezone.utc)), + (-2, 2, 2.0, '"', None, date(2012, 5, 31), datetime(2012, 5, 31, 11, 20, tzinfo=timezone.utc)), + (-3, 3, 3.0, "\\", "NULL", date(2016, 4, 4), datetime(2016, 4, 4, 11, 30, tzinfo=timezone.utc)), ] assert ret == expected, f"{load_method} ret: {ret}" diff --git a/tests/sqllogictests/suites/base/03_common/03_0003_select_group_by.test b/tests/sqllogictests/suites/base/03_common/03_0003_select_group_by.test index 6dd1e140a2384..3ad212dda1bbc 100644 --- a/tests/sqllogictests/suites/base/03_common/03_0003_select_group_by.test +++ b/tests/sqllogictests/suites/base/03_common/03_0003_select_group_by.test @@ -280,9 +280,9 @@ DROP TABLE t_str query TTT rowsort SELECT ( null, to_hour(to_timestamp(3501857592331)), number::Date) from numbers(3) group by all ---- -(NULL,18,'1970-01-01') -(NULL,18,'1970-01-02') -(NULL,18,'1970-01-03') +(NULL,18,"1970-01-01") +(NULL,18,"1970-01-02") +(NULL,18,"1970-01-03") query TTT rowsort SELECT TRY_CAST('1900-12-30 12:00:00' AS TIMESTAMP) AS "TEMP(Test)(4058757556)(0)", diff --git a/tests/sqllogictests/suites/base/03_common/03_0023_insert_into_array.test b/tests/sqllogictests/suites/base/03_common/03_0023_insert_into_array.test index 46566ccf53267..36a9b2ba7479a 100644 --- a/tests/sqllogictests/suites/base/03_common/03_0023_insert_into_array.test +++ b/tests/sqllogictests/suites/base/03_common/03_0023_insert_into_array.test @@ -263,8 +263,8 @@ INSERT INTO t12 (id, arr) VALUES(3, ['1000000-01-01', '2000000-01-01']) query IT select * from t12 ---- -1 ['2021-01-01','2022-01-01'] -2 ['1990-12-01','2030-01-12'] +1 ["2021-01-01","2022-01-01"] +2 ["1990-12-01","2030-01-12"] query TT select arr[1], arr[2] from t12 @@ -287,8 +287,8 @@ INSERT INTO t13 (id, arr) VALUES(3, ['1000000-01-01 01:01:01', '2000000-01-01 01 query IT select * from t13 ---- -1 ['2021-01-01 01:01:01.000000','2022-01-01 01:01:01.000000'] -2 ['1990-12-01 10:11:12.000000','2030-01-12 22:00:00.000000'] +1 ["2021-01-01 01:01:01.000000","2022-01-01 01:01:01.000000"] +2 ["1990-12-01 10:11:12.000000","2030-01-12 22:00:00.000000"] query TT select arr[1], arr[2] from t13 @@ -308,8 +308,8 @@ INSERT INTO t14 (id, arr) VALUES(1, ['aa', 'bb']), (2, ['cc', 'dd']) query IT select * from t14 ---- -1 ['aa','bb'] -2 ['cc','dd'] +1 ["aa","bb"] +2 ["cc","dd"] query TT select arr[1], arr[2] from t14 @@ -329,9 +329,9 @@ INSERT INTO t15 (id, arr) VALUES(1, ['aa', 'bb']), (2, ['cc', 'dd']), (3, [12, 3 query IT select * from t15 ---- -1 ['aa','bb'] -2 ['cc','dd'] -3 ['12','34'] +1 ["aa","bb"] +2 ["cc","dd"] +3 ["12","34"] query TT select arr[1], arr[2] from t15 @@ -380,10 +380,10 @@ INSERT INTO t17 (id, arr) VALUES(1, ['aa', 'bb']), (2, [null, 'cc']), (3, ['dd', query IT select * from t17 ---- -1 ['aa','bb'] -2 [NULL,'cc'] -3 ['dd',NULL] -4 ['ee','ff'] +1 ["aa","bb"] +2 [NULL,"cc"] +3 ["dd",NULL] +4 ["ee","ff"] query TT select arr[1], arr[2] from t17 diff --git a/tests/sqllogictests/suites/base/03_common/03_0026_insert_into_tuple.test b/tests/sqllogictests/suites/base/03_common/03_0026_insert_into_tuple.test index 519cdf719d486..e34b753b1312c 100644 --- a/tests/sqllogictests/suites/base/03_common/03_0026_insert_into_tuple.test +++ b/tests/sqllogictests/suites/base/03_common/03_0026_insert_into_tuple.test @@ -16,8 +16,8 @@ INSERT INTO t1 (id, t) VALUES(1, (true, 100, 12.34, 'abc', '2020-01-01', '2020-0 query IT select * from t1 ---- -1 (1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') -2 (0,200,-25.73,'xyz','2022-06-01','2022-06-01 12:00:00.000000') +1 (1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") +2 (0,200,-25.73,"xyz","2022-06-01","2022-06-01 12:00:00.000000") query BIFTTT select t.1, t.2, t.3, t.4, t.5, t.6 from t1 @@ -46,8 +46,8 @@ INSERT INTO t2 (id, t) VALUES(1, (true, 10, 0.5, 'x', '2021-05-01', '2021-05-01 query IT select * from t2 ---- -1 (1,10,0.5,'x','2021-05-01','2021-05-01 00:00:00.000000') -2 (0,-10,-0.9,'y','2022-10-01','2022-10-01 12:00:00.000000') +1 (1,10,0.5,"x","2021-05-01","2021-05-01 00:00:00.000000") +2 (0,-10,-0.9,"y","2022-10-01","2022-10-01 12:00:00.000000") query BIFTTT select t:a, t:b, t:c, t:d, t:e, t:f from t2 diff --git a/tests/sqllogictests/suites/base/03_common/03_0037_insert_into_map.test b/tests/sqllogictests/suites/base/03_common/03_0037_insert_into_map.test index d846b719c8cdf..417c6850f654e 100644 --- a/tests/sqllogictests/suites/base/03_common/03_0037_insert_into_map.test +++ b/tests/sqllogictests/suites/base/03_common/03_0037_insert_into_map.test @@ -16,8 +16,8 @@ INSERT INTO t1 (id, m) VALUES(1, {100:'abc',200:'def'}),(2, {'300':123}),(3, {}) query IT select * from t1 ---- -1 {100:'abc',200:'def'} -2 {300:'123'} +1 {100:"abc",200:"def"} +2 {300:"123"} 3 {} query TTTT @@ -30,7 +30,7 @@ NULL NULL NULL NULL query IT select * from t1 where m[300] = '123' ---- -2 {300:'123'} +2 {300:"123"} statement error 1006 INSERT INTO t1 (id, m) VALUES(1, {100:'k1',100:'k2'}) @@ -44,40 +44,40 @@ INSERT INTO t2 (id, m) VALUES(1, {'k1':['2020-01-01','2021-01-02'],'k2':['2022-0 query IT select * from t2 ---- -1 {'k1':['2020-01-01','2021-01-02'],'k2':['2022-01-01']} -2 {'k3':['2023-01-01']} +1 {"k1":["2020-01-01","2021-01-02"],"k2":["2022-01-01"]} +2 {"k3":["2023-01-01"]} query TTTT select m['k1'], m['k2'], m['k3'], m['k4'] from t2 ---- -['2020-01-01','2021-01-02'] ['2022-01-01'] NULL NULL -NULL NULL ['2023-01-01'] NULL +["2020-01-01","2021-01-02"] ["2022-01-01"] NULL NULL +NULL NULL ["2023-01-01"] NULL query TTTT select m:k1, m:k2, m['k3'], m['k4'] from t2 ---- -['2020-01-01','2021-01-02'] ['2022-01-01'] NULL NULL -NULL NULL ['2023-01-01'] NULL +["2020-01-01","2021-01-02"] ["2022-01-01"] NULL NULL +NULL NULL ["2023-01-01"] NULL query IT select * from t2 where m['k3'] = ['2023-01-01'::date] ---- -2 {'k3':['2023-01-01']} +2 {"k3":["2023-01-01"]} query T select {'id':id} from t2 ---- -{'id':1} -{'id':2} +{"id":1} +{"id":2} query T select {'id':number} from numbers(5) ---- -{'id':0} -{'id':1} -{'id':2} -{'id':3} -{'id':4} +{"id":0} +{"id":1} +{"id":2} +{"id":3} +{"id":4} statement ok CREATE OR REPLACE TABLE t1(tags Map(String, String)) Engine = Fuse diff --git a/tests/sqllogictests/suites/base/03_common/03_0043_agg_hashtable.test b/tests/sqllogictests/suites/base/03_common/03_0043_agg_hashtable.test index 1055561bfaa28..739ac86a01a67 100644 --- a/tests/sqllogictests/suites/base/03_common/03_0043_agg_hashtable.test +++ b/tests/sqllogictests/suites/base/03_common/03_0043_agg_hashtable.test @@ -206,9 +206,9 @@ select number % 3 a, max(number) - 10, number % 2 b, sum(number) + 10 from numbe query TTT rowsort SELECT ( null, to_hour(to_timestamp(3501857592331)), number::Date) from numbers(3) group by all ---- -(NULL,18,'1970-01-01') -(NULL,18,'1970-01-02') -(NULL,18,'1970-01-03') +(NULL,18,"1970-01-01") +(NULL,18,"1970-01-02") +(NULL,18,"1970-01-03") query TT rowsort select to_string(to_bitmap(number)), to_string(to_bitmap(number+3)) FROM numbers(3) GROUP BY GROUPING SETS ((to_bitmap(number), to_bitmap(number+3))) diff --git a/tests/sqllogictests/suites/base/05_ddl/05_0003_ddl_alter_table.test b/tests/sqllogictests/suites/base/05_ddl/05_0003_ddl_alter_table.test index cb4d2479728bf..be823de838719 100644 --- a/tests/sqllogictests/suites/base/05_ddl/05_0003_ddl_alter_table.test +++ b/tests/sqllogictests/suites/base/05_ddl/05_0003_ddl_alter_table.test @@ -130,7 +130,7 @@ SHOW CREATE TABLE `05_0003_at_t6`; 05_0003_at_t6 CREATE TABLE "05_0003_at_t6" ( b VARCHAR NULL, c INT NULL ) ENGINE=FUSE APPROX_DISTINCT_COLUMNS='b' COMPRESSION='zstd' ENABLE_AUTO_ANALYZE='1' STORAGE_FORMAT='native' statement error 1301 -ALTER TABLE `05_0003_at_t6` MODIFY COLUMN b binary; +ALTER TABLE `05_0003_at_t6` MODIFY COLUMN b binary; statement ok ALTER TABLE `05_0003_at_t6` drop column b; @@ -160,7 +160,7 @@ SHOW CREATE TABLE `05_0003_at_t4` query TTTT SELECT * FROM `05_0003_at_t4` ---- -a b ['c1','c2'] ('d1','d2') +a b ["c1","c2"] ("d1","d2") statement ok ALTER TABLE `05_0003_at_t4` MODIFY COLUMN a binary not null @@ -204,7 +204,7 @@ SHOW CREATE TABLE `05_0003_at_t4` query TTTT SELECT * FROM `05_0003_at_t4` ---- -a b ['c1','c2'] ('d1','d2',NULL) +a b ["c1","c2"] ("d1","d2",NULL) statement ok DROP TABLE IF EXISTS `05_0003_at_t4` @@ -219,8 +219,8 @@ query IT SELECT * FROM `05_0003_at_t5` ---- 1 NULL -2 [(1,2,'x'),(3,4,'y')] -3 [(5,NULL,NULL),(6,NULL,'z')] +2 [(1,2,"x"),(3,4,"y")] +3 [(5,NULL,NULL),(6,NULL,"z")] statement ok ALTER TABLE `05_0003_at_t5` MODIFY COLUMN b array(tuple(int, float64, string, string)); @@ -229,8 +229,8 @@ query IT SELECT * FROM `05_0003_at_t5` ---- 1 NULL -2 [(1,2.0,'x',NULL),(3,4.0,'y',NULL)] -3 [(5,NULL,NULL,NULL),(6,NULL,'z',NULL)] +2 [(1,2.0,"x",NULL),(3,4.0,"y",NULL)] +3 [(5,NULL,NULL,NULL),(6,NULL,"z",NULL)] statement ok DROP TABLE IF EXISTS `05_0003_at_t5` diff --git a/tests/sqllogictests/suites/base/05_ddl/05_0028_ddl_alter_table_add_drop_column.test b/tests/sqllogictests/suites/base/05_ddl/05_0028_ddl_alter_table_add_drop_column.test index fc33cd28c54e0..0bd8ac670fcac 100644 --- a/tests/sqllogictests/suites/base/05_ddl/05_0028_ddl_alter_table_add_drop_column.test +++ b/tests/sqllogictests/suites/base/05_ddl/05_0028_ddl_alter_table_add_drop_column.test @@ -25,7 +25,7 @@ INSERT INTO TABLE `05_0028_at_t0` values(1,(true, 100, 12.34, 'abc', '2020-01-01 query ITIF SELECT * FROM `05_0028_at_t0` ---- -1 (1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] 4.0 +1 (1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] 4.0 statement ok create table `05_0028_at_t0_1`(a int not null, b Tuple(Bool, Int64, Float64, String, Date, Timestamp) not null, c Array(UInt8) not null, "s-f_f" double not null) AS SELECT * FROM `05_0028_at_t0`; @@ -33,7 +33,7 @@ create table `05_0028_at_t0_1`(a int not null, b Tuple(Bool, Int64, Float64, Str query ITIF SELECT * FROM `05_0028_at_t0_1` ---- -1 (1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] 4.0 +1 (1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] 4.0 statement ok alter table `05_0028_at_t0_1` drop column "s-f_f" @@ -41,7 +41,7 @@ alter table `05_0028_at_t0_1` drop column "s-f_f" query ITI SELECT * FROM `05_0028_at_t0_1` ---- -1 (1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] +1 (1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] statement ok DROP TABLE IF EXISTS `05_0028_at_t0_1` @@ -68,7 +68,7 @@ SELECT d,b.1,c,b.2,b.3 FROM `05_0028_at_t0` query TIF SELECT * FROM `05_0028_at_t0` ---- -(1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] 4.0 +(1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] 4.0 statement ok ALTER TABLE `05_0028_at_t0` DROP COLUMN b @@ -177,11 +177,11 @@ INSERT INTO TABLE `05_0028_at_t0` (a, m) values(1.0, {2:'mn'}) query FTTT SELECT * FROM `05_0028_at_t0` order by a ---- -1.0 (202.0,13) ((1,2.0),(3,4)) {2:'mn'} -5.0 (202.0,13) ((1,2.0),(3,4)) {1:'ab'} -6.0 (111.0,2) ((1,2.0),(3,4)) {1:'ab'} -101.0 (202.0,13) ((1,2.0),(3,4)) {1:'ab'} -102.0 (202.0,13) ((3,4.0),(5,6)) {1:'ab'} +1.0 (202.0,13) ((1,2.0),(3,4)) {2:"mn"} +5.0 (202.0,13) ((1,2.0),(3,4)) {1:"ab"} +6.0 (111.0,2) ((1,2.0),(3,4)) {1:"ab"} +101.0 (202.0,13) ((1,2.0),(3,4)) {1:"ab"} +102.0 (202.0,13) ((3,4.0),(5,6)) {1:"ab"} statement ok DROP TABLE IF EXISTS `05_0028_at_t0` diff --git a/tests/sqllogictests/suites/base/06_show/06_0024_show_dictionaries.test b/tests/sqllogictests/suites/base/06_show/06_0024_show_dictionaries.test index 914bc37fdba21..da2e07ac7a410 100644 --- a/tests/sqllogictests/suites/base/06_show/06_0024_show_dictionaries.test +++ b/tests/sqllogictests/suites/base/06_show/06_0024_show_dictionaries.test @@ -7,8 +7,8 @@ CREATE OR REPLACE DICTIONARY d2(a int NOT NULL, b int NOT NULL) PRIMARY KEY a SO query T show dictionaries ---- -default d1 ['c1'] ['INT'] ['c2'] ['VARCHAR'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -default d2 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +default d1 ["c1"] ["INT"] ["c2"] ["VARCHAR"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +default d2 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) statement ok DROP DATABASE IF EXISTS show_dictionary @@ -31,28 +31,28 @@ CREATE OR REPLACE DICTIONARY show_dictionary.d3(`a` int NOT NULL, b int NOT NULL query T show dictionaries from show_dictionary ---- -show_dictionary d1 ['c1'] ['VARCHAR'] ['c2'] ['VARCHAR'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d2 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d3 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d1 ["c1"] ["VARCHAR"] ["c2"] ["VARCHAR"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d2 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d3 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) query T show dictionaries from show_dictionary like 'd%' ---- -show_dictionary d1 ['c1'] ['VARCHAR'] ['c2'] ['VARCHAR'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d2 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d3 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d1 ["c1"] ["VARCHAR"] ["c2"] ["VARCHAR"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d2 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d3 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) query T show dictionaries from show_dictionary WHERE name = 'd2' OR 1 = 1 ---- -show_dictionary d1 ['c1'] ['VARCHAR'] ['c2'] ['VARCHAR'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d2 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d3 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d1 ["c1"] ["VARCHAR"] ["c2"] ["VARCHAR"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d2 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d3 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) query T show dictionaries from show_dictionary WHERE name = 'd2' AND 1 = 1 ---- -show_dictionary d2 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d2 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) statement ok show dictionaries WHERE name='d2' AND 1=0 @@ -60,6 +60,6 @@ show dictionaries WHERE name='d2' AND 1=0 query T show dictionaries ---- -show_dictionary d1 ['c1'] ['VARCHAR'] ['c2'] ['VARCHAR'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d2 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) -show_dictionary d3 ['a'] ['INT'] ['b'] ['INT'] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d1 ["c1"] ["VARCHAR"] ["c2"] ["VARCHAR"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d2 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) +show_dictionary d3 ["a"] ["INT"] ["b"] ["INT"] mysql(db=db1 host=localhost password=[hidden] port=3306 table=test_table username=root) (empty) diff --git a/tests/sqllogictests/suites/base/09_fuse_engine/09_0001_remote_insert.test b/tests/sqllogictests/suites/base/09_fuse_engine/09_0001_remote_insert.test index 52253f16d2254..3fde169b51c3d 100644 --- a/tests/sqllogictests/suites/base/09_fuse_engine/09_0001_remote_insert.test +++ b/tests/sqllogictests/suites/base/09_fuse_engine/09_0001_remote_insert.test @@ -53,8 +53,8 @@ INSERT INTO t3 (a,b,c,d,e,f) values(true, '2021-09-07 21:38:35.000000', '2021-09 query BTTTTT SELECT a, b, c, d, e, f FROM t3 order by a desc; ---- -1 2021-09-07 21:38:35.000000 2021-09-07 [1,2,3] (10,'abc') 2024-10-22 12:00:00.000000 +0900 -0 2021-09-07 21:38:35.000000 2021-09-07 [4,5,6] (20,'xyz') 2024-10-22 12:00:00.000000 +0000 +1 2021-09-07 21:38:35.000000 2021-09-07 [1,2,3] (10,"abc") 2024-10-22 12:00:00.000000 +0900 +0 2021-09-07 21:38:35.000000 2021-09-07 [4,5,6] (20,"xyz") 2024-10-22 12:00:00.000000 +0000 query IIIT SELECT d[1], d[2], e.1, e.2 FROM t3; diff --git a/tests/sqllogictests/suites/base/09_fuse_engine/09_0021_read_tuple_array.test b/tests/sqllogictests/suites/base/09_fuse_engine/09_0021_read_tuple_array.test index d7b10b11d5511..309590afdb55e 100644 --- a/tests/sqllogictests/suites/base/09_fuse_engine/09_0021_read_tuple_array.test +++ b/tests/sqllogictests/suites/base/09_fuse_engine/09_0021_read_tuple_array.test @@ -74,9 +74,9 @@ INSERT INTO TABLE t2 VALUES ((1, ('a'), [2, 3]), (10, null, null)), (null, null) query TT SELECT * FROM t2; ---- -(1,('a'),[2,3]) (10,NULL,NULL) +(1,("a"),[2,3]) (10,NULL,NULL) NULL NULL -(2,('c'),[]) (NULL,(NULL),[NULL]) +(2,("c"),[]) (NULL,(NULL),[NULL]) statement ok CREATE TABLE t3 (a Array(Array(UInt8)) NULL, b Array(Array(Int32 NULL) NULL) NULL) @@ -100,9 +100,9 @@ INSERT INTO TABLE t4 VALUES ({1: ['a', 'b']}, {'k1': (1)}), (null, null), ({2: n query TT SELECT * FROM t4; ---- -{1:['a','b']} {'k1':(1)} +{1:["a","b"]} {"k1":(1)} NULL NULL -{2:NULL} {'k2':(NULL)} +{2:NULL} {"k2":(NULL)} statement ok DROP TABLE t diff --git a/tests/sqllogictests/suites/base/09_fuse_engine/09_0022_ddl_alter_table_add_drop_column_native.test b/tests/sqllogictests/suites/base/09_fuse_engine/09_0022_ddl_alter_table_add_drop_column_native.test index d7da413ae1d07..3746d999ba083 100644 --- a/tests/sqllogictests/suites/base/09_fuse_engine/09_0022_ddl_alter_table_add_drop_column_native.test +++ b/tests/sqllogictests/suites/base/09_fuse_engine/09_0022_ddl_alter_table_add_drop_column_native.test @@ -19,7 +19,7 @@ INSERT INTO TABLE `09_0022_t0` values(1,(true, 100, 12.34, 'abc', '2020-01-01', query ITIF SELECT * FROM `09_0022_t0` ---- -1 (1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] 4.0 +1 (1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] 4.0 statement ok create table `09_0022_t0_1`(a int not null, b Tuple(Bool, Int64, Float64, String, Date, Timestamp) not null,c Array(UInt8) not null,d double not null) Engine = fuse STORAGE_FORMAT = 'native' AS SELECT * FROM `09_0022_t0`; @@ -27,7 +27,7 @@ create table `09_0022_t0_1`(a int not null, b Tuple(Bool, Int64, Float64, String query ITIF SELECT * FROM `09_0022_t0_1` ---- -1 (1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] 4.0 +1 (1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] 4.0 statement ok DROP TABLE IF EXISTS `09_0022_t0_1` @@ -54,7 +54,7 @@ SELECT d,b.1,c,b.2,b.3 FROM `09_0022_t0` query TIF SELECT * FROM `09_0022_t0` ---- -(1,100,12.34,'abc','2020-01-01','2020-01-01 00:00:00.000000') [101,2] 4.0 +(1,100,12.34,"abc","2020-01-01","2020-01-01 00:00:00.000000") [101,2] 4.0 statement ok ALTER TABLE `09_0022_t0` DROP COLUMN b @@ -163,8 +163,8 @@ INSERT INTO TABLE `09_0022_t0` (a, m) values(1.0, {2:'mn'}) query FTTT SELECT * FROM `09_0022_t0` order by a ---- -1.0 (202.0,13) ((1,2.0),(3,4)) {2:'mn'} -5.0 (202.0,13) ((1,2.0),(3,4)) {1:'ab'} -6.0 (111.0,2) ((1,2.0),(3,4)) {1:'ab'} -101.0 (202.0,13) ((1,2.0),(3,4)) {1:'ab'} -102.0 (202.0,13) ((3,4.0),(5,6)) {1:'ab'} +1.0 (202.0,13) ((1,2.0),(3,4)) {2:"mn"} +5.0 (202.0,13) ((1,2.0),(3,4)) {1:"ab"} +6.0 (111.0,2) ((1,2.0),(3,4)) {1:"ab"} +101.0 (202.0,13) ((1,2.0),(3,4)) {1:"ab"} +102.0 (202.0,13) ((3,4.0),(5,6)) {1:"ab"} diff --git a/tests/sqllogictests/suites/base/09_fuse_engine/09_0026_merge_into.test b/tests/sqllogictests/suites/base/09_fuse_engine/09_0026_merge_into.test index cdcb48ab61fa3..aa4e68696e476 100644 --- a/tests/sqllogictests/suites/base/09_fuse_engine/09_0026_merge_into.test +++ b/tests/sqllogictests/suites/base/09_fuse_engine/09_0026_merge_into.test @@ -718,8 +718,8 @@ merge into tt2 using(select true as x) as t on (x and tt2.a) when matched and tt query TTT select a, b, c from tt2 order by b; ---- -0 20 {'k2':'v2'} -1 30 {'k1':'v1'} +0 20 {"k2":"v2"} +1 30 {"k1":"v1"} ## add test: source is table statement ok diff --git a/tests/sqllogictests/suites/base/09_fuse_engine/09_0036_merge_into_without_distributed_enable.test b/tests/sqllogictests/suites/base/09_fuse_engine/09_0036_merge_into_without_distributed_enable.test index 0ff95e60ed979..7cf443b39c590 100644 --- a/tests/sqllogictests/suites/base/09_fuse_engine/09_0036_merge_into_without_distributed_enable.test +++ b/tests/sqllogictests/suites/base/09_fuse_engine/09_0036_merge_into_without_distributed_enable.test @@ -709,8 +709,8 @@ merge into tt2 using(select true as x) as t on (x and tt2.a) when matched and tt query TTT select a, b, c from tt2 order by b; ---- -0 20 {'k2':'v2'} -1 30 {'k1':'v1'} +0 20 {"k2":"v2"} +1 30 {"k1":"v1"} ## add test: source is table statement ok diff --git a/tests/sqllogictests/suites/base/11_data_type/11_0002_data_type_string.test b/tests/sqllogictests/suites/base/11_data_type/11_0002_data_type_string.test index 5f7d041a8cff4..3765bd857da64 100644 --- a/tests/sqllogictests/suites/base/11_data_type/11_0002_data_type_string.test +++ b/tests/sqllogictests/suites/base/11_data_type/11_0002_data_type_string.test @@ -8,9 +8,9 @@ SELECT '1'::string from numbers(3) query T SELECT {'w1vY1t5':-15239676694.972677,'6UfU721':-4905646705.765232} from numbers(3); ---- -{'w1vY1t5':-15239676694.972677,'6UfU721':-4905646705.765232} -{'w1vY1t5':-15239676694.972677,'6UfU721':-4905646705.765232} -{'w1vY1t5':-15239676694.972677,'6UfU721':-4905646705.765232} +{"w1vY1t5":-15239676694.972677,"6UfU721":-4905646705.765232} +{"w1vY1t5":-15239676694.972677,"6UfU721":-4905646705.765232} +{"w1vY1t5":-15239676694.972677,"6UfU721":-4905646705.765232} # String concatenation @@ -39,15 +39,15 @@ HELLO world 8 query T SELECT {'key': 'value'::string, 'numbers': 123::string} FROM numbers(2); ---- -{'key':'value','numbers':'123'} -{'key':'value','numbers':'123'} +{"key":"value","numbers":"123"} +{"key":"value","numbers":"123"} # String with scientific notation query T SELECT {'scientific': 1.23e-4, 'regular': 123.456} FROM numbers(1); ---- -{'scientific':0.000123,'regular':123.456000} +{"scientific":0.000123,"regular":123.456000} # String with very long content diff --git a/tests/sqllogictests/suites/base/20+_others/20_0001_planner.test b/tests/sqllogictests/suites/base/20+_others/20_0001_planner.test index 4b4244aeeb9c5..1eb3a3109253d 100644 --- a/tests/sqllogictests/suites/base/20+_others/20_0001_planner.test +++ b/tests/sqllogictests/suites/base/20+_others/20_0001_planner.test @@ -856,11 +856,11 @@ drop table t query T select ('field', number) from numbers(5) order by number ---- -('field',0) -('field',1) -('field',2) -('field',3) -('field',4) +("field",0) +("field",1) +("field",2) +("field",3) +("field",4) statement ok diff --git a/tests/sqllogictests/suites/http_handler/temp_table/alter_temp_tables.test b/tests/sqllogictests/suites/http_handler/temp_table/alter_temp_tables.test index 69d72adc03861..547562474fe82 100644 --- a/tests/sqllogictests/suites/http_handler/temp_table/alter_temp_tables.test +++ b/tests/sqllogictests/suites/http_handler/temp_table/alter_temp_tables.test @@ -123,7 +123,7 @@ SHOW CREATE TABLE `05_0003_at_t4` query TTTT SELECT * FROM `05_0003_at_t4` ---- -a b ['c1','c2'] ('d1','d2') +a b ["c1","c2"] ("d1","d2") statement ok ALTER TABLE `05_0003_at_t4` MODIFY COLUMN a binary not null @@ -167,7 +167,7 @@ SHOW CREATE TABLE `05_0003_at_t4` query TTTT SELECT * FROM `05_0003_at_t4` ---- -a b ['c1','c2'] ('d1','d2') +a b ["c1","c2"] ("d1","d2") statement ok DROP TABLE IF EXISTS `05_0003_at_t4` diff --git a/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_min_max_any.test b/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_min_max_any.test index 7851f23b0e2b6..70154d1fe04cc 100644 --- a/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_min_max_any.test +++ b/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_min_max_any.test @@ -53,8 +53,8 @@ query TT select c, min(h), max(h) from t_min_max_any group by c order by c ---- 1 (1460608685,NULL) (1460608685,NULL) -2 (-698945516,'0DGdV') (-698945516,'0DGdV') -3 (-468605495,'2s3RO') (460198171,'qcCz9') +2 (-698945516,"0DGdV") (-698945516,"0DGdV") +3 (-468605495,"2s3RO") (460198171,"qcCz9") statement ok @@ -91,4 +91,4 @@ select any_value(region), any_value(sales), any_value(15) from t_any_value_test North 15000.00 15 statement ok -drop table t_any_value_test \ No newline at end of file +drop table t_any_value_test diff --git a/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_mix.test b/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_mix.test index e0223288e6f03..7165014484ef3 100644 --- a/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_mix.test +++ b/tests/sqllogictests/suites/query/functions/02_0000_function_aggregate_mix.test @@ -270,7 +270,7 @@ SELECT list(number) from numbers_mt(10) query TT SELECT array_sort(list(id), 'asc'), array_sort(list(var), 'asc') FROM t1; ---- -[1,2,3,4,5,6] ['true','10','"abcd"','{"k":"v"}','[1,2,3]','null'] +[1,2,3,4,5,6] [true,10,"abcd",{"k":"v"},[1,2,3],null] query TT SELECT array_sort(list(id), 'asc'), array_sort(list(arr), 'asc') FROM t2; @@ -469,7 +469,7 @@ select array_agg(x) within group (order by x desc) from t3; query TT select array_agg(s), array_agg(null) from t3; ---- -['abc','def','xyz'] [] +["abc","def","xyz"] [] statement ok create table aggavg(shopid string, goodsid string, avgcostvalue decimal(16, 8), sdate_rn uint64, md string) @@ -530,7 +530,7 @@ select json_object_agg(b, a), json_object_agg(b, c), json_object_agg(b, d), json query TTTTT select array_agg(a), array_agg(b), array_agg(c), array_agg(d), array_agg(e), array_agg('a') from d ---- -[20.00,10.00,4.23,5.99] ['abc','de','xyz'] [100,200,300] ['{"k":"v"}','null','"uvw"','[1,2,3]'] [['a','b'],[],['x','y'],['z']] ['a','a','a','a'] +[20.00,10.00,4.23,5.99] ["abc","de","xyz"] [100,200,300] [{"k":"v"},null,"uvw",[1,2,3]] [["a","b"],[],["x","y"],["z"]] ["a","a","a","a"] statement ok DROP TABLE d diff --git a/tests/sqllogictests/suites/query/functions/02_0002_function_cast.test b/tests/sqllogictests/suites/query/functions/02_0002_function_cast.test index bb1962ea9cc8c..f2a98d5b07e45 100644 --- a/tests/sqllogictests/suites/query/functions/02_0002_function_cast.test +++ b/tests/sqllogictests/suites/query/functions/02_0002_function_cast.test @@ -549,17 +549,17 @@ select cast(position as String), cast(trim as String), cast(substring as String) query TTT select '[1,2,"3"]'::Variant a, a::Array(Variant) b, b::Variant = a; ---- -[1,2,"3"] ['1','2','"3"'] 1 +[1,2,"3"] [1,2,"3"] 1 query TTT select '{"k1":"v1","k2":"v2"}'::Variant a, a::Map(String, String) b, b::Variant = a; ---- -{"k1":"v1","k2":"v2"} {'k1':'v1','k2':'v2'} 1 +{"k1":"v1","k2":"v2"} {"k1":"v1","k2":"v2"} 1 query TTT select '{"a":1,"b":2}'::Variant a, a::Map(String, Int) b, b::Variant = a; ---- -{"a":1,"b":2} {'a':1,'b':2} 1 +{"a":1,"b":2} {"a":1,"b":2} 1 query TTT select to_jsonb_binary(parse_json('{"data":"bend","test":100}')), to_jsonb_binary(parse_json('[1,2,3]')), to_jsonb_binary(parse_json('100')); diff --git a/tests/sqllogictests/suites/query/functions/02_0015_function_tuples.test b/tests/sqllogictests/suites/query/functions/02_0015_function_tuples.test index 63460207ac009..a15247e3e3c7a 100644 --- a/tests/sqllogictests/suites/query/functions/02_0015_function_tuples.test +++ b/tests/sqllogictests/suites/query/functions/02_0015_function_tuples.test @@ -4,5 +4,5 @@ SELECT (1, 'a', NULL, to_date(18869), (2.1, to_datetime(1630320462000000))) query T SELECT tuple([1,2,3], ['a','b','c'], 10); ---- -([1,2,3],['a','b','c'],10) +([1,2,3],["a","b","c"],10) diff --git a/tests/sqllogictests/suites/query/functions/02_0061_function_array.test b/tests/sqllogictests/suites/query/functions/02_0061_function_array.test index 4f6f787421589..0930372cdb838 100644 --- a/tests/sqllogictests/suites/query/functions/02_0061_function_array.test +++ b/tests/sqllogictests/suites/query/functions/02_0061_function_array.test @@ -57,7 +57,7 @@ select get(col1, index - 7), get(col2, index - 8), get(col3, index - 9) from t query TTTTT select slice(col1, index - 9), slice(col1, -3), slice(col1, 2, 3), slice(col2, 2), slice(col2, 3, 3) from t ---- -[1,2,3,3] [2,3,3] [2,3] ['x','y','z'] ['y'] +[1,2,3,3] [2,3,3] [2,3] ["x","y","z"] ["y"] query BBB select contains(col1, 3), contains(col2, 'x'), contains(col3, '2021-01-01') from t @@ -67,12 +67,12 @@ select contains(col1, 3), contains(col2, 'x'), contains(col3, '2021-01-01') from query T select array_concat(col1::Array(VARIANT), col5::Array(VARIANT)) from t ---- -['1','2','3','3','[1,2]','[]','[null]'] +[1,2,3,3,[1,2],[],[null]] query T select array_concat(col4, col3) from t; ---- -['2023-01-01 02:00:01.000000','2022-02-02 00:00:00.000000'] +["2023-01-01 02:00:01.000000","2022-02-02 00:00:00.000000"] query IIIIII select array_indexof(col1, 2), array_indexof(col1,2), array_indexof(col2,'x'), array_indexof(col3,'2022-02-02'::DATE), array_indexof(col4,'2023-01-01 02:00:02'::TIMESTAMP), array_indexof(col5,[NULL]) from t @@ -87,22 +87,22 @@ select array_indexof([1,2,null,2,null], null) query TTT select array_remove_first(col1), array_remove_first(col2), array_remove_first(col3) from t ---- -[2,3,3] ['x','y','z'] [] +[2,3,3] ["x","y","z"] [] query TTT select array_remove_last(col1), array_remove_last(col2), array_remove_last(col3) from t ---- -[1,2,3] ['x','x','y'] [] +[1,2,3] ["x","x","y"] [] query TTT select array_prepend(0, col1), array_prepend('a', col2), array_prepend('2022-01-01'::DATE, col3) from t ---- -[0,1,2,3,3] ['a','x','x','y','z'] ['2022-01-01','2022-02-02'] +[0,1,2,3,3] ["a","x","x","y","z"] ["2022-01-01","2022-02-02"] query TTT select array_append(col1, 4), array_append(col2, 'z'), array_append(col3, '2022-03-03'::DATE) from t ---- -[1,2,3,3,4] ['x','x','y','z','z'] ['2022-02-02','2022-03-03'] +[1,2,3,3,4] ["x","x","y","z","z"] ["2022-02-02","2022-03-03"] query III select array_unique(col1), array_unique(col2), array_unique(col3) from t @@ -112,7 +112,7 @@ select array_unique(col1), array_unique(col2), array_unique(col3) from t query TTT select array_distinct(col1), array_distinct(col2), array_distinct(col3) from t ---- -[1,2,3] ['x','y','z'] ['2022-02-02'] +[1,2,3] ["x","y","z"] ["2022-02-02"] query T select array_distinct([array_distinct([NULL, NULL])]) @@ -202,12 +202,12 @@ select array_aggregate(col1, 'max'), array_aggregate(col1, 'min'), array_aggrega query TTTTTTTT select array_sort(col1),array_sort(col2),array_sort(col3),array_sort(col4),array_sort(col5), array_sort([NULL, NULL, NULL]), array_sort([[], [], []]), array_sort([{}, {}, {}]) from t ---- -[1,2,3,3] ['x','x','y','z'] ['2022-02-02'] ['2023-01-01 02:00:01.000000'] [[],[NULL],[1,2]] [NULL,NULL,NULL] [[],[],[]] [{},{},{}] +[1,2,3,3] ["x","x","y","z"] ["2022-02-02"] ["2023-01-01 02:00:01.000000"] [[],[NULL],[1,2]] [NULL,NULL,NULL] [[],[],[]] [{},{},{}] query TTTTT select array_sort(col1, 'asc', 'NULLS FIRST'),array_sort(col2, 'desc'),array_sort(col3, 'desc', 'nulls last'),array_sort(col4),array_sort(col5, 'DESC', 'NULLS FIRST') from t ---- -[1,2,3,3] ['z','y','x','x'] ['2022-02-02'] ['2023-01-01 02:00:01.000000'] [[1,2],[NULL],[]] +[1,2,3,3] ["z","y","x","x"] ["2022-02-02"] ["2023-01-01 02:00:01.000000"] [[1,2],[NULL],[]] statement error 1065 select array_sort(col1, 'asc', 'nulls fir') from t; @@ -223,7 +223,7 @@ select array_transform([1, 2, NULL, 3], x -> x + 1) query T select array_transform(['data', 'a', 'b'], data -> CONCAT(data, 'bend')) ---- -['databend','abend','bbend'] +["databend","abend","bbend"] query T select array_apply(array_apply([5, NULL, 6], x -> COALESCE(x, 0) + 1), y -> y + 10) @@ -233,7 +233,7 @@ select array_apply(array_apply([5, NULL, 6], x -> COALESCE(x, 0) + 1), y -> y + query TT select array_transform(col1, A -> a * 2), array_apply(col2, B -> upper(B)) from t ---- -[2,4,6,6] ['X','X','Y','Z'] +[2,4,6,6] ["X","X","Y","Z"] statement error 1065 select array_transform([1, 2], x -> y + 1) @@ -249,7 +249,7 @@ select array_filter([5, -6, NULL, 7], x -> x > 0) query T select array_filter(['Hello', 'abc World'], x -> x LIKE '%World%'); ---- -['abc World'] +["abc World"] query T select array_filter(array_filter([2, 4, 3, 1, 20, 10, 3, 30], x -> x % 2 = 0), y -> y % 5 = 0) @@ -259,7 +259,7 @@ select array_filter(array_filter([2, 4, 3, 1, 20, 10, 3, 30], x -> x % 2 = 0), y query TT select array_filter(col1, a -> a % 2 = 1), array_filter(col2, b -> b = 'x') from t ---- -[1,3,3] ['x','x'] +[1,3,3] ["x","x"] query T with t as (select [2,3] as y) select array_filter([1,2], el -> not contains(y, el)) from t @@ -346,30 +346,30 @@ insert into t2 values([1,2,3], ['a','b','c'], [['k1','k2'],['k3']]), (null, null query TT select array_concat(col1, [10,11]), array_concat(['x','y'], col2) from t2 ---- -[1,2,3,10,11] ['x','y','a','b','c'] +[1,2,3,10,11] ["x","y","a","b","c"] NULL NULL -[5,6,NULL,10,11] ['x','y','x',NULL,'y'] +[5,6,NULL,10,11] ["x","y","x",NULL,"y"] query T select array_flatten(col3) from t2 ---- -['k1','k2','k3'] +["k1","k2","k3"] NULL -['k4','k5'] +["k4","k5"] query TT select array_prepend(0, col1), array_prepend('v', col2) from t2 ---- -[0,1,2,3] ['v','a','b','c'] -[0] ['v'] -[0,5,6,NULL] ['v','x',NULL,'y'] +[0,1,2,3] ["v","a","b","c"] +[0] ["v"] +[0,5,6,NULL] ["v","x",NULL,"y"] query TT select array_append(col1, 10), array_append(col2, 'z') from t2 ---- -[1,2,3,10] ['a','b','c','z'] -[10] ['z'] -[5,6,NULL,10] ['x',NULL,'y','z'] +[1,2,3,10] ["a","b","c","z"] +[10] ["z"] +[5,6,NULL,10] ["x",NULL,"y","z"] statement ok DROP TABLE IF EXISTS t3 @@ -446,12 +446,12 @@ NULL NULL NULL NULL NULL query T SELECT arrays_zip(1, 'a', null); ---- -[(1,'a',NULL)] +[(1,"a",NULL)] query T SELECT arrays_zip([1,2,3], ['a','b','c'], 10); ---- -[(1,'a',10),(2,'b',10),(3,'c',10)] +[(1,"a",10),(2,"b",10),(3,"c",10)] statement error 1006 SELECT arrays_zip([1,2,3], ['a','b'], 10); @@ -487,8 +487,8 @@ SELECT ids.id, array_filter(array_agg(px.payload), x -> x is not null) AS px_pay FROM u ids LEFT JOIN c px ON px.id = ids.id GROUP BY ids.id ORDER BY ids.id; ---- -1 ['[1,2]','[3,4]'] -2 ['123'] +1 [[1,2],[3,4]] +2 [123] query T SELECT array_compact([1, NULL, 2, NULL, 3]) @@ -548,7 +548,7 @@ SELECT array_remove([1, 2, 3], 4) query T SELECT array_remove(['a', 'b', 'a', null], 'a') ---- -['b',NULL] +["b",NULL] query T SELECT array_remove([NULL, 1, 2, NULL], NULL) @@ -563,7 +563,7 @@ SELECT array_reverse([1, 2, 3]) query T SELECT array_reverse(['a', 'b', 'c', null]) ---- -[NULL,'c','b','a'] +[NULL,"c","b","a"] statement ok diff --git a/tests/sqllogictests/suites/query/functions/02_0065_function_json.test b/tests/sqllogictests/suites/query/functions/02_0065_function_json.test index b1b328649caab..7cb57d7cb457a 100644 --- a/tests/sqllogictests/suites/query/functions/02_0065_function_json.test +++ b/tests/sqllogictests/suites/query/functions/02_0065_function_json.test @@ -366,16 +366,16 @@ SELECT json_each(parse_json('{}')) query T SELECT json_each(parse_json('{"a": 1, "b": [1,2,3], "c": true, "d": {"k1": 1, "k2": 2}}')) ---- -('a','1') -('b','[1,2,3]') -('c','true') -('d','{"k1":1,"k2":2}') +("a",1) +("b",[1,2,3]) +("c",true) +("d",{"k1":1,"k2":2}) query TT SELECT parse_json('{"k1": "v1", "k2": "v2"}') config, json_each(config) ---- -{"k1":"v1","k2":"v2"} ('k1','"v1"') -{"k1":"v1","k2":"v2"} ('k2','"v2"') +{"k1":"v1","k2":"v2"} ("k1","v1") +{"k1":"v1","k2":"v2"} ("k2","v2") query TT SELECT * FROM json_each(parse_json('{"a": 1, "b": [1,2,3], "c": true, "d": {"k1": 1, "k2": 2}}')) diff --git a/tests/sqllogictests/suites/query/functions/02_0067_function_string_split.test b/tests/sqllogictests/suites/query/functions/02_0067_function_string_split.test index 1aa45f7e0225c..da863d4bbec0d 100644 --- a/tests/sqllogictests/suites/query/functions/02_0067_function_string_split.test +++ b/tests/sqllogictests/suites/query/functions/02_0067_function_string_split.test @@ -1,22 +1,22 @@ query T select split('127.0.0.1', '.'); ---- -['127','0','0','1'] +["127","0","0","1"] query T select split('|', '|'); ---- -[''] +[""] query T select split('', '|'); ---- -[''] +[""] query T select split('ab', ''); ---- -['ab'] +["ab"] query T select split_part('ab', '', 1); @@ -94,9 +94,9 @@ insert into t values('127.0.0.1'), ('127.0.0.2'), ('192.168.1.3.2222') query T select split(c1, '.') from t order by c1 ---- -['127','0','0','1'] -['127','0','0','2'] -['192','168','1','3','2222'] +["127","0","0","1"] +["127","0","0","2"] +["192","168","1","3","2222"] query T select split_part(c1, '.', -5), split_part(c1, '.', -4), split_part(c1, '.', 0), split_part(c1, '.', 1), split_part(c1, '.', 4), split_part(c1, '.', 5) from t order by c1 diff --git a/tests/sqllogictests/suites/query/functions/02_0074_function_map.test b/tests/sqllogictests/suites/query/functions/02_0074_function_map.test index e29e03a18fc7a..77eb7cbc2a1c7 100644 --- a/tests/sqllogictests/suites/query/functions/02_0074_function_map.test +++ b/tests/sqllogictests/suites/query/functions/02_0074_function_map.test @@ -20,7 +20,7 @@ select map_size({}) query TT select map_keys({'k1':1,'k2':2,'k3':null}), map_values({'k1':1,'k2':2,'k3':null}) ---- -['k1','k2','k3'] [1,2,NULL] +["k1","k2","k3"] [1,2,NULL] statement ok create table t(col1 Map(String, String Null) Not Null, col2 Map(String, Int Null) Null) @@ -31,8 +31,8 @@ insert into t values({'k1':'v1','k2':'v2','k3':null},{'a':10,'b':20}), ({'k5':'v query TT select map_keys(col1), map_keys(col2) from t ---- -['k1','k2','k3'] ['a','b'] -['k5','k6'] ['d','e','f'] +["k1","k2","k3"] ["a","b"] +["k5","k6"] ["d","e","f"] [] NULL query TT @@ -45,8 +45,8 @@ select map_size(col1), map_size(col2) from t query TT select map_values(col1), map_values(col2) from t ---- -['v1','v2',NULL] [10,20] -['v5','v6'] [40,NULL,50] +["v1","v2",NULL] [10,20] +["v5","v6"] [40,NULL,50] [] NULL statement ok @@ -63,9 +63,9 @@ INSERT INTO map_cat_test VALUES (1, {'name_r11': 'John Smith', 'name_r12': 'Emil query SELECT * FROM map_cat_test LIMIT 3; ---- -1 {'name_r11':'John Smith','name_r12':'Emily Johnson'} {'dob_11':'1988-07-12','dob_12':'1995-03-21'} -2 {'name_r21':'Michael Brown','name_22':'Sarah Davis'} {'dob_21':'1978-08-17','dob_22':'1989-07-19'} -3 {'name_r31':'David Wilson','name_32':'white rose'} {'dob_31':'1998-09-02','dob_32':'1992-05-18'} +1 {"name_r11":"John Smith","name_r12":"Emily Johnson"} {"dob_11":"1988-07-12","dob_12":"1995-03-21"} +2 {"name_r21":"Michael Brown","name_22":"Sarah Davis"} {"dob_21":"1978-08-17","dob_22":"1989-07-19"} +3 {"name_r31":"David Wilson","name_32":"white rose"} {"dob_31":"1998-09-02","dob_32":"1992-05-18"} query SELECT @@ -74,10 +74,9 @@ SELECT FROM map_cat_test; ---- -1 {'name_r11':'John Smith','name_r12':'Emily Johnson','dob_11':'1988-07-12','dob_12':'1995-03-21'} -2 {'name_r21':'Michael Brown','name_22':'Sarah Davis','dob_21':'1978-08-17','dob_22':'1989-07-19'} -3 {'name_r31':'David Wilson','name_32':'white rose','dob_31':'1998-09-02','dob_32':'1992-05-18'} - +1 {"name_r11":"John Smith","name_r12":"Emily Johnson","dob_11":"1988-07-12","dob_12":"1995-03-21"} +2 {"name_r21":"Michael Brown","name_22":"Sarah Davis","dob_21":"1978-08-17","dob_22":"1989-07-19"} +3 {"name_r31":"David Wilson","name_32":"white rose","dob_31":"1998-09-02","dob_32":"1992-05-18"} # Test empty maps query @@ -88,35 +87,35 @@ SELECT MAP_CAT({}, {}) query SELECT MAP_CAT({}, {'k1': 'v1'}) ---- -{'k1':'v1'} +{"k1":"v1"} query SELECT MAP_CAT({'k1': 'v1'}, {}) ---- -{'k1':'v1'} +{"k1":"v1"} # Test deduplication query SELECT MAP_CAT({'k1': 'v1', 'k2': 'v2'}, {'k1': 'abc'}) ---- -{'k1':'abc','k2':'v2'} +{"k1":"abc","k2":"v2"} # Test different map sizes query SELECT MAP_CAT({'k1': 'v1', 'k2': 'v2'}, {'k3': 'v3'}) ---- -{'k1':'v1','k2':'v2','k3':'v3'} +{"k1":"v1","k2":"v2","k3":"v3"} query SELECT MAP_CAT({'k1': 'v1'}, {'k2': 'v2', 'k3': 'v3'}) ---- -{'k1':'v1','k2':'v2','k3':'v3'} +{"k1":"v1","k2":"v2","k3":"v3"} # Test NULL values query SELECT MAP_CAT({'k1': 'v1', 'k2': NULL}, {'k2': 'v2', 'k3': NULL}) ---- -{'k1':'v1','k2':'v2','k3':NULL} +{"k1":"v1","k2":"v2","k3":NULL} # Test nested maps query @@ -125,7 +124,7 @@ SELECT MAP_CAT( {'k2': {'nk3': 'nv3'}, 'k3': {'nk4': 'nv4'}} ) ---- -{'k1':{'nk1':'nv1'},'k2':{'nk3':'nv3'},'k3':{'nk4':'nv4'}} +{"k1":{"nk1":"nv1"},"k2":{"nk3":"nv3"},"k3":{"nk4":"nv4"}} query SELECT MAP_CAT( @@ -133,7 +132,7 @@ SELECT MAP_CAT( {'k3': {'nk1': 'new_nv1'}, 'k4': {'nk3': 'nv3'}} ) ---- -{'k1':{'nk1':'nv1'},'k2':{'nk2':'nv2'},'k3':{'nk1':'new_nv1'},'k4':{'nk3':'nv3'}} +{"k1":{"nk1":"nv1"},"k2":{"nk2":"nv2"},"k3":{"nk1":"new_nv1"},"k4":{"nk3":"nv3"}} # Deleting keys from a map literal query @@ -142,12 +141,12 @@ SELECT MAP_DELETE( 'k3', 'k2' ) ---- -{'k1':'v1','k4':'v4'} +{"k1":"v1","k4":"v4"} query SELECT MAP_DELETE({'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}, ['k3', 'k2', 'k10']) ---- -{'k1':'v1','k4':'v4'} +{"k1":"v1","k4":"v4"} query SELECT MAP_DELETE({}, 'k1', 'k2') @@ -169,9 +168,9 @@ INSERT INTO map_delete_test VALUES ({'a_k1': 'aaa1', 'b_k1': 'bbb1'}), query SELECT * FROM map_delete_test LIMIT 3; ---- -{'a_k1':'aaa1','b_k1':'bbb1'} -{'a_k2':'aaa2','b_k2':'bbb2'} -{'a_k3':'aaa3','b_k3':'bbb3'} +{"a_k1":"aaa1","b_k1":"bbb1"} +{"a_k2":"aaa2","b_k2":"bbb2"} +{"a_k3":"aaa3","b_k3":"bbb3"} query SELECT @@ -179,9 +178,9 @@ SELECT FROM map_delete_test; ---- -{'a_k1':'aaa1','b_k1':'bbb1'} -{'b_k2':'bbb2'} -{'a_k3':'aaa3'} +{"a_k1":"aaa1","b_k1":"bbb1"} +{"b_k2":"bbb2"} +{"a_k3":"aaa3"} # Deleting all keys from a map query @@ -193,13 +192,13 @@ SELECT MAP_DELETE( {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}, 'k1', 'k2', 'k3' ) query SELECT MAP_DELETE( {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}, 'k1', 'k1' ) ---- -{'k2':'v2','k3':'v3'} +{"k2":"v2","k3":"v3"} # Deleting non-existent keys query SELECT MAP_DELETE( {'k1': 'v1', 'k2': 'v2'}, 'k3', 'k4' ) ---- -{'k1':'v1','k2':'v2'} +{"k1":"v1","k2":"v2"} # Test map_contains_key function statement ok @@ -237,12 +236,12 @@ SELECT map_contains_key({'k1': 'v1', 'k2': NULL}, 'k2') query SELECT map_pick({'k1': 'v1', 'k2': 'v2', 'k3': null}, 'k1', 'k3') ---- -{'k1':'v1','k3':NULL} +{"k1":"v1","k3":NULL} query SELECT map_pick({'k1': 'v1', 'k2': 'v2', 'k3': null}, ['k1', 'k3', 'k10']) ---- -{'k1':'v1','k3':NULL} +{"k1":"v1","k3":NULL} query SELECT map_pick({'k1': 'v1', 'k2': 'v2', 'k3': null}, '') @@ -271,13 +270,13 @@ INSERT INTO map_pick_test VALUES ({'k1':'v1','k2':'v2','k3':null},{'a':10,'b':20 query SELECT map_pick(col_str, 'k1', 'k3'), map_pick(col_int, ['a', 'e', 'x']) FROM map_pick_test ---- -{'k1':'v1','k3':NULL} {'a':10} -{} {'e':NULL} +{"k1":"v1","k3":NULL} {"a":10} +{} {"e":NULL} query SELECT map_insert({'k1': 'v1', 'k2': 'v2'}, 'k3', NULL) ---- -{'k1':'v1','k2':'v2','k3':NULL} +{"k1":"v1","k2":"v2","k3":NULL} statement error 1006 SELECT map_insert({'k1': 'v1', 'k2': 'v2'}, 'k1', 'new_v1') @@ -285,12 +284,12 @@ SELECT map_insert({'k1': 'v1', 'k2': 'v2'}, 'k1', 'new_v1') query SELECT map_insert({}, 'k1', 'v1') ---- -{'k1':'v1'} +{"k1":"v1"} query SELECT map_insert({'k1': 'v1', 'k2': 'v2'}, 'k2', 'v3', true) ---- -{'k1':'v1','k2':'v3'} +{"k1":"v1","k2":"v3"} statement error 1006 SELECT map_insert({'k1': 'v1', 'k2': 'v2'}, 'k2', 'v3', false) @@ -307,9 +306,9 @@ INSERT INTO map_insert_test VALUES ({'k1':'v1','k2':'v2','k3':null},{'a':10,'b': query SELECT map_insert(col_str, 'k1', 'k100', true), map_insert(col_int, 'c', 100, false) FROM map_insert_test; ---- -{'k1':'k100','k2':'v2','k3':NULL} {'a':10,'b':20,'c':100} -{'k5':'v5','k6':'v6','k1':'k100'} {'d':40,'e':NULL,'f':50,'c':100} -{'k1':'k100'} {'c':100} +{"k1":"k100","k2":"v2","k3":NULL} {"a":10,"b":20,"c":100} +{"k5":"v5","k6":"v6","k1":"k100"} {"d":40,"e":NULL,"f":50,"c":100} +{"k1":"k100"} {"c":100} # Test map_filter query T @@ -419,8 +418,8 @@ select map_transform_values(col1, (k, v) -> k + 1) from map_lambda_test; query T select map_transform_values(col2, (k, v) -> CONCAT(k, v)) from map_lambda_test; ---- -{'k1':'k1v1','k2':'k2v2'} -{'data':'databend','space':'spacetime'} +{"k1":"k1v1","k2":"k2v2"} +{"data":"databend","space":"spacetime"} {} ## json map functions diff --git a/tests/sqllogictests/suites/query/functions/02_0081_function_string_regexp_extract.test b/tests/sqllogictests/suites/query/functions/02_0081_function_string_regexp_extract.test index 855c10350d35b..7e995e2932e40 100644 --- a/tests/sqllogictests/suites/query/functions/02_0081_function_string_regexp_extract.test +++ b/tests/sqllogictests/suites/query/functions/02_0081_function_string_regexp_extract.test @@ -88,27 +88,27 @@ select regexp_extract('foo-bar-baz', '([a-z]+)-([a-z]+)-([a-z]+)', 10) query T rowsort SELECT id, regexp_extract_all(text_string, pattern, group_index) FROM regex_test; ---- -1 ['John','Doe','age'] -2 ['test'] -3 ['123'] -4 ['2023-05-15'] -5 ['FF0000','00FF00','0000FF'] +1 ["John","Doe","age"] +2 ["test"] +3 ["123"] +4 ["2023-05-15"] +5 ["FF0000","00FF00","0000FF"] 6 [] query T select regexp_extract_all('2023-04-15 2024-05-20', '(\d{4})-(\d{2})-(\d{2})', 0) ---- -['2023-04-15','2024-05-20'] +["2023-04-15","2024-05-20"] query T select regexp_extract_all('John 30, Jane 25', '(\w+) (\d+)', 1) ---- -['John','Jane'] +["John","Jane"] query T select regexp_extract_all('A1 B2 C3', '([A-Z])(\d)', 2) ---- -['1','2','3'] +["1","2","3"] query T select regexp_extract_all('no numbers here', '(\d+)', 0) @@ -123,12 +123,12 @@ select regexp_extract_all('', '(\d+)', 0) query T select regexp_extract_all('Order-123-456 Order-789-012', 'Order-(\d+)-(\d+)', 2) ---- -['456','012'] +["456","012"] query T select regexp_extract_all('img.jpg readme', '(\w+)(?:\.(\w+))?', 2) ---- -['jpg',''] +["jpg",""] statement error select regexp_extract_all('A1 B2 C3', '([A-Z])(\d)', 3) @@ -153,61 +153,61 @@ query T SELECT id, regexp_extract(input_string, '(\d+)-(\d+)-(\d+)', ['y', 'm', 'd']) AS extracted_date FROM regex_test_1 WHERE id = 1; ---- -1 {'y':'2023','m':'04','d':'15'} +1 {"y":"2023","m":"04","d":"15"} query T SELECT id, regexp_extract(input_string, '(\d+)\.(\d+)\.(\d+)\.(\d+)', ['octet1', 'octet2', 'octet3', 'octet4']) AS extracted_ip FROM regex_test_1 WHERE id = 2; ---- -2 {'octet1':'192','octet2':'168','octet3':'1','octet4':'1'} +2 {"octet1":"192","octet2":"168","octet3":"1","octet4":"1"} query T SELECT id, regexp_extract(input_string, '(\w+)_(\w+)_(\w+)', ['part1', 'part2', 'part3']) AS extracted_parts FROM regex_test_1 WHERE id = 3; ---- -3 {'part1':'hello','part2':'world','part3':'rust'} +3 {"part1":"hello","part2":"world","part3":"rust"} query T SELECT id, regexp_extract(input_string, '(\d+)-(\d+)-(\d+)', ['x', 'y', 'z']) AS no_match FROM regex_test_1 WHERE id = 4; ---- -4 {'x':'','y':'','z':''} +4 {"x":"","y":"","z":""} query T SELECT id, regexp_extract(input_string, '(\d+)-(\d+)-(\d+)', ['a', 'b', 'c']) AS empty_string_result FROM regex_test_1 WHERE id = 5; ---- -5 {'a':'','b':'','c':''} +5 {"a":"","b":"","c":""} query T select regexp_extract('2023-04-15', '(\d+)-(\d+)-(\d+)', ['y', 'm', 'd']); ---- -{'y':'2023','m':'04','d':'15'} +{"y":"2023","m":"04","d":"15"} query T SELECT regexp_extract('192.168.1.1', '(\d+)\.(\d+)\.(\d+)\.(\d+)', ['octet1', 'octet2', 'octet3', 'octet4']); ---- -{'octet1':'192','octet2':'168','octet3':'1','octet4':'1'} +{"octet1":"192","octet2":"168","octet3":"1","octet4":"1"} query T SELECT regexp_extract('hello_world_rust', '(\w+)_([\w]+)_(\w+)', ['part1', 'part2', 'part3']); ---- -{'part1':'hello','part2':'world','part3':'rust'} +{"part1":"hello","part2":"world","part3":"rust"} query T SELECT regexp_extract('no-match-here', '(\d+)-(\d+)-(\d+)', ['x', 'y', 'z']); ---- -{'x':'','y':'','z':''} +{"x":"","y":"","z":""} query T SELECT regexp_extract('', '(\d+)-(\d+)-(\d+)', ['a', 'b', 'c']); ---- -{'a':'','b':'','c':''} +{"a":"","b":"","c":""} query T select regexp_extract('2023-04-15', '(\d+)-(\d+)-(\d+)', ['y', 'm']); ---- -{'y':'2023','m':'04'} +{"y":"2023","m":"04"} statement error select regexp_extract('2023-04-15', '(\d+)-(\d+)', ['y', 'm', 'd']); diff --git a/tests/sqllogictests/suites/query/functions/02_0082_function_regexp_split_to_array.test b/tests/sqllogictests/suites/query/functions/02_0082_function_regexp_split_to_array.test index 76dd057fd4226..b31da6df3306a 100644 --- a/tests/sqllogictests/suites/query/functions/02_0082_function_regexp_split_to_array.test +++ b/tests/sqllogictests/suites/query/functions/02_0082_function_regexp_split_to_array.test @@ -1,17 +1,17 @@ query ? SELECT regexp_split_to_array('hello world', '\\s+') AS words; ---- -['hello','world'] +["hello","world"] query ? SELECT regexp_split_to_array('helloTworld', 't') AS words; ---- -['helloTworld'] +["helloTworld"] query ? SELECT regexp_split_to_array('helloTworld', 't', 'c') AS word; ---- -['helloTworld'] +["helloTworld"] statement ok @@ -24,21 +24,20 @@ insert into t values('hello world'), ('hello world'); query ? SELECT regexp_split_to_array(c1, 't', 'i') from t order by c1; ---- -['hello world'] -['hello world'] +["hello world"] +["hello world"] query ? SELECT regexp_split_to_array(c1, 't', 'c') from t order by c1; ---- -['hello world'] -['hello world'] +["hello world"] +["hello world"] query ? SELECT regexp_split_to_array(c1, '\\s+') from t order by c1; ---- -['hello','world'] -['hello','world'] - +["hello","world"] +["hello","world"] statement ok drop table if exists t; @@ -46,7 +45,7 @@ drop table if exists t; query ? SELECT regexp_split_to_array('helloTworld', 't', 'i') AS word; ---- -['hello','world'] +["hello","world"] query ? select count(regexp_split_to_array(',apple,,banana,', ',')); @@ -61,9 +60,9 @@ SELECT count(regexp_split_to_array('the quick brown fox', '\\s*')); query ? select regexp_split_to_array(',apple,,banana,', ','); ---- -['','apple','','banana',''] +["","apple","","banana",""] query ? SELECT regexp_split_to_array('the quick brown fox', '\\s*') AS foo; ---- -['t','h','e','q','u','i','c','k','b','r','o','w','n','f','o','x'] +["t","h","e","q","u","i","c","k","b","r","o","w","n","f","o","x"] diff --git a/tests/sqllogictests/suites/query/functions/cast.test b/tests/sqllogictests/suites/query/functions/cast.test index dfc2017468e32..bb46e4dc664d2 100644 --- a/tests/sqllogictests/suites/query/functions/cast.test +++ b/tests/sqllogictests/suites/query/functions/cast.test @@ -70,7 +70,7 @@ SELECT (false and NULL NOT IN (0.1, 0.2, 0.3,0.4)) ::BIGINT FROM t1,t0 statement ok -create table cast_array (t Array(String NULL) NULL ) +create or replace table cast_array (t Array(String NULL) NULL ) statement ok insert into cast_array values([1,2]), ([1, 555]) @@ -78,15 +78,15 @@ insert into cast_array values([1,2]), ([1, 555]) query T select cast(t as Array(String) Null) from cast_array ---- -['1','2'] -['1','555'] +["1","2"] +["1","555"] # for issue #17620 https://github.com/databendlabs/databend/issues/17620 query T select cast(t as Array(String) Null) from cast_array limit 1 ---- -['1','2'] +["1","2"] statement ok select cast(NULL as VARCHAR) diff --git a/tests/sqllogictests/suites/query/pivot.test b/tests/sqllogictests/suites/query/pivot.test index d218cd9d5c0b7..a656172c6d86b 100644 --- a/tests/sqllogictests/suites/query/pivot.test +++ b/tests/sqllogictests/suites/query/pivot.test @@ -207,8 +207,8 @@ SELECT * FROM cte_0 PIVOT ( ) ORDER BY max_cost_source_url; ---- -url1 ['hero','villain'] ['outdoor','city'] NULL -url2 ['monster'] NULL ['action'] +url1 ["hero","villain"] ["outdoor","city"] NULL +url2 ["monster"] NULL ["action"] # Test CTE with material_name column - this was working case query T?T @@ -224,8 +224,8 @@ SELECT * FROM cte_0 PIVOT ( ) ORDER BY material_name; ---- -material1 ['hero','villain'] ['outdoor','city'] NULL -material2 ['monster'] NULL ['action'] +material1 ["hero","villain"] ["outdoor","city"] NULL +material2 ["monster"] NULL ["action"] # Test materialized CTE (create table) - this was working case statement ok @@ -242,8 +242,8 @@ SELECT * FROM cte_0_materialized PIVOT ( ) ORDER BY max_cost_source_url; ---- -url1 ['hero','villain'] ['outdoor','city'] NULL -url2 ['monster'] NULL ['action'] +url1 ["hero","villain"] ["outdoor","city"] NULL +url2 ["monster"] NULL ["action"] # Test multiple levels of CTE nesting query T?T @@ -262,8 +262,8 @@ SELECT * FROM cte_level2 PIVOT ( ) ORDER BY max_cost_source_url; ---- -url1 ['hero','villain'] ['outdoor','city'] NULL -url2 ['monster'] NULL ['action'] +url1 ["hero","villain"] ["outdoor","city"] NULL +url2 ["monster"] NULL ["action"] # Test cases for PIVOT ANY ORDER BY functionality statement ok diff --git a/tests/sqllogictests/suites/stage/formats/avro/avro_copy.test b/tests/sqllogictests/suites/stage/formats/avro/avro_copy.test index 78c7b88fa3c41..b222022649c45 100644 --- a/tests/sqllogictests/suites/stage/formats/avro/avro_copy.test +++ b/tests/sqllogictests/suites/stage/formats/avro/avro_copy.test @@ -9,7 +9,7 @@ avro/map.avro 2 0 NULL NULL query select * from t ---- -{'math':100} +{"math":100} {} query @@ -29,7 +29,7 @@ avro/array.avro 2 0 NULL NULL query select * from t ---- -['tall','rich','handsome'] +["tall","rich","handsome"] [] query @@ -52,8 +52,8 @@ avro/nested_record.avro 2 0 NULL NULL query select * from t ---- -0 1 ('yang',NULL,(NULL,'yang@m','911')) -1 1 ('wang',NULL,(NULL,'wang@m',NULL)) +0 1 ("yang",NULL,(NULL,"yang@m","911")) +1 1 ("wang",NULL,(NULL,"wang@m",NULL)) statement ok create or replace table t(info variant) diff --git a/tests/sqllogictests/suites/stage/formats/csv/csv_types.test b/tests/sqllogictests/suites/stage/formats/csv/csv_types.test index 92b6f5511bc57..ff83e1330d763 100644 --- a/tests/sqllogictests/suites/stage/formats/csv/csv_types.test +++ b/tests/sqllogictests/suites/stage/formats/csv/csv_types.test @@ -69,7 +69,7 @@ tsv/complex_types.tsv 1 0 NULL NULL query select * from complex ---- -(('c d','{"a":1}'),{1:'["a",0]'},[({'x':2},3)]) 1 +(("c d",{"a":1}),{1:["a",0]},[({"x":2},3)]) 1 statement ok drop stage if exists csv_types @@ -84,7 +84,7 @@ copy into @csv_types from complex; query select $1 from @csv_types ---- -(('c d','{"a":1}'),{1:'["a",0]'},[({'x':2},3)]) +(("c d",{"a":1}),{1:["a",0]},[({"x":2},3)]) statement ok drop file format if exists csv_raw @@ -96,7 +96,7 @@ create file format csv_raw type = 'csv' field_delimiter='#' quote= '`' query select $1 from @csv_types (file_format => 'csv_raw'); ---- -"(('c d','{""a"":1}'),{1:'[""a"",0]'},[({'x':2},3)])",1 +"((""c d"",{""a"":1}),{1:[""a"",0]},[({""x"":2},3)])",1 statement ok remove @csv_types @@ -114,13 +114,13 @@ copy into @csv_types from complex file_format = (format_name= 'csv_special'); query select $1 from @csv_types(file_format => 'csv_special'); ---- -(('c d','{"a":1}'),{1:'["a",0]'},[({'x':2},3)]) +(("c d",{"a":1}),{1:["a",0]},[({"x":2},3)]) query select $1 from @csv_types(file_format => 'csv_raw'); ---- - '((''c d'',''{"a":1}''),{1:''["a",0]''},[({''x'':2},3)])'|1 +'(("c d",{"a":1}),{1:["a",0]},[({"x":2},3)])'|1 statement ok CREATE OR REPLACE TABLE cast_ts_csv (t timestamp, tt tuple(a timestamp)) diff --git a/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_cast.test b/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_cast.test index eb9f98f3093ab..4d8d0bb58261f 100644 --- a/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_cast.test +++ b/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_cast.test @@ -12,9 +12,9 @@ ndjson/cast_sample.ndjson 3 0 NULL NULL query TT select * from cast_ndjson ---- -data1 {'env':'test1','length':'ok'} -data2 {'env':'test2','length':'true'} -data3 {'env':'test3','length':'10'} +data1 {"env":"test1","length":"ok"} +data2 {"env":"test2","length":"true"} +data3 {"env":"test3","length":"10"} statement ok CREATE OR REPLACE TABLE cast_ts_ndjson (t timestamp) diff --git a/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_on_error.test b/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_on_error.test index 7826cc236e76e..8f303ed9ff2c4 100644 --- a/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_on_error.test +++ b/tests/sqllogictests/suites/stage/formats/ndjson/ndjson_on_error.test @@ -13,9 +13,9 @@ ndjson/wrong_sample2.ndjson 3 1 Invalid NDJSON row: key must be a string at line query select * from wrong_ndjson order by a ---- -0 3 3.3 ef 2022-01-01 2022-01-01 00:00:00.000000 [7,8,9] (2,'c') "xyz" -0 4 4.4 gh 2023-01-01 2023-01-01 00:00:00.000000 [10,11] (3,'d') [1,2] -0 3 3.3 ef 2022-01-01 2022-01-01 00:00:00.000000 [7,8,9] (2,'c') "xyz" -0 4 4.4 gh 2023-01-01 2023-01-01 00:00:00.000000 [10,11] (3,'d') [1,2] -1 1 1.1 ab 2020-01-01 2020-01-01 00:00:00.000000 [1,2,3] (0,'a') {"k":"v"} -1 1 1.1 ab 2020-01-01 2020-01-01 00:00:00.000000 [1,2,3] (0,'a') {"k":"v"} +0 3 3.3 ef 2022-01-01 2022-01-01 00:00:00.000000 [7,8,9] (2,"c") "xyz" +0 4 4.4 gh 2023-01-01 2023-01-01 00:00:00.000000 [10,11] (3,"d") [1,2] +0 3 3.3 ef 2022-01-01 2022-01-01 00:00:00.000000 [7,8,9] (2,"c") "xyz" +0 4 4.4 gh 2023-01-01 2023-01-01 00:00:00.000000 [10,11] (3,"d") [1,2] +1 1 1.1 ab 2020-01-01 2020-01-01 00:00:00.000000 [1,2,3] (0,"a") {"k":"v"} +1 1 1.1 ab 2020-01-01 2020-01-01 00:00:00.000000 [1,2,3] (0,"a") {"k":"v"} diff --git a/tests/sqllogictests/suites/stage/formats/orc/select_orc.test b/tests/sqllogictests/suites/stage/formats/orc/select_orc.test index 23a823e2d60ac..6b4a401968493 100644 --- a/tests/sqllogictests/suites/stage/formats/orc/select_orc.test +++ b/tests/sqllogictests/suites/stage/formats/orc/select_orc.test @@ -42,10 +42,10 @@ NULL query select * from @data/orc/nested_map.orc (file_format=>'orc') ---- -{'zero':0,'one':1} +{"zero":0,"one":1} NULL -{'two':2,'tree':3} -{'one':1,'two':2,'nill':NULL} +{"two":2,"tree":3} +{"one":1,"two":2,"nill":NULL} query select * from @data/orc/nested_struct.orc (file_format=>'orc') diff --git a/tests/sqllogictests/suites/stage/formats/parquet/parquet_field_types.test b/tests/sqllogictests/suites/stage/formats/parquet/parquet_field_types.test index 94e2bc39feb0c..497e8b0ef6bce 100644 --- a/tests/sqllogictests/suites/stage/formats/parquet/parquet_field_types.test +++ b/tests/sqllogictests/suites/stage/formats/parquet/parquet_field_types.test @@ -1,26 +1,26 @@ query select * from @data/parquet/tuple.parquet; ---- -1 (1,'a') -2 (3,'b') -3 (3,'c') +1 (1,"a") +2 (3,"b") +3 (3,"c") query select * from @data/parquet/tuple.parquet where t:a = 1; ---- -1 (1,'a') +1 (1,"a") query select * from @data/parquet/tuple.parquet where t:a = id; ---- -1 (1,'a') -3 (3,'c') +1 (1,"a") +3 (3,"c") query select * from @data/parquet/tuple.parquet where t:a >= 2; ---- -2 (3,'b') -3 (3,'c') +2 (3,"b") +3 (3,"c") query select t:b from @data/parquet/tuple.parquet where t:a >= 2; @@ -38,55 +38,55 @@ c query select id, t:a, t from @data/parquet/tuple.parquet ---- -1 1 (1,'a') -2 3 (3,'b') -3 3 (3,'c') +1 1 (1,"a") +2 3 (3,"b") +3 3 (3,"c") query select id, t:a, t from @data/parquet/tuple.parquet where id > 2 ---- -3 3 (3,'c') +3 3 (3,"c") query select id, t:a, t from @data/parquet/tuple.parquet where to_string(t:b) < 'c' ---- -1 1 (1,'a') -2 3 (3,'b') +1 1 (1,"a") +2 3 (3,"b") query select meta from @data/parquet/complex.parquet limit 3 ---- NULL -(NULL,NULL,NULL,NULL,NULL,['http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'],NULL,NULL) -(NULL,NULL,NULL,NULL,NULL,['http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'],NULL,NULL) +(NULL,NULL,NULL,NULL,NULL,["http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"],NULL,NULL) +(NULL,NULL,NULL,NULL,NULL,["http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"],NULL,NULL) query select name from @data/parquet/complex.parquet limit 3 ---- -[(NULL,NULL,'official','Jennifer Infection Control','Infection Control',['Jennifer'],NULL,NULL,NULL),(NULL,NULL,'usual','Jennifer Infection Control','Infection Control',['Jennifer'],NULL,NULL,NULL)] -[(NULL,NULL,'official',NULL,'Quigley282',['Wilmer32'],['Mr.'],NULL,NULL)] -[(NULL,NULL,'official',NULL,'Collier206',['Towanda270'],['Mrs.'],NULL,NULL),(NULL,NULL,'maiden',NULL,'Mayer370',['Towanda270'],['Mrs.'],NULL,NULL)] +[(NULL,NULL,"official","Jennifer Infection Control","Infection Control",["Jennifer"],NULL,NULL,NULL),(NULL,NULL,"usual","Jennifer Infection Control","Infection Control",["Jennifer"],NULL,NULL,NULL)] +[(NULL,NULL,"official",NULL,"Quigley282",["Wilmer32"],["Mr."],NULL,NULL)] +[(NULL,NULL,"official",NULL,"Collier206",["Towanda270"],["Mrs."],NULL,NULL),(NULL,NULL,"maiden",NULL,"Mayer370",["Towanda270"],["Mrs."],NULL,NULL)] query select meta.2, meta.6 from @data/parquet/complex.parquet limit 3 ---- NULL NULL -NULL ['http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'] -NULL ['http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'] +NULL ["http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"] +NULL ["http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"] query select name from @data/parquet/complex.parquet limit 3 ---- -[(NULL,NULL,'official','Jennifer Infection Control','Infection Control',['Jennifer'],NULL,NULL,NULL),(NULL,NULL,'usual','Jennifer Infection Control','Infection Control',['Jennifer'],NULL,NULL,NULL)] -[(NULL,NULL,'official',NULL,'Quigley282',['Wilmer32'],['Mr.'],NULL,NULL)] -[(NULL,NULL,'official',NULL,'Collier206',['Towanda270'],['Mrs.'],NULL,NULL),(NULL,NULL,'maiden',NULL,'Mayer370',['Towanda270'],['Mrs.'],NULL,NULL)] +[(NULL,NULL,"official","Jennifer Infection Control","Infection Control",["Jennifer"],NULL,NULL,NULL),(NULL,NULL,"usual","Jennifer Infection Control","Infection Control",["Jennifer"],NULL,NULL,NULL)] +[(NULL,NULL,"official",NULL,"Quigley282",["Wilmer32"],["Mr."],NULL,NULL)] +[(NULL,NULL,"official",NULL,"Collier206",["Towanda270"],["Mrs."],NULL,NULL),(NULL,NULL,"maiden",NULL,"Mayer370",["Towanda270"],["Mrs."],NULL,NULL)] query select name[1] from @data/parquet/complex.parquet limit 3 ---- -(NULL,NULL,'official','Jennifer Infection Control','Infection Control',['Jennifer'],NULL,NULL,NULL) -(NULL,NULL,'official',NULL,'Quigley282',['Wilmer32'],['Mr.'],NULL,NULL) -(NULL,NULL,'official',NULL,'Collier206',['Towanda270'],['Mrs.'],NULL,NULL) +(NULL,NULL,"official","Jennifer Infection Control","Infection Control",["Jennifer"],NULL,NULL,NULL) +(NULL,NULL,"official",NULL,"Quigley282",["Wilmer32"],["Mr."],NULL,NULL) +(NULL,NULL,"official",NULL,"Collier206",["Towanda270"],["Mrs."],NULL,NULL) query select name[1].5 from @data/parquet/complex.parquet limit 3 @@ -98,9 +98,9 @@ Collier206 query select name[2].6 from @data/parquet/complex.parquet limit 3 ---- -['Jennifer'] +["Jennifer"] NULL -['Towanda270'] +["Towanda270"] # the physical type of column t_timestamp is INT96 query diff --git a/tests/sqllogictests/suites/stage/formats/parquet/read_policy.test b/tests/sqllogictests/suites/stage/formats/parquet/read_policy.test index 075d2f24d28b9..07892c01888f8 100644 --- a/tests/sqllogictests/suites/stage/formats/parquet/read_policy.test +++ b/tests/sqllogictests/suites/stage/formats/parquet/read_policy.test @@ -130,8 +130,8 @@ select id, t:b from @data/parquet/tuple.parquet order by t:a desc, id desc limit query TT select t, t:a from @data/parquet/tuple.parquet order by id desc limit 2; ---- -(3,'c') 3 -(3,'b') 3 +(3,"c") 3 +(3,"b") 3 # topk contains output query TT @@ -143,8 +143,8 @@ select id, t:b, t:a from @data/parquet/tuple.parquet order by t:a desc, id desc query TT select id, t:b, t:a, t from @data/parquet/tuple.parquet order by id desc limit 2; ---- -3 c 3 (3,'c') -2 b 3 (3,'b') +3 c 3 (3,"c") +2 b 3 (3,"b") # POLICY PREDICATE AND TOPK @@ -163,7 +163,7 @@ c 3 query TT select t from @data/parquet/tuple.parquet where id > 1 and t:a > 2 order by id desc limit 1; ---- -(3,'c') +(3,"c") # predicate contains output, but not topk query TT diff --git a/tests/sqllogictests/suites/stage/formats/tsv/tsv_types.test b/tests/sqllogictests/suites/stage/formats/tsv/tsv_types.test index 30a1aaed13252..3947dbdd0a257 100644 --- a/tests/sqllogictests/suites/stage/formats/tsv/tsv_types.test +++ b/tests/sqllogictests/suites/stage/formats/tsv/tsv_types.test @@ -13,7 +13,7 @@ tsv/complex_types.tsv 1 0 NULL NULL query select * from complex ---- -(('c d','{"a":1}'),{1:'["a",0]'},[({'x':2},3)]) 1 +(("c d",{"a":1}),{1:["a",0]},[({"x":2},3)]) 1 statement ok drop stage if exists tsv_types @@ -28,7 +28,7 @@ copy into @tsv_types from complex; query select $1 from @tsv_types ---- -(('c d','{"a":1}'),{1:'["a",0]'},[({'x':2},3)]) +(("c d",{"a":1}),{1:["a",0]},[({"x":2},3)]) statement ok remove @tsv_types @@ -40,7 +40,7 @@ copy into @tsv_types from complex file_format = (type = 'tsv' field_delimiter=', query select $1 from @tsv_types(file_format => 'tsv'); ---- -(('c d'\,'{"a":1}')\,{1:'["a"\,0]'}\,[({'x':2}\,3)]),1 +(("c d"\,{"a":1})\,{1:["a"\,0]}\,[({"x":2}\,3)]),1 statement ok DROP TABLE if exists books; diff --git a/tests/sqllogictests/suites/task/task_dag_test.test b/tests/sqllogictests/suites/task/task_dag_test.test index 6bd36c19c5054..93a052e27291e 100644 --- a/tests/sqllogictests/suites/task/task_dag_test.test +++ b/tests/sqllogictests/suites/task/task_dag_test.test @@ -67,7 +67,7 @@ query SS select name, predecessors from task_dependents(task_name => 'mytaskchild', recursive => true) ---- mytaskroot [] -mytaskchild ['mytaskroot'] +mytaskchild ["mytaskroot"] statement ok @@ -77,7 +77,7 @@ call TASK_DEPENDENTS_ENABLE('mytaskchild'); query SS select name, state, predecessors from task_dependents(task_name => 'mytaskchild') ---- -mytaskchild Started ['mytaskroot'] +mytaskchild Started ["mytaskroot"] statement ok diff --git a/tests/sqllogictests/suites/task/task_ddl_transaction_test.test b/tests/sqllogictests/suites/task/task_ddl_transaction_test.test index 850a487cf0b73..73ad5af7c2013 100644 --- a/tests/sqllogictests/suites/task/task_ddl_transaction_test.test +++ b/tests/sqllogictests/suites/task/task_ddl_transaction_test.test @@ -24,7 +24,7 @@ CREATE TASK transactionTask query SSSS select name, warehouse, schedule, SPLIT(definition, '\n') from system.tasks where name = 'transactionTask' ---- -transactionTask mywh CRON 0 0 0 1 1 ? 2100 ['BEGIN','SELECT 1;','BEGIN;','DELETE FROM t WHERE c = '';'';','VACUUM TABLE t ;','MERGE INTO t USING s ON t.id = s.id WHEN MATCHED THEN UPDATE *;','COMMIT;','END;'] +transactionTask mywh CRON 0 0 0 1 1 ? 2100 ["BEGIN","SELECT 1;","BEGIN;","DELETE FROM t WHERE c = ';';","VACUUM TABLE t ;","MERGE INTO t USING s ON t.id = s.id WHEN MATCHED THEN UPDATE *;","COMMIT;","END;"] query S select state from system.tasks where name = 'transactionTask' @@ -59,7 +59,7 @@ ALTER TASK transactionTask MODIFY AS BEGIN query S select SPLIT(definition, '\n') from system.tasks where name = 'transactionTask' ---- -['BEGIN','SELECT 2024;','BEGIN;','MERGE INTO t USING s ON t.id = s.id WHEN MATCHED THEN UPDATE *;','DELETE FROM t WHERE c = '';'';','ABORT;','END;'] +["BEGIN","SELECT 2024;","BEGIN;","MERGE INTO t USING s ON t.id = s.id WHEN MATCHED THEN UPDATE *;","DELETE FROM t WHERE c = ';';","ABORT;","END;"] statement ok DROP TASK transactionTask diff --git a/tests/sqllogictests/suites/udf_server/udf_server_test.test b/tests/sqllogictests/suites/udf_server/udf_server_test.test index 162e9df4d249e..cda00cb72e44a 100644 --- a/tests/sqllogictests/suites/udf_server/udf_server_test.test +++ b/tests/sqllogictests/suites/udf_server/udf_server_test.test @@ -294,22 +294,22 @@ select json_concat([parse_json('{"age": 30, "isPremium": "false", "lastActive": query T select tuple_access(([NULL, parse_json('{"color":"red", "fontSize":16, "theme":"dark"}')], 2, 'foo'), 0, 1); ---- -(NULL,'[null,{"color":"red","fontSize":16,"theme":"dark"}]') +(NULL,[null,{"color":"red","fontSize":16,"theme":"dark"}]) query T select return_all(true, NULL, NULL, 3, 4, NULL, 6, 7, 8, NULL, 10.2, NULL, to_datetime(1630833797), 'foo', NULL); ---- -(1,NULL,NULL,3,4,NULL,6,7,8,NULL,10.2,NULL,'2021-09-05 09:23:17.000000','foo',NULL) +(1,NULL,NULL,3,4,NULL,6,7,8,NULL,10.2,NULL,"2021-09-05 09:23:17.000000","foo",NULL) query T select return_all_non_nullable(true, -1, 2, 3, 4, 5, 6, 7, 8, 9.1, 10.2, to_date(18866), to_datetime(1630833797), 'foo', parse_json('{"foo": 30, "bar": "false"}')); ---- -(1,-1,2,3,4,5,6,7,8,9.1,10.2,'2021-08-27','2021-09-05 09:23:17.000000','foo','{"bar":"false","foo":30}') +(1,-1,2,3,4,5,6,7,8,9.1,10.2,"2021-08-27","2021-09-05 09:23:17.000000","foo",{"bar":"false","foo":30}) query T select return_all_arrays([true], [-1, -2], [2,64,67], [3,1234], [4,2341], [5,10], [6,1231], [7,1234], [8,63435], [9.1,231.123], [10.2,6547.789], [to_date(18866)], [to_datetime(1630833797)], ['foo'], [parse_json('{"foo": 30, "bar": "false"}')]); ---- -([1],[-1,-2],[2,64,67],[3,1234],[4,2341],[5,10],[6,1231],[7,1234],[8,63435],[9.1,231.123],[10.2,6547.789],['2021-08-27'],['2021-09-05 09:23:17.000000'],['foo'],['{"bar":"false","foo":30}']) +([1],[-1,-2],[2,64,67],[3,1234],[4,2341],[5,10],[6,1231],[7,1234],[8,63435],[9.1,231.123],[10.2,6547.789],["2021-08-27"],["2021-09-05 09:23:17.000000"],["foo"],[{"bar":"false","foo":30}]) ## table test @@ -383,7 +383,7 @@ SELECT map_access(traffic_info, 'ip') as ip_address, COUNT(*) as visits FROM web query T select traffic_info from web_traffic_data where map_access(traffic_info, 'ip') = '192.168.1.2' ---- -{'ip':'192.168.1.2','url':'example.com/about'} +{"ip":"192.168.1.2","url":"example.com/about"} query IT select max(id), map_access(traffic_info, 'ip') from web_traffic_data group by map_access(traffic_info, 'ip') order by map_access(traffic_info, 'ip') diff --git a/tests/suites/1_stateful/00_stage/00_0010_parquet_meta_cache.result b/tests/suites/1_stateful/00_stage/00_0010_parquet_meta_cache.result index 9ce4047f0047a..345e538e3f4e3 100755 --- a/tests/suites/1_stateful/00_stage/00_0010_parquet_meta_cache.result +++ b/tests/suites/1_stateful/00_stage/00_0010_parquet_meta_cache.result @@ -1,9 +1,9 @@ >>>> DROP STAGE IF EXISTS s1; >>>> CREATE STAGE s1; >>>> select /*+ set_var(parquet_fast_read_bytes=0) */ * from @s1/parquet_cache.parquet -1 (1,'a') -2 (3,'b') -3 (3,'c') +1 (1,"a") +2 (3,"b") +3 (3,"c") <<<< >>>> select /*+ set_var(parquet_fast_read_bytes=0) */ * from @s1/parquet_cache.parquet 1 {"a":11} diff --git a/tests/suites/1_stateful/01_streaming_load/01_0002_streaming_load_variant.result b/tests/suites/1_stateful/01_streaming_load/01_0002_streaming_load_variant.result index 24e4656ddf7b3..9ea8a55be24b0 100755 --- a/tests/suites/1_stateful/01_streaming_load/01_0002_streaming_load_variant.result +++ b/tests/suites/1_stateful/01_streaming_load/01_0002_streaming_load_variant.result @@ -49,7 +49,7 @@ csv/json_sample2.csv ndjson/json_sample.ndjson 4 -true 1 1.1 ab 2020-01-01 2020-01-01 00:00:00.000000 [1,2,3] (0,'a') {"k":"v"} -true 2 2.2 cd 2021-01-01 2021-01-01 00:00:00.000000 [4,5,6] (1,'b') 123 -false 3 3.3 ef 2022-01-01 2022-01-01 00:00:00.000000 [7,8,9] (2,'c') "xyz" -false 4 4.4 gh 2023-01-01 2023-01-01 00:00:00.000000 [10,11] (3,'d') [1,2] +true 1 1.1 ab 2020-01-01 2020-01-01 00:00:00.000000 [1,2,3] (0,"a") {"k":"v"} +true 2 2.2 cd 2021-01-01 2021-01-01 00:00:00.000000 [4,5,6] (1,"b") 123 +false 3 3.3 ef 2022-01-01 2022-01-01 00:00:00.000000 [7,8,9] (2,"c") "xyz" +false 4 4.4 gh 2023-01-01 2023-01-01 00:00:00.000000 [10,11] (3,"d") [1,2] diff --git a/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.result b/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.result index 5075675eccfff..ab41685d7e8e4 100755 --- a/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.result +++ b/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.result @@ -1,21 +1,21 @@ ---CSV 2 -2 179 179 -"a""b",1.0,"['a""b']","{""k"":""v""}","2044-05-06 10:25:02.868894",10.01,"{'k1':10,'k2':20}","('a',5)" -\N,2.0,"['a''b']","[1]","2044-05-06 10:25:02.868894",-10.01,"{}","('b',10)" +2 239 239 +"a""b",1.0,"[""a""""b""]","{""k"":""v""}","2044-05-06 10:25:02.868894",10.01,"{""k1"":10,""k2"":20}","(""a"",5)","[{""k"":""v""},[1,2,3]]" +\N,2.0,"[""a'b""]","[1]","2044-05-06 10:25:02.868894",-10.01,"{}","(""b"",10)","[{""ab"":""c'd""}]" unload1.txt 2 0 NULL NULL -2 179 179 +2 239 239 ---TSV 2 -2 151 151 -a"b 1.0 ['a"b'] {"k":"v"} 2044-05-06 10:25:02.868894 10.01 {'k1':10,'k2':20} ('a',5) -\N 2.0 ['a''b'] [1] 2044-05-06 10:25:02.868894 -10.01 {} ('b',10) +2 186 186 +a"b 1.0 ["a""b"] {"k":"v"} 2044-05-06 10:25:02.868894 10.01 {"k1":10,"k2":20} ("a",5) [{"k":"v"},[1,2,3]] +\N 2.0 ["a'b"] [1] 2044-05-06 10:25:02.868894 -10.01 {} ("b",10) [{"ab":"c'd"}] unload1.txt 2 0 NULL NULL -2 151 151 +2 186 186 ---NDJSON 2 -2 244 244 -{"a":"a\"b","b":1.0,"c":["a\"b"],"d":{"k":"v"},"e":"2044-05-06 10:25:02.868894","f":10.01,"g":{"k1":10,"k2":20},"h":{"1":"a","2":5}} -{"a":null,"b":2.0,"c":["a'b"],"d":[1],"e":"2044-05-06 10:25:02.868894","f":-10.01,"g":{},"h":{"1":"b","2":10}} +2 287 287 +{"a":"a\"b","b":1.0,"c":["a\"b"],"d":{"k":"v"},"e":"2044-05-06 10:25:02.868894","f":10.01,"g":{"k1":10,"k2":20},"h":{"1":"a","2":5},"i":[{"k":"v"},[1,2,3]]} +{"a":null,"b":2.0,"c":["a'b"],"d":[1],"e":"2044-05-06 10:25:02.868894","f":-10.01,"g":{},"h":{"1":"b","2":10},"i":[{"ab":"c'd"}]} unload1.txt 2 0 NULL NULL -2 244 244 +2 287 287 diff --git a/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.sh b/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.sh index 0fd6929d20c68..634d0a9bc3cea 100755 --- a/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.sh +++ b/tests/suites/1_stateful/05_formats/05_00_01_load_unload_all.sh @@ -15,13 +15,14 @@ echo "CREATE TABLE test_load_unload e timestamp, f decimal(4, 2), g map(string,int), - h tuple(string,int) + h tuple(string,int), + i array(variant) );" | $BENDSQL_CLIENT_CONNECT insert_data() { echo "insert into test_load_unload values - ('a\"b', 1, ['a\"b'], parse_json('{\"k\":\"v\"}'), '2044-05-06T03:25:02.868894-07:00', 010.011, {'k1':10,'k2':20}, ('a', 5)), - (null, 2, ['a\'b'], parse_json('[1]'), '2044-05-06T03:25:02.868894-07:00', -010.011, {}, ('b',10)) + ('a\"b', 1, ['a\"b'], parse_json('{\"k\":\"v\"}'), '2044-05-06T03:25:02.868894-07:00', 010.011, {'k1':10,'k2':20}, ('a', 5), ['{\"k\":\"v\"}','[1,2,3]']), + (null, 2, ['a\'b'], parse_json('[1]'), '2044-05-06T03:25:02.868894-07:00', -010.011, {}, ('b',10), ['{\"ab\":\"c\'d\"}']) " | $BENDSQL_CLIENT_CONNECT } diff --git a/tests/suites/1_stateful/05_formats/05_05_parquet/05_05_01_parquet_load_unload.result b/tests/suites/1_stateful/05_formats/05_05_parquet/05_05_01_parquet_load_unload.result index fa7eb78b3bc5e..075e6263cd5a4 100644 --- a/tests/suites/1_stateful/05_formats/05_05_parquet/05_05_01_parquet_load_unload.result +++ b/tests/suites/1_stateful/05_formats/05_05_parquet/05_05_01_parquet_load_unload.result @@ -25,8 +25,8 @@ ); 2 >>>> select * from test_load_unload -a"b 1 ['a"b'] {"k":"v"} 2044-05-06 10:25:02.868894 10.01 ('a',5) ['{"k":"v"}'] [('a',5)] -NULL 2 ['a'b'] [1] 2044-05-06 10:25:02.868894 -10.01 ('b',10) ['[1]'] [('b',10)] +a"b 1 ["a\"b"] {"k":"v"} 2044-05-06 10:25:02.868894 10.01 ("a",5) [{"k":"v"}] [("a",5)] +NULL 2 ["a'b"] [1] 2044-05-06 10:25:02.868894 -10.01 ("b",10) [[1]] [("b",10)] <<<< >>>> copy into @s1/unload1/ from test_load_unload 2 406