From 5356bc6fb52a61ce141cb72c0589657c15c8b998 Mon Sep 17 00:00:00 2001 From: nmreadelf Date: Mon, 8 Jan 2024 21:40:26 +0800 Subject: [PATCH 1/8] fix: core dump --- programs/local/LocalChdb.h | 1 - programs/local/LocalServer.cpp | 20 +++++++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/programs/local/LocalChdb.h b/programs/local/LocalChdb.h index a6f3818b733..9f00b7d0ba7 100644 --- a/programs/local/LocalChdb.h +++ b/programs/local/LocalChdb.h @@ -22,7 +22,6 @@ class local_result_wrapper ~local_result_wrapper() { free_result_v2(result); - delete result; } char * data() { diff --git a/programs/local/LocalServer.cpp b/programs/local/LocalServer.cpp index d5beb4e762b..c8f604a67c2 100644 --- a/programs/local/LocalServer.cpp +++ b/programs/local/LocalServer.cpp @@ -1078,7 +1078,7 @@ std::unique_ptr pyEntryClickHouseLocal(int argc, char ** argv) local_result * query_stable(int argc, char ** argv) { auto result = pyEntryClickHouseLocal(argc, argv); - if (result->error_msg_.empty()) + if (result->error_msg_.empty() || result->buf_ == nullptr) { return nullptr; } @@ -1104,19 +1104,19 @@ void free_result(local_result * result) delete vec; result->_vec = nullptr; } + delete result; } local_result_v2 * query_stable_v2(int argc, char ** argv) { auto result = pyEntryClickHouseLocal(argc, argv); + if (result->buf_ == nullptr) { + return nullptr; + } + local_result_v2 * res = new local_result_v2; - if (!result->error_msg_.empty()) + if (result->error_msg_.empty()) { - res->error_message = new char[result->error_msg_.size() + 1]; - memcpy(res->error_message, result->error_msg_.c_str(), result->error_msg_.size() + 1); - res->_vec = nullptr; - res->buf = nullptr; - } else { res->len = result->buf_->size(); res->buf = result->buf_->data(); res->_vec = result->buf_; @@ -1124,6 +1124,11 @@ local_result_v2 * query_stable_v2(int argc, char ** argv) res->bytes_read = result->bytes_; res->elapsed = result->elapsed_; res->error_message = nullptr; + } else { + res->error_message = new char[result->error_msg_.size() + 1]; + memcpy(res->error_message, result->error_msg_.c_str(), result->error_msg_.size() + 1); + res->_vec = nullptr; + res->buf = nullptr; } return res; } @@ -1145,6 +1150,7 @@ void free_result_v2(local_result_v2 * result) delete[] result->error_message; result->error_message = nullptr; } + delete result; } /** From c453c54cdef78a77f9715a4c7f3414c6f02c2d88 Mon Sep 17 00:00:00 2001 From: nmreadelf Date: Tue, 9 Jan 2024 07:18:05 +0800 Subject: [PATCH 2/8] fix: session query --- chdb/dbapi/connections.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chdb/dbapi/connections.py b/chdb/dbapi/connections.py index 2cbbc082ce9..0a3ae1fcebc 100644 --- a/chdb/dbapi/connections.py +++ b/chdb/dbapi/connections.py @@ -123,7 +123,7 @@ def _execute_command(self, sql): if DEBUG: print("DEBUG: query:", sql) try: - res = self._session.query(sql, output_format="JSON") + res = self._session.query(sql, fmt="JSON") if res.has_error(): raise err.DatabaseError(res.error_message()) self._resp = res.data() From 8069f582738187146273ab2b6390d360ccd961f9 Mon Sep 17 00:00:00 2001 From: nmreadelf Date: Tue, 9 Jan 2024 10:25:52 +0800 Subject: [PATCH 3/8] fix: test stateful ut --- tests/test_stateful.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/test_stateful.py b/tests/test_stateful.py index 9e4371afdc8..a6650f969ac 100644 --- a/tests/test_stateful.py +++ b/tests/test_stateful.py @@ -62,8 +62,8 @@ def test_path(self): # remove session dir sess2.cleanup() - ret = sess2.query("SELECT chdb_xxx()", "CSV") - self.assertEqual(str(ret), "") + with self.assertRaises(Exception): + ret = sess2.query("SELECT chdb_xxx()", "CSV") def test_mergetree(self): sess = session.Session() @@ -90,8 +90,8 @@ def test_tmp(self): # another session sess2 = session.Session() - ret = sess2.query("SELECT chdb_xxx()", "CSV") - self.assertEqual(str(ret), "") + with self.assertRaises(Exception): + ret = sess2.query("SELECT chdb_xxx()", "CSV") def test_two_sessions(self): sess1 = session.Session() @@ -120,8 +120,8 @@ def test_context_mgr(self): self.assertEqual(str(ret), '"0.12.0"\n') with session.Session() as sess: - ret = sess.query("SELECT chdb_xxx()", "CSV") - self.assertEqual(str(ret), "") + with self.assertRaises(Exception): + ret = sess.query("SELECT chdb_xxx()", "CSV") def test_zfree_thread_count(self): time.sleep(3) From 7c6b37a65cd64f9ed3831ba80126fd14b8594fc7 Mon Sep 17 00:00:00 2001 From: auxten Date: Mon, 8 Jan 2024 20:05:29 +0800 Subject: [PATCH 4/8] Fix pyenv --- .github/workflows/build_arm_wheels.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_arm_wheels.yml b/.github/workflows/build_arm_wheels.yml index 3188ad51cdb..97cc426cc87 100644 --- a/.github/workflows/build_arm_wheels.yml +++ b/.github/workflows/build_arm_wheels.yml @@ -22,7 +22,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-20.04 ] + os: [ ubuntu-22.04 ] env: RUNNER_OS: ${{ matrix.os }} PYTHON_VERSIONS: "3.8 3.9 3.10 3.11 3.12" @@ -34,7 +34,7 @@ jobs: run: | cp -a /builder_cache/contrib ./ - name: remove old clang and link clang-17 to clang - if: matrix.os == 'ubuntu-20.04' + if: matrix.os == 'ubuntu-22.04' run: | sudo rm -f /usr/bin/clang || true sudo ln -s /usr/bin/clang-17 /usr/bin/clang @@ -60,6 +60,9 @@ jobs: df -h - name: Audit wheels run: | + export PYENV_ROOT="$HOME/.pyenv" + [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" + eval "$(pyenv init -)" pyenv local "${{ matrix.python-version }}" python3 -m pip install auditwheel auditwheel -v repair -w dist/ --plat manylinux_2_17_aarch64 dist/*.whl @@ -91,6 +94,9 @@ jobs: - name: Upload pypi if: ${{ startsWith(github.ref, 'refs/tags/v') || startsWIth(github.event.inputs.TAG_NAME, 'v') }} run: | + export PYENV_ROOT="$HOME/.pyenv" + [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" + eval "$(pyenv init -)" pyenv local "${{ matrix.python-version }}" python3 -m pip install twine python3 -m twine upload ./dist/*.whl From e1b1c316de45b539feb27a21e1efba8eec9c40ba Mon Sep 17 00:00:00 2001 From: Yunyu Lin Date: Mon, 8 Jan 2024 15:14:33 -0500 Subject: [PATCH 5/8] Disable output_format_json_quote_64bit_integers --- src/Core/Settings.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Core/Settings.h b/src/Core/Settings.h index 9237e41c8dd..b77b0e857ab 100644 --- a/src/Core/Settings.h +++ b/src/Core/Settings.h @@ -979,7 +979,7 @@ class IColumn; M(UInt64, format_binary_max_array_size, 1_GiB, "The maximum allowed size for Array in RowBinary format. It prevents allocating large amount of memory in case of corrupted data. 0 means there is no limit", 0) \ M(URI, format_avro_schema_registry_url, "", "For AvroConfluent format: Confluent Schema Registry URL.", 0) \ \ - M(Bool, output_format_json_quote_64bit_integers, true, "Controls quoting of 64-bit integers in JSON output format.", 0) \ + M(Bool, output_format_json_quote_64bit_integers, false, "Controls quoting of 64-bit integers in JSON output format.", 0) \ M(Bool, output_format_json_quote_denormals, false, "Enables '+nan', '-nan', '+inf', '-inf' outputs in JSON output format.", 0) \ M(Bool, output_format_json_quote_decimals, false, "Controls quoting of decimals in JSON output format.", 0) \ M(Bool, output_format_json_quote_64bit_floats, false, "Controls quoting of 64-bit float numbers in JSON output format.", 0) \ From 1fb141a09b913598d3159a53cd3ecb83e4a4a787 Mon Sep 17 00:00:00 2001 From: Yunyu Lin Date: Mon, 8 Jan 2024 15:17:37 -0500 Subject: [PATCH 6/8] Update dbapi test to use Int64 type --- tests/test_dbapi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_dbapi.py b/tests/test_dbapi.py index 4bc973488f5..0ed283e4b9b 100644 --- a/tests/test_dbapi.py +++ b/tests/test_dbapi.py @@ -32,7 +32,7 @@ def test_insert_and_read_data(self): cur.execute(""" CREATE TABLE rate ( day Date, - value Int32 + value Int64 ) ENGINE = ReplacingMergeTree ORDER BY day""") # Insert single value From fe0eeb3ea22745c118c60290c9533205980f92cf Mon Sep 17 00:00:00 2001 From: nmreadelf Date: Tue, 9 Jan 2024 12:36:08 +0800 Subject: [PATCH 7/8] fix: test non exist stats --- tests/test_statistics.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/test_statistics.py b/tests/test_statistics.py index 2084798c205..87ee86cf429 100644 --- a/tests/test_statistics.py +++ b/tests/test_statistics.py @@ -29,10 +29,8 @@ def test_csv_stats(self): print(f"SQL read {ret.rows_read()} rows, {ret.bytes_read()} bytes, elapsed {ret.elapsed()} seconds") def test_non_exist_stats(self): - ret = chdb.query("SELECT * FROM file('notexist.parquet', Parquet)", "Parquet") - self.assertEqual(ret.rows_read(), 0) - self.assertEqual(ret.bytes_read(), 0) - print(f"SQL read {ret.rows_read()} rows, {ret.bytes_read()} bytes, elapsed {ret.elapsed()} seconds") + with self.assertRaises(Exception): + ret = chdb.query("SELECT * FROM file('notexist.parquet', Parquet)", "Parquet") if __name__ == "__main__": From dcaac614a2d402fe2798617d8c59eba91de70375 Mon Sep 17 00:00:00 2001 From: nmreadelf Date: Tue, 9 Jan 2024 18:50:28 +0800 Subject: [PATCH 8/8] update: format_output --- tests/format_output.py | 197 +++++++++++++++++++++-------------------- 1 file changed, 99 insertions(+), 98 deletions(-) diff --git a/tests/format_output.py b/tests/format_output.py index 040e9410e36..6c4166f8a59 100644 --- a/tests/format_output.py +++ b/tests/format_output.py @@ -10,76 +10,77 @@ b'\x10\x00\x00\x00(\x00\x00\x00\x04\x00\x00\x00' b'\x00\x00\x00\x00\r\x00\x00\x00timestamp_col\x00\x00\x00' b'\x08\x00\x0c\x00\x06\x00\x08\x00\x08\x00\x00\x00' - b'\x00\x00\x03\x00\x04\x00\x00\x00\r\x00\x00\x00Asia/Shangha' - b'i\x00\x00\x00@\xfe\xff\xff\x00\x00\x01\x05\x10\x00\x00\x00' - b'\x1c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' - b'\n\x00\x00\x00string_col\x00\x00p\xfe\xff\xffl\xfe\xff\xff' - b'\x00\x00\x01\x05\x10\x00\x00\x00 \x00\x00\x00' - b'\x04\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00date_str' - b'ing_col\x00\xa0\xfe\xff\xff\x9c\xfe\xff\xff' - b'\x00\x00\x01\x03\x10\x00\x00\x00\x1c\x00\x00\x00' - b'\x04\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00double_c' - b'ol\x00\x00\xd2\xff\xff\xff\x00\x00\x02\x00\xcc\xfe\xff\xff' - b'\x00\x00\x01\x03\x10\x00\x00\x00 \x00\x00\x00' - b'\x04\x00\x00\x00\x00\x00\x00\x00\t\x00\x00\x00float_co' - b'l\x00\x06\x00\x08\x00\x06\x00\x06\x00\x00\x00' - b'\x00\x00\x01\x00\x00\xff\xff\xff\x00\x00\x01\x02' + b'\x00\x00\x03\x00\x04\x00\x00\x00\x0e\x00\x00\x00Asia/Sin' + b'gapore\x00\x00@\xfe\xff\xff\x00\x00\x01\x05' b'\x10\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00' - b'\x00\x00\x00\x00\n\x00\x00\x00bigint_col\x00\x00' - b'\xf8\xfe\xff\xff\x00\x00\x00\x01@\x00\x00\x004\xff\xff\xff' - b'\x00\x00\x01\x02\x10\x00\x00\x00\x18\x00\x00\x00' - b'\x04\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00int_' - b'col\x00(\xff\xff\xff\x00\x00\x00\x01 \x00\x00\x00' - b'd\xff\xff\xff\x00\x00\x01\x02\x10\x00\x00\x00 \x00\x00\x00' - b'\x04\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00smallint' - b'_col\x00\x00\x00\x00`\xff\xff\xff\x00\x00\x00\x01' - b' \x00\x00\x00\x9c\xff\xff\xff\x00\x00\x01\x02' - b'\x10\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00' - b'\x00\x00\x00\x00\x0b\x00\x00\x00tinyint_col\x00' - b'\x94\xff\xff\xff\x00\x00\x00\x01 \x00\x00\x00' - b'\xd0\xff\xff\xff\x00\x00\x01\x06\x10\x00\x00\x00' + b'\x00\x00\x00\x00\n\x00\x00\x00string_col\x00\x00' + b'p\xfe\xff\xffl\xfe\xff\xff\x00\x00\x01\x05\x10\x00\x00\x00' b' \x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' - b'\x08\x00\x00\x00bool_col\x00\x00\x00\x00\x04\x00\x04\x00' - b'\x04\x00\x00\x00\x10\x00\x14\x00\x08\x00\x06\x00' - b'\x07\x00\x0c\x00\x00\x00\x10\x00\x10\x00\x00\x00' - b'\x00\x00\x01\x02\x10\x00\x00\x00\x1c\x00\x00\x00' - b'\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00id\x00\x00' - b'\x08\x00\x0c\x00\x08\x00\x07\x00\x08\x00\x00\x00' - b'\x00\x00\x00\x01 \x00\x00\x00\x00\x00\x00\x00' - b'\xff\xff\xff\xff\x98\x02\x00\x00\x14\x00\x00\x00' - b'\x00\x00\x00\x00\x0c\x00\x18\x00\x06\x00\x05\x00' - b'\x08\x00\x0c\x00\x0c\x00\x00\x00\x00\x03\x04\x00' - b'\x1c\x00\x00\x00\xc8\x01\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x0c\x00\x1c\x00\x10\x00\x04\x00' - b'\x08\x00\x0c\x00\x0c\x00\x00\x00\xa8\x01\x00\x00' - b'\x1c\x00\x00\x00\x14\x00\x00\x00\x02\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x04\x00' - b'\x04\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00' + b'\x0f\x00\x00\x00date_string_col\x00\xa0\xfe\xff\xff' + b'\x9c\xfe\xff\xff\x00\x00\x01\x03\x10\x00\x00\x00' + b'\x1c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' + b'\n\x00\x00\x00double_col\x00\x00\xd2\xff\xff\xff' + b'\x00\x00\x02\x00\xcc\xfe\xff\xff\x00\x00\x01\x03' + b'\x10\x00\x00\x00 \x00\x00\x00\x04\x00\x00\x00' + b'\x00\x00\x00\x00\t\x00\x00\x00float_col\x00\x06\x00' + b'\x08\x00\x06\x00\x06\x00\x00\x00\x00\x00\x01\x00' + b'\x00\xff\xff\xff\x00\x00\x01\x02\x10\x00\x00\x00' + b'\x1c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' + b'\n\x00\x00\x00bigint_col\x00\x00\xf8\xfe\xff\xff' + b'\x00\x00\x00\x01@\x00\x00\x004\xff\xff\xff\x00\x00\x01\x02' + b'\x10\x00\x00\x00\x18\x00\x00\x00\x04\x00\x00\x00' + b'\x00\x00\x00\x00\x07\x00\x00\x00int_col\x00(\xff\xff\xff' + b'\x00\x00\x00\x01 \x00\x00\x00d\xff\xff\xff\x00\x00\x01\x02' + b'\x10\x00\x00\x00 \x00\x00\x00\x04\x00\x00\x00' + b'\x00\x00\x00\x00\x0c\x00\x00\x00smallint_col' + b'\x00\x00\x00\x00`\xff\xff\xff\x00\x00\x00\x01 \x00\x00\x00' + b'\x9c\xff\xff\xff\x00\x00\x01\x02\x10\x00\x00\x00' + b'\x1c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' + b'\x0b\x00\x00\x00tinyint_col\x00\x94\xff\xff\xff' + b'\x00\x00\x00\x01 \x00\x00\x00\xd0\xff\xff\xff' + b'\x00\x00\x01\x06\x10\x00\x00\x00 \x00\x00\x00' + b'\x04\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00bool_col' + b'\x00\x00\x00\x00\x04\x00\x04\x00\x04\x00\x00\x00' + b'\x10\x00\x14\x00\x08\x00\x06\x00\x07\x00\x0c\x00' + b'\x00\x00\x10\x00\x10\x00\x00\x00\x00\x00\x01\x02' + b'\x10\x00\x00\x00\x1c\x00\x00\x00\x04\x00\x00\x00' + b'\x00\x00\x00\x00\x02\x00\x00\x00id\x00\x00\x08\x00\x0c\x00' + b'\x08\x00\x07\x00\x08\x00\x00\x00\x00\x00\x00\x01' + b' \x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff' + b'\x98\x02\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00' + b'\x0c\x00\x18\x00\x06\x00\x05\x00\x08\x00\x0c\x00' + b'\x0c\x00\x00\x00\x00\x03\x04\x00\x1c\x00\x00\x00' + b'\xc8\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + b'\x0c\x00\x1c\x00\x10\x00\x04\x00\x08\x00\x0c\x00' + b'\x0c\x00\x00\x00\xa8\x01\x00\x00\x1c\x00\x00\x00' + b'\x14\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00\x04\x00\x04\x00\x04\x00\x00\x00' + b'\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00' + b'\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00' + b' \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'\x00\x00\x00\x00 \x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00' - b'\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00' - b'8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x008\x00\x00\x00\x00\x00\x00\x00' - b'\x1f\x00\x00\x00\x00\x00\x00\x00X\x00\x00\x00' + b'\x18\x00\x00\x00\x00\x00\x00\x008\x00\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - b'X\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00' - b'\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x00x\x00\x00\x00' + b'8\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00' + b'\x00\x00\x00\x00X\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00\x00\x00\x00\x00X\x00\x00\x00' b'\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00' - b'\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00' - b'$\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00' + b'x\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00x\x00\x00\x00\x00\x00\x00\x00' + b'\x1f\x00\x00\x00\x00\x00\x00\x00\x98\x00\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - b'\xc0\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00' + b'\x98\x00\x00\x00\x00\x00\x00\x00$\x00\x00\x00' + b'\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00' + b'\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00' + b'\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' b'\x00\x00\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x00\x00\x00' - b'\x00\x00\x00\x00$\x00\x00\x00\x00\x00\x00\x00' - b'\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00' - b'#\x00\x00\x00\x00\x00\x00\x000\x01\x00\x00\x00\x00\x00\x00' - b"'\x00\x00\x00\x00\x00\x00\x00X\x01\x00\x00\x00\x00\x00\x00" + b'$\x00\x00\x00\x00\x00\x00\x00\x08\x01\x00\x00' + b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' + b'\x08\x01\x00\x00\x00\x00\x00\x00#\x00\x00\x00' + b"\x00\x00\x00\x000\x01\x00\x00\x00\x00\x00\x00'\x00\x00\x00" + b'\x00\x00\x00\x00X\x01\x00\x00\x00\x00\x00\x00' b'\x00\x00\x00\x00\x00\x00\x00\x00X\x01\x00\x00' b'\x00\x00\x00\x00#\x00\x00\x00\x00\x00\x00\x00' b'\x80\x01\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00' @@ -147,7 +148,7 @@ b'(\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' b'\r\x00\x00\x00timestamp_col\x00\x00\x00\x08\x00\x0c\x00' b'\x06\x00\x08\x00\x08\x00\x00\x00\x00\x00\x03\x00' - b'\x04\x00\x00\x00\r\x00\x00\x00Asia/Shanghai\x00\x00\x00' + b'\x04\x00\x00\x00\x0e\x00\x00\x00Asia/Singapore\x00\x00' b'@\xfe\xff\xff\x00\x00\x01\x05\x10\x00\x00\x00' b'\x1c\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00' b'\n\x00\x00\x00string_col\x00\x00p\xfe\xff\xffl\xfe\xff\xff' @@ -197,7 +198,7 @@ b'\x00\x00\x00\x00\r\x00\x00\x00timestamp_co' b'l\x00\x00\x00\x08\x00\x0c\x00\x06\x00\x08\x00' b'\x08\x00\x00\x00\x00\x00\x03\x00\x04\x00\x00\x00' - b'\r\x00\x00\x00Asia/Shanghai\x00\x00\x00@\xfe\xff\xff' + b'\x0e\x00\x00\x00Asia/Singapore\x00\x00@\xfe\xff\xff' b'\x00\x00\x01\x05\x10\x00\x00\x00\x1c\x00\x00\x00' b'\x04\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00stri' b'ng_col\x00\x00p\xfe\xff\xffl\xfe\xff\xff' @@ -483,7 +484,7 @@ '\t\t\t"tinyint_col": 0,\n' '\t\t\t"smallint_col": 0,\n' '\t\t\t"int_col": 0,\n' - '\t\t\t"bigint_col": "0",\n' + '\t\t\t"bigint_col": 0,\n' '\t\t\t"float_col": 0,\n' '\t\t\t"double_col": 0,\n' '\t\t\t"date_string_col": "01\\/01\\/09",\n' @@ -496,7 +497,7 @@ '\t\t\t"tinyint_col": 1,\n' '\t\t\t"smallint_col": 1,\n' '\t\t\t"int_col": 1,\n' - '\t\t\t"bigint_col": "10",\n' + '\t\t\t"bigint_col": 10,\n' '\t\t\t"float_col": 1.1,\n' '\t\t\t"double_col": 10.1,\n' '\t\t\t"date_string_col": "01\\/01\\/09",\n' @@ -516,14 +517,14 @@ '\t\t"bytes_read": 0\n' '\t}\n' '}\n', - 'len': 1415}, + 'len': 1411}, 'JSONColumns': {'data': '{\n' '\t"id": [0, 1],\n' '\t"bool_col": [true, false],\n' '\t"tinyint_col": [0, 1],\n' '\t"smallint_col": [0, 1],\n' '\t"int_col": [0, 1],\n' - '\t"bigint_col": ["0", "10"],\n' + '\t"bigint_col": [0, 10],\n' '\t"float_col": [0, 1.1],\n' '\t"double_col": [0, 10.1],\n' '\t"date_string_col": ["01\\/01\\/09", ' @@ -532,7 +533,7 @@ '\t"timestamp_col": ["2009-01-01 00:00:00.000000000", ' '"2009-01-01 00:01:00.000000000"]\n' '}\n', - 'len': 356}, + 'len': 352}, 'JSONColumnsWithMetadata': {'data': '{\n' '\t"meta":\n' '\t[\n' @@ -589,7 +590,7 @@ '\t\t"tinyint_col": [0, 1],\n' '\t\t"smallint_col": [0, 1],\n' '\t\t"int_col": [0, 1],\n' - '\t\t"bigint_col": ["0", "10"],\n' + '\t\t"bigint_col": [0, 10],\n' '\t\t"float_col": [0, 1.1],\n' '\t\t"double_col": [0, 10.1],\n' '\t\t"date_string_col": ["01\\/01\\/09", ' @@ -611,7 +612,7 @@ '\t\t"bytes_read": 0\n' '\t}\n' '}\n', - 'len': 1226}, + 'len': 1222}, 'JSONCompact': {'data': '{\n' '\t"meta":\n' '\t[\n' @@ -663,9 +664,9 @@ '\n' '\t"data":\n' '\t[\n' - '\t\t[0, true, 0, 0, 0, "0", 0, 0, "01\\/01\\/09", ' - '"0", "2009-01-01 00:00:00.000000000"],\n' - '\t\t[1, false, 1, 1, 1, "10", 1.1, 10.1, ' + '\t\t[0, true, 0, 0, 0, 0, 0, 0, "01\\/01\\/09", "0", ' + '"2009-01-01 00:00:00.000000000"],\n' + '\t\t[1, false, 1, 1, 1, 10, 1.1, 10.1, ' '"01\\/01\\/09", "1", "2009-01-01 ' '00:01:00.000000000"]\n' '\t],\n' @@ -681,14 +682,14 @@ '\t\t"bytes_read": 0\n' '\t}\n' '}\n', - 'len': 1039}, + 'len': 1035}, 'JSONCompactColumns': {'data': '[\n' '\t[0, 1],\n' '\t[true, false],\n' '\t[0, 1],\n' '\t[0, 1],\n' '\t[0, 1],\n' - '\t["0", "10"],\n' + '\t[0, 10],\n' '\t[0, 1.1],\n' '\t[0, 10.1],\n' '\t["01\\/01\\/09", "01\\/01\\/09"],\n' @@ -696,25 +697,25 @@ '\t["2009-01-01 00:00:00.000000000", ' '"2009-01-01 00:01:00.000000000"]\n' ']\n', - 'len': 205}, - 'JSONCompactEachRow': {'data': '[0, true, 0, 0, 0, "0", 0, 0, "01\\/01\\/09", ' + 'len': 201}, + 'JSONCompactEachRow': {'data': '[0, true, 0, 0, 0, 0, 0, 0, "01\\/01\\/09", ' '"0", "2009-01-01 00:00:00.000000000"]\n' - '[1, false, 1, 1, 1, "10", 1.1, 10.1, ' + '[1, false, 1, 1, 1, 10, 1.1, 10.1, ' '"01\\/01\\/09", "1", "2009-01-01 ' '00:01:00.000000000"]\n', - 'len': 171}, + 'len': 167}, 'JSONCompactEachRowWithNames': {'data': '["id", "bool_col", "tinyint_col", ' '"smallint_col", "int_col", ' '"bigint_col", "float_col", ' '"double_col", "date_string_col", ' '"string_col", "timestamp_col"]\n' - '[0, true, 0, 0, 0, "0", 0, 0, ' + '[0, true, 0, 0, 0, 0, 0, 0, ' '"01\\/01\\/09", "0", "2009-01-01 ' '00:00:00.000000000"]\n' - '[1, false, 1, 1, 1, "10", 1.1, 10.1, ' + '[1, false, 1, 1, 1, 10, 1.1, 10.1, ' '"01\\/01\\/09", "1", "2009-01-01 ' '00:01:00.000000000"]\n', - 'len': 323}, + 'len': 319}, 'JSONCompactEachRowWithNamesAndTypes': {'data': '["id", "bool_col", ' '"tinyint_col", ' '"smallint_col", "int_col", ' @@ -734,15 +735,15 @@ '"Nullable(String)", ' '"Nullable(String)", ' '"Nullable(DateTime64(9))"]\n' - '[0, true, 0, 0, 0, "0", 0, ' - '0, "01\\/01\\/09", "0", ' + '[0, true, 0, 0, 0, 0, 0, 0, ' + '"01\\/01\\/09", "0", ' '"2009-01-01 ' '00:00:00.000000000"]\n' - '[1, false, 1, 1, 1, "10", ' - '1.1, 10.1, "01\\/01\\/09", ' - '"1", "2009-01-01 ' + '[1, false, 1, 1, 1, 10, 1.1, ' + '10.1, "01\\/01\\/09", "1", ' + '"2009-01-01 ' '00:01:00.000000000"]\n', - 'len': 546}, + 'len': 542}, 'JSONCompactStrings': {'data': '{\n' '\t"meta":\n' '\t[\n' @@ -873,25 +874,25 @@ '"2009-01-01 ' '00:01:00.000000000"]\n', 'len': 574}, - 'JSONEachRow': {'data': '{"id":0,"bool_col":true,"tinyint_col":0,"smallint_col":0,"int_col":0,"bigint_col":"0","float_col":0,"double_col":0,"date_string_col":"01\\/01\\/09","string_col":"0","timestamp_col":"2009-01-01 ' + 'JSONEachRow': {'data': '{"id":0,"bool_col":true,"tinyint_col":0,"smallint_col":0,"int_col":0,"bigint_col":0,"float_col":0,"double_col":0,"date_string_col":"01\\/01\\/09","string_col":"0","timestamp_col":"2009-01-01 ' '00:00:00.000000000"}\n' - '{"id":1,"bool_col":false,"tinyint_col":1,"smallint_col":1,"int_col":1,"bigint_col":"10","float_col":1.1,"double_col":10.1,"date_string_col":"01\\/01\\/09","string_col":"1","timestamp_col":"2009-01-01 ' + '{"id":1,"bool_col":false,"tinyint_col":1,"smallint_col":1,"int_col":1,"bigint_col":10,"float_col":1.1,"double_col":10.1,"date_string_col":"01\\/01\\/09","string_col":"1","timestamp_col":"2009-01-01 ' '00:01:00.000000000"}\n', - 'len': 431}, - 'JSONEachRowWithProgress': {'data': '{"row":{"id":0,"bool_col":true,"tinyint_col":0,"smallint_col":0,"int_col":0,"bigint_col":"0","float_col":0,"double_col":0,"date_string_col":"01\\/01\\/09","string_col":"0","timestamp_col":"2009-01-01 ' + 'len': 427}, + 'JSONEachRowWithProgress': {'data': '{"row":{"id":0,"bool_col":true,"tinyint_col":0,"smallint_col":0,"int_col":0,"bigint_col":0,"float_col":0,"double_col":0,"date_string_col":"01\\/01\\/09","string_col":"0","timestamp_col":"2009-01-01 ' '00:00:00.000000000"}}\n' - '{"row":{"id":1,"bool_col":false,"tinyint_col":1,"smallint_col":1,"int_col":1,"bigint_col":"10","float_col":1.1,"double_col":10.1,"date_string_col":"01\\/01\\/09","string_col":"1","timestamp_col":"2009-01-01 ' + '{"row":{"id":1,"bool_col":false,"tinyint_col":1,"smallint_col":1,"int_col":1,"bigint_col":10,"float_col":1.1,"double_col":10.1,"date_string_col":"01\\/01\\/09","string_col":"1","timestamp_col":"2009-01-01 ' '00:01:00.000000000"}}\n', - 'len': 447}, + 'len': 443}, 'JSONObjectEachRow': {'data': '{\n' '\t"row_1": ' - '{"id":0,"bool_col":true,"tinyint_col":0,"smallint_col":0,"int_col":0,"bigint_col":"0","float_col":0,"double_col":0,"date_string_col":"01\\/01\\/09","string_col":"0","timestamp_col":"2009-01-01 ' + '{"id":0,"bool_col":true,"tinyint_col":0,"smallint_col":0,"int_col":0,"bigint_col":0,"float_col":0,"double_col":0,"date_string_col":"01\\/01\\/09","string_col":"0","timestamp_col":"2009-01-01 ' '00:00:00.000000000"},\n' '\t"row_2": ' - '{"id":1,"bool_col":false,"tinyint_col":1,"smallint_col":1,"int_col":1,"bigint_col":"10","float_col":1.1,"double_col":10.1,"date_string_col":"01\\/01\\/09","string_col":"1","timestamp_col":"2009-01-01 ' + '{"id":1,"bool_col":false,"tinyint_col":1,"smallint_col":1,"int_col":1,"bigint_col":10,"float_col":1.1,"double_col":10.1,"date_string_col":"01\\/01\\/09","string_col":"1","timestamp_col":"2009-01-01 ' '00:01:00.000000000"}\n' '}\n', - 'len': 456}, + 'len': 452}, 'JSONStrings': {'data': '{\n' '\t"meta":\n' '\t[\n'