Skip to content

Commit 139aeca

Browse files
committed
Address review feedback
Signed-off-by: Marco Slot <marco.slot@snowflake.com>
1 parent 31f2f96 commit 139aeca

2 files changed

Lines changed: 47 additions & 88 deletions

File tree

pgduck_server/src/duckdb/type_conversion.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -349,8 +349,6 @@ find_duck_type_info(duckdb_type duckType)
349349
* complex logical types), we fall back to TEXTOID so the client can still
350350
* consume the text-serialised value we always send.
351351
*
352-
* Note: consider falling back to InvalidOid (0).
353-
*
354352
* For DECIMAL we always return NUMERICOID regardless of width/scale;
355353
* callers that need the typmod should handle that separately.
356354
*/

pgduck_server/tests/pytests/test_types.py

Lines changed: 47 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -452,146 +452,114 @@ def test_blob(setup_table, duckdb_conn, pgduck_conn, tmp_path):
452452

453453
def test_tinyint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
454454
query = "SELECT tiny_int_col FROM duckdb_supported_types_table WHERE tiny_int_col IS NOT NULL ORDER BY tiny_int_col"
455-
expected = [("-128",), ("0",), ("127",)]
455+
expected = [(-128,), (0,), (127,)]
456456
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
457457
pg_results = perform_query_on_cursor(query, pgduck_conn)
458458

459-
# Convert duckdb (int) and pg (int) results to strings for comparison.
460-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
461-
pg_results_str = [(str(item[0]),) for item in pg_results]
462-
463-
# Get normalized transmit results
459+
# Transmit goes through CSV so values come back as text; parse to int.
464460
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
465-
transmit_results = [(item[0],) for item in transmit_results]
461+
transmit_results = [(int(item[0]),) for item in transmit_results]
466462

467463
assert (
468-
duckdb_results_str == pg_results_str == transmit_results == expected
464+
duckdb_results == pg_results == transmit_results == expected
469465
), "TINYINT results do not match expected values!"
470466

471467

472468
def test_smallint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
473469
query = "SELECT smallint_col FROM duckdb_supported_types_table WHERE smallint_col IS NOT NULL ORDER BY smallint_col"
474-
expected = [("-32768",), ("0",), ("32767",)]
470+
expected = [(-32768,), (0,), (32767,)]
475471
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
476472
pg_results = perform_query_on_cursor(query, pgduck_conn)
477473

478-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
479-
pg_results_str = [(str(item[0]),) for item in pg_results]
480-
481-
# Get normalized transmit results
482474
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
483-
transmit_results = [(item[0],) for item in transmit_results]
475+
transmit_results = [(int(item[0]),) for item in transmit_results]
484476

485477
assert (
486-
duckdb_results_str == pg_results_str == transmit_results == expected
478+
duckdb_results == pg_results == transmit_results == expected
487479
), "SMALLINT results do not match expected values!"
488480

489481

490482
def test_int(setup_table, duckdb_conn, pgduck_conn, tmp_path):
491483
query = "SELECT int_col FROM duckdb_supported_types_table WHERE int_col IS NOT NULL ORDER BY int_col"
492-
expected = [("-2147483648",), ("0",), ("2147483647",)]
484+
expected = [(-2147483648,), (0,), (2147483647,)]
493485
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
494486
pg_results = perform_query_on_cursor(query, pgduck_conn)
495487

496-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
497-
pg_results_str = [(str(item[0]),) for item in pg_results]
498-
499-
# Get normalized transmit results
500488
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
501-
transmit_results = [(item[0],) for item in transmit_results]
489+
transmit_results = [(int(item[0]),) for item in transmit_results]
502490

503491
assert (
504-
duckdb_results_str == pg_results_str == transmit_results == expected
492+
duckdb_results == pg_results == transmit_results == expected
505493
), "INT results do not match expected values!"
506494

507495

508496
def test_bigint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
509497
query = "SELECT bigint_col FROM duckdb_supported_types_table WHERE bigint_col IS NOT NULL ORDER BY bigint_col"
510-
expected = [("-9223372036854775808",), ("0",), ("9223372036854775807",)]
498+
expected = [(-9223372036854775808,), (0,), (9223372036854775807,)]
511499
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
512500
pg_results = perform_query_on_cursor(query, pgduck_conn)
513501

514-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
515-
pg_results_str = [(str(item[0]),) for item in pg_results]
516-
517-
# Get normalized transmit results
518502
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
519-
transmit_results = [(item[0],) for item in transmit_results]
503+
transmit_results = [(int(item[0]),) for item in transmit_results]
520504

521505
assert (
522-
duckdb_results_str == pg_results_str == transmit_results == expected
506+
duckdb_results == pg_results == transmit_results == expected
523507
), "BIGINT results do not match expected values!"
524508

525509

526510
def test_utinyint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
527511
query = "SELECT utinyint_col FROM duckdb_supported_types_table WHERE utinyint_col IS NOT NULL ORDER BY utinyint_col"
528-
expected = [("0",), ("255",)]
512+
expected = [(0,), (255,)]
529513
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
530514
pg_results = perform_query_on_cursor(query, pgduck_conn)
531515

532-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
533-
pg_results_str = [(str(item[0]),) for item in pg_results]
534-
535-
# Get normalized transmit results
536516
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
537-
transmit_results = [(item[0],) for item in transmit_results]
517+
transmit_results = [(int(item[0]),) for item in transmit_results]
538518

539519
assert (
540-
duckdb_results_str == pg_results_str == transmit_results == expected
520+
duckdb_results == pg_results == transmit_results == expected
541521
), "UTINYINT results do not match expected values!"
542522

543523

544524
def test_usmallint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
545525
query = "SELECT usmallint_col FROM duckdb_supported_types_table WHERE usmallint_col IS NOT NULL ORDER BY usmallint_col"
546-
expected = [("0",), ("65535",)]
526+
expected = [(0,), (65535,)]
547527
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
548528
pg_results = perform_query_on_cursor(query, pgduck_conn)
549529

550-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
551-
pg_results_str = [(str(item[0]),) for item in pg_results]
552-
553-
# Get normalized transmit results
554530
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
555-
transmit_results = [(item[0],) for item in transmit_results]
531+
transmit_results = [(int(item[0]),) for item in transmit_results]
556532

557533
assert (
558-
duckdb_results_str == pg_results_str == transmit_results == expected
534+
duckdb_results == pg_results == transmit_results == expected
559535
), "USMALLINT results do not match expected values!"
560536

561537

562538
def test_uinteger(setup_table, duckdb_conn, pgduck_conn, tmp_path):
563539
query = "SELECT uinteger_col FROM duckdb_supported_types_table WHERE uinteger_col IS NOT NULL ORDER BY uinteger_col"
564-
expected = [("0",), ("4294967295",)]
540+
expected = [(0,), (4294967295,)]
565541
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
566542
pg_results = perform_query_on_cursor(query, pgduck_conn)
567543

568-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
569-
pg_results_str = [(str(item[0]),) for item in pg_results]
570-
571-
# Get normalized transmit results
572544
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
573-
transmit_results = [(item[0],) for item in transmit_results]
545+
transmit_results = [(int(item[0]),) for item in transmit_results]
574546

575547
assert (
576-
duckdb_results_str == pg_results_str == transmit_results == expected
548+
duckdb_results == pg_results == transmit_results == expected
577549
), "UINTEGER results do not match expected values!"
578550

579551

580552
def test_uint64(setup_table, duckdb_conn, pgduck_conn, tmp_path):
581553
query = "SELECT uint64_col FROM duckdb_supported_types_table WHERE uint64_col IS NOT NULL ORDER BY uint64_col"
582-
expected = [("0",), ("9223372036854775807",), ("18446744073709551615",)]
554+
expected = [(0,), (9223372036854775807,), (18446744073709551615,)]
583555
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
584556
pg_results = perform_query_on_cursor(query, pgduck_conn)
585557

586-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
587-
pg_results_str = [(str(item[0]),) for item in pg_results]
588-
589-
# Get normalized transmit results
590558
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
591-
transmit_results = [(item[0],) for item in transmit_results]
559+
transmit_results = [(int(item[0]),) for item in transmit_results]
592560

593561
assert (
594-
duckdb_results_str == pg_results_str == transmit_results == expected
562+
duckdb_results == pg_results == transmit_results == expected
595563
), "UINT64 results do not match expected values!"
596564

597565

@@ -770,55 +738,48 @@ def test_uuid(setup_table, duckdb_conn, pgduck_conn, tmp_path):
770738
def test_hugeint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
771739
query = "SELECT hugeint_col FROM duckdb_supported_types_table WHERE hugeint_col IS NOT NULL ORDER BY hugeint_col"
772740
expected = [
773-
("-17014118346046923173168730371588410572",),
774-
("-9223372036854775808",),
775-
("-2147483648",),
776-
("-32768",),
777-
("-1",),
778-
("0",),
779-
("1",),
780-
("32767",),
781-
("2147483647",),
782-
("9223372036854775807",),
783-
("17014118346046923173168730371588410572",),
741+
(-17014118346046923173168730371588410572,),
742+
(-9223372036854775808,),
743+
(-2147483648,),
744+
(-32768,),
745+
(-1,),
746+
(0,),
747+
(1,),
748+
(32767,),
749+
(2147483647,),
750+
(9223372036854775807,),
751+
(17014118346046923173168730371588410572,),
784752
]
785753
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
786754
pg_results = perform_query_on_cursor(query, pgduck_conn)
787755

788-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
789-
pg_results_str = [(str(item[0]),) for item in pg_results]
790-
791-
# Get normalized transmit results
756+
# pg_results arrive as Decimal (NUMERIC OID); Decimal == int compares equal.
792757
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
793-
transmit_results = [(item[0],) for item in transmit_results]
758+
transmit_results = [(int(item[0]),) for item in transmit_results]
794759

795760
assert (
796-
duckdb_results_str == pg_results_str == transmit_results == expected
761+
duckdb_results == pg_results == transmit_results == expected
797762
), "HUGEINT results do not match expected values!"
798763

799764

800765
def test_uhugeint(setup_table, duckdb_conn, pgduck_conn, tmp_path):
801766
query = "SELECT uhugeint_col FROM duckdb_supported_types_table WHERE uhugeint_col IS NOT NULL ORDER BY uhugeint_col"
802767
expected = [
803-
("0",),
804-
("1",),
805-
("65535",),
806-
("4294967295",),
807-
("18446744073709551615",),
808-
("340282366920938463463374607431768211455",),
768+
(0,),
769+
(1,),
770+
(65535,),
771+
(4294967295,),
772+
(18446744073709551615,),
773+
(340282366920938463463374607431768211455,),
809774
]
810775
duckdb_results = perform_query_on_cursor(query, duckdb_conn)
811776
pg_results = perform_query_on_cursor(query, pgduck_conn)
812777

813-
duckdb_results_str = [(str(item[0]),) for item in duckdb_results]
814-
pg_results_str = [(str(item[0]),) for item in pg_results]
815-
816-
# Get normalized transmit results
817778
transmit_results = perform_transmit_query(query, pgduck_conn, tmp_path)
818-
transmit_results = [(item[0],) for item in transmit_results]
779+
transmit_results = [(int(item[0]),) for item in transmit_results]
819780

820781
assert (
821-
duckdb_results_str == pg_results_str == transmit_results == expected
782+
duckdb_results == pg_results == transmit_results == expected
822783
), "UHUGEINT results do not match expected values!"
823784

824785

0 commit comments

Comments
 (0)