From d70137a7b530ccaa52834274913bbb5a3d1ca06e Mon Sep 17 00:00:00 2001 From: robot-piglet Date: Fri, 8 Nov 2024 09:59:41 +0300 Subject: Intermediate changes commit_hash:b029461eab3edbc697836a436c182ef54d9048a9 --- .../python/clickhouse-connect/.dist-info/METADATA | 2 +- .../clickhouse_connect/__version__.py | 2 +- .../clickhouse_connect/datatypes/numeric.py | 50 ++++++++++++++++++---- .../clickhouse_connect/driver/common.py | 5 --- contrib/python/clickhouse-connect/ya.make | 2 +- 5 files changed, 44 insertions(+), 17 deletions(-) (limited to 'contrib/python') diff --git a/contrib/python/clickhouse-connect/.dist-info/METADATA b/contrib/python/clickhouse-connect/.dist-info/METADATA index 66c4f4ba69f..21a0525563c 100644 --- a/contrib/python/clickhouse-connect/.dist-info/METADATA +++ b/contrib/python/clickhouse-connect/.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: clickhouse-connect -Version: 0.8.4 +Version: 0.8.5 Summary: ClickHouse Database Core Driver for Python, Pandas, and Superset Home-page: https://github.com/ClickHouse/clickhouse-connect Author: ClickHouse Inc. diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py b/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py index 63fa052550c..ef88a314d6e 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/__version__.py @@ -1 +1 @@ -version = '0.8.4' +version = '0.8.5' diff --git a/contrib/python/clickhouse-connect/clickhouse_connect/datatypes/numeric.py b/contrib/python/clickhouse-connect/clickhouse_connect/datatypes/numeric.py index 0ff62b1dc21..a9629dd3e0d 100644 --- a/contrib/python/clickhouse-connect/clickhouse_connect/datatypes/numeric.py +++ b/contrib/python/clickhouse-connect/clickhouse_connect/datatypes/numeric.py @@ -1,7 +1,7 @@ import decimal from typing import Union, Type, Sequence, MutableSequence -from math import nan +from math import nan, isnan, isinf from clickhouse_connect.datatypes.base import TypeDef, ArrayType, ClickHouseType from clickhouse_connect.driver.common import array_type, write_array, decimal_size, decimal_prec, first_value @@ -12,42 +12,61 @@ from clickhouse_connect.driver.query import QueryContext from clickhouse_connect.driver.types import ByteSource -class Int8(ArrayType): +class IntBase(ArrayType, registered=False): + def _write_column_binary(self, column: Union[Sequence, MutableSequence], dest: bytearray, ctx: InsertContext): + if len(column) == 0: + return + if self.nullable: + first = next((x for x in column if x is not None), None) + if isinstance(first, int): + column = [0 if x is None else x for x in column] + elif isinstance(first, float): + column = [0 if x is None or isnan(x) or isinf(x) else int(x) for x in column] + else: + column = [int(x) if x else 0 for x in column] + elif isinstance(column[0], float): + column = [0 if x is None or isnan(x) or isinf(x) else int(x) for x in column] + elif not isinstance(column[0], int): + column = [int(x) for x in column] + write_array(self._array_type, column, dest) + + +class Int8(IntBase): _array_type = 'b' np_type = 'b' -class UInt8(ArrayType): +class UInt8(IntBase): _array_type = 'B' np_type = 'B' -class Int16(ArrayType): +class Int16(IntBase): _array_type = 'h' np_type = '