Consider the following example:
CREATE TABLE data (root.array_str Array(UInt8)) ENGINE = MergeTree() ORDER BY tuple();
INSERT INTO data VALUES ([]);
ALTER TABLE data ADD COLUMN root.nested_array Array(Array(UInt8));
In this case the first part will not have data for root.nested_array,
and thanks to #37152 it will simply read offsets column from
root.array_str, however since root.nested_array is a nested array, it
will try to read elements from the same offsets stream and if you are
lucky enough you will get one of the following errors:
- Cannot read all data. Bytes read: 1. Bytes expected: 8.: (while reading column root.nested_array): While executing MergeTreeInOrder. (CANNOT_READ_ALL_DATA)
- DB::Exception: Array size is too large: 8233460228287709730: (while reading column serp.serp_features): While executing MergeTreeInOrder.
So to address this, findColumnForOffsets() had been changed to return
the level of the column too, to allow to read only up to this level.
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
Otherwise the following leads to SIGSEGV in debug/sanitizers builds:
echo '0000000000Custom NULL representation0000000000' | clickhouse-local -q "desc file('-', 'TSV')"
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
Refernce files had been checked manually and using this onelinear:
$ diff <(jq -r .bool ../tests/queries/0_stateless/02152_bool_type_parsing.stdout) ../tests/queries/0_stateless/02152_bool_type_parsing.reference
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
Previously the following query does not works correctly:
SELECT number FROM numbers(5) SETTINGS output_format_json_array_of_rows = 1 FORMAT JSONEachRow
While this one works OK:
SELECT number FROM numbers(5) FORMAT JSONEachRow SETTINGS output_format_json_array_of_rows = 1
The problem is in which AST those settings are stored, use the logic as
executeQuery() has to apply them:
c83f701696/src/Interpreters/executeQuery.cpp (L467-L497)
Note, the only problem should be with the settings for FORMAT, since
client applies thoes settings (and formats) locally w/o server, while in
case of i.e. HTTP it will be applied on the server and everything will
works fine.
Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>