From 618bedf38f61f28262e7e93d6c9c4e699b22a135 Mon Sep 17 00:00:00 2001 From: Oliver Mannion <125105+tekumara@users.noreply.github.com> Date: Sat, 24 Aug 2024 15:15:37 +1000 Subject: [PATCH] ci(server): description - cover more types --- tests/test_arrow.py | 132 ++++++++++++++++++++++++++++++++++++++++++- tests/test_server.py | 19 ++++++- 2 files changed, 146 insertions(+), 5 deletions(-) diff --git a/tests/test_arrow.py b/tests/test_arrow.py index 78619f7..b3f03ff 100644 --- a/tests/test_arrow.py +++ b/tests/test_arrow.py @@ -1,3 +1,5 @@ +# ruff: noqa: E501 + from base64 import b64decode import pandas as pd @@ -53,8 +55,11 @@ def test_ipc_writes_sf_metadata() -> None: def test_read_base64_from_actual_snowflake_result() -> None: - # select true, 1::int, 2.0::float, to_decimal('12.3456', 10,2), 'hello' - rowset_b64 = "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" # noqa: E501 + # select + # true, 1::int, 2.0::float, to_decimal('12.3456', 10,2), 'hello', 'hello'::varchar(20), + # to_date('2018-04-15'), to_time('04:15:29'), to_timestamp_tz('2013-04-05 01:02:03'), to_timestamp_ntz('2013-04-05 01:02:03'), + # X'41424320E29D84', ARRAY_CONSTRUCT('foo'), OBJECT_CONSTRUCT('k','v1'), 'vary'::VARIANT + rowset_b64 = "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" f = b64decode(rowset_b64) reader = pa.ipc.open_stream(f) @@ -114,3 +119,126 @@ def test_read_base64_from_actual_snowflake_result() -> None: b"byteLength": b"20", b"finalType": b"T", } + + field = batch.schema.field(5) + assert field == pa.field(name="'HELLO'::VARCHAR(20)", type=pa.string(), nullable=False) + assert field.metadata == { + b"logicalType": b"TEXT", + b"precision": b"38", + b"scale": b"0", + b"charLength": b"20", + b"byteLength": b"80", + b"finalType": b"T", + } + + field = batch.schema.field(6) + assert field == pa.field(name="TO_DATE('2018-04-15')", type=pa.date32(), nullable=False) + assert field.metadata == { + b"logicalType": b"DATE", + b"precision": b"38", + b"scale": b"0", + b"charLength": b"0", + b"byteLength": b"4", + b"finalType": b"T", + } + + field = batch.schema.field(7) + assert field == pa.field(name="TO_TIME('04:15:29')", type=pa.int64(), nullable=False) + assert field.metadata == { + b"logicalType": b"TIME", + b"precision": b"0", + b"scale": b"9", + b"charLength": b"0", + b"byteLength": b"8", + b"finalType": b"T", + } + + field = batch.schema.field(8) + assert field == pa.field( + name="TO_TIMESTAMP_TZ('2013-04-05 01:02:03')", + type=pa.struct( + [ + pa.field("epoch", pa.int64(), nullable=False), + pa.field("fraction", pa.int32(), nullable=False), + pa.field("timezone", pa.int32(), nullable=False), + ] + ), + nullable=False, + ) + assert field.metadata == { + b"logicalType": b"TIMESTAMP_TZ", + b"precision": b"0", + b"scale": b"9", + b"charLength": b"0", + b"byteLength": b"16", + b"finalType": b"T", + } + + field = batch.schema.field(9) + assert field == pa.field( + name="TO_TIMESTAMP_NTZ('2013-04-05 01:02:03')", + type=pa.struct( + [pa.field("epoch", pa.int64(), nullable=False), pa.field("fraction", pa.int32(), nullable=False)] + ), + nullable=False, + ) + assert field.metadata == { + b"logicalType": b"TIMESTAMP_NTZ", + b"precision": b"0", + b"scale": b"9", + b"charLength": b"0", + b"byteLength": b"16", + b"finalType": b"T", + } + + field = batch.schema.field(10) + assert field == pa.field( + name="X'41424320E29D84'", + type=pa.binary(), + nullable=False, + ) + assert field.metadata == { + b"logicalType": b"BINARY", + b"precision": b"38", + b"scale": b"0", + b"charLength": b"7", + b"byteLength": b"7", + b"finalType": b"T", + } + + field = batch.schema.field(11) + assert field == pa.field(name="ARRAY_CONSTRUCT('FOO')", type=pa.string()) + assert field.metadata == { + b"logicalType": b"ARRAY", + b"precision": b"38", + b"scale": b"0", + b"charLength": b"16777216", + b"byteLength": b"16777216", + b"finalType": b"T", + } + + field = batch.schema.field(12) + assert field == pa.field(name="OBJECT_CONSTRUCT('K','V1')", type=pa.string()) + assert field.metadata == { + b"logicalType": b"OBJECT", + b"precision": b"38", + b"scale": b"0", + b"charLength": b"16777216", + b"byteLength": b"16777216", + b"finalType": b"T", + } + + field = batch.schema.field(13) + assert field == pa.field( + name="'VARY'::VARIANT", + type=pa.string(), + nullable=False, + ) + assert field.metadata == { + b"logicalType": b"VARIANT", + b"precision": b"38", + b"scale": b"0", + b"charLength": b"16777216", + b"byteLength": b"16777216", + b"finalType": b"T", + } diff --git a/tests/test_server.py b/tests/test_server.py index 819e46c..c68fc3f 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -72,7 +72,9 @@ def test_server_types_no_result_set(sconn: snowflake.connector.SnowflakeConnecti """ create or replace table example ( XBOOLEAN BOOLEAN, XINT INT, XFLOAT FLOAT, XDECIMAL DECIMAL(10,2), - XVARCHAR VARCHAR + XVARCHAR VARCHAR, XVARCHAR20 VARCHAR(20), + XDATE DATE, XTIME TIME, XTIMESTAMP TIMESTAMP_TZ, XTIMESTAMP_NTZ TIMESTAMP_NTZ, + XBINARY BINARY, /* XARRAY ARRAY, XOBJECT OBJECT, */ XVARIANT VARIANT ) """ ) @@ -84,8 +86,19 @@ def test_server_types_no_result_set(sconn: snowflake.connector.SnowflakeConnecti ResultMetadata(name='XINT', type_code=0, display_size=None, internal_size=None, precision=38, scale=0, is_nullable=True), ResultMetadata(name='XFLOAT', type_code=1, display_size=None, internal_size=None, precision=None, scale=None, is_nullable=True), ResultMetadata(name="XDECIMAL", type_code=0, display_size=None, internal_size=None, precision=10, scale=2, is_nullable=True), - # TODO: internal_size matches column size - ResultMetadata(name="XVARCHAR", type_code=2, display_size=None, internal_size=16777216, precision=None, scale=None, is_nullable=True) + ResultMetadata(name="XVARCHAR", type_code=2, display_size=None, internal_size=16777216, precision=None, scale=None, is_nullable=True), + # TODO: internal_size matches column size, ie: 20 + ResultMetadata(name='XVARCHAR20', type_code=2, display_size=None, internal_size=16777216, precision=None, scale=None, is_nullable=True), + ResultMetadata(name='XDATE', type_code=3, display_size=None, internal_size=None, precision=None, scale=None, is_nullable=True), + ResultMetadata(name='XTIME', type_code=12, display_size=None, internal_size=None, precision=0, scale=9, is_nullable=True), + ResultMetadata(name='XTIMESTAMP', type_code=7, display_size=None, internal_size=None, precision=0, scale=9, is_nullable=True), + ResultMetadata(name='XTIMESTAMP_NTZ', type_code=8, display_size=None, internal_size=None, precision=0, scale=9, is_nullable=True), + ResultMetadata(name='XBINARY', type_code=11, display_size=None, internal_size=8388608, precision=None, scale=None, is_nullable=True), + # TODO: handle ARRAY and OBJECT see https://github.com/tekumara/fakesnow/issues/26 + # ResultMetadata(name='XARRAY', type_code=10, display_size=None, internal_size=None, precision=None, scale=None, is_nullable=True), + # ResultMetadata(name='XOBJECT', type_code=9, display_size=None, internal_size=None, precision=None, scale=None, is_nullable=True), + ResultMetadata(name='XVARIANT', type_code=5, display_size=None, internal_size=None, precision=None, scale=None, is_nullable=True) + ] # fmt: on