Skip to content

Commit

Permalink
fix timestamp conversion, update type_support.out
Browse files Browse the repository at this point in the history
  • Loading branch information
Tishj committed May 22, 2024
1 parent fa8ceb2 commit 7da0e22
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 16 deletions.
96 changes: 83 additions & 13 deletions expected/type_support.out
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
drop extension if exists quack;
create extension quack;
-- CHAR
CREATE TABLE chr(a CHAR);
INSERT INTO chr SELECT CAST(a AS CHAR) from (VALUES (-128), (0), (127)) t(a);
Expand Down Expand Up @@ -78,7 +80,11 @@ SELECT * FROM date_tbl;

-- TIMESTAMP
CREATE TABLE timestamp_tbl(a TIMESTAMP);
INSERT INTO timestamp_tbl SELECT CAST(a AS TIMESTAMP) FROM (VALUES ('2022-04-29 10:15:30'::TIMESTAMP), (NULL), ('2023-05-15 12:30:45'::TIMESTAMP)) t(a);
INSERT INTO timestamp_tbl SELECT CAST(a AS TIMESTAMP) FROM (VALUES
('2022-04-29 10:15:30'::TIMESTAMP),
(NULL),
('2023-05-15 12:30:45'::TIMESTAMP)
) t(a);
SELECT * FROM timestamp_tbl;
a
--------------------------
Expand Down Expand Up @@ -124,20 +130,80 @@ INSERT INTO numeric_as_double SELECT a FROM (VALUES
(NULL),
(458234502034234234234.000012)
) t(a);
select pg_typeof(a) from numeric_as_double;
pg_typeof
-----------
numeric
numeric
numeric
SELECT * FROM numeric_as_double;
a
-----------------------
0.234234234
4.582345020342342e+20
(3 rows)

SELECT * FROM numeric_as_double;
a
------------------------------
0.234234234

458234502034234234234.000012
-- NUMERIC with a physical type of SMALLINT
CREATE TABLE smallint_numeric(a NUMERIC(4, 2));
INSERT INTO smallint_numeric SELECT a FROM (VALUES
(0.23),
(NULL),
(45.12)
) t(a);
SELECT * FROM smallint_numeric;
INFO: SMALLINT
INFO: SMALLINT
a
-------
0.23

45.12
(3 rows)

-- NUMERIC with a physical type of INTEGER
CREATE TABLE integer_numeric(a NUMERIC(9, 6));
INSERT INTO integer_numeric SELECT a FROM (VALUES
(243.345035::NUMERIC(9,6)),
(NULL),
(45.000012::NUMERIC(9,6))
) t(a);
SELECT * FROM integer_numeric;
INFO: INTEGER
INFO: INTEGER
a
------------
243.345035

45.000012
(3 rows)

-- NUMERIC with a physical type of BIGINT
CREATE TABLE bigint_numeric(a NUMERIC(18, 12));
INSERT INTO bigint_numeric SELECT a FROM (VALUES
(856324.111122223333::NUMERIC(18,12)),
(NULL),
(12.000000000001::NUMERIC(18,12))
) t(a);
SELECT * FROM bigint_numeric;
INFO: BIGINT
INFO: BIGINT
a
---------------------
856324.111122223333

12.000000000001
(3 rows)

-- NUMERIC with a physical type of HUGEINT
CREATE TABLE hugeint_numeric(a NUMERIC(38, 24));
INSERT INTO hugeint_numeric SELECT a FROM (VALUES
(32942348563242.111222333444555666777888::NUMERIC(38,24)),
(NULL),
(123456789.000000000000000000000001::NUMERIC(38,24))
) t(a);
SELECT * FROM hugeint_numeric;
INFO: HUGEINT
INFO: HUGEINT
a
-----------------------------------------
32942348563242.111222333444555666777888

123456789.000000000000000000000001
(3 rows)

DROP TABLE chr;
Expand All @@ -150,3 +216,7 @@ DROP TABLE timestamp_tbl;
DROP TABLE float4_tbl;
DROP TABLE float8_tbl;
DROP TABLE numeric_as_double;
DROP TABLE smallint_numeric;
DROP TABLE integer_numeric;
DROP TABLE bigint_numeric;
DROP TABLE hugeint_numeric;
6 changes: 3 additions & 3 deletions src/quack_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ ConvertDuckToPostgresValue(TupleTableSlot *slot, duckdb::Value &value, idx_t col
break;
}
case TIMESTAMPOID: {
duckdb::dtime_t timestamp = value.GetValue<duckdb::dtime_t>();
slot->tts_values[col] = timestamp.micros - quack::QUACK_DUCK_TIMESTAMP_OFFSET;
duckdb::timestamp_t timestamp = value.GetValue<duckdb::timestamp_t>();
slot->tts_values[col] = timestamp.value - quack::QUACK_DUCK_TIMESTAMP_OFFSET;
break;
}
case FLOAT4OID: {
Expand Down Expand Up @@ -388,7 +388,7 @@ ConvertPostgresToDuckValue(Datum value, duckdb::Vector &result, idx_t offset) {
Append<duckdb::date_t>(result, duckdb::date_t(static_cast<int32_t>(value + QUACK_DUCK_DATE_OFFSET)), offset);
break;
case duckdb::LogicalTypeId::TIMESTAMP:
Append<duckdb::dtime_t>(result, duckdb::dtime_t(static_cast<int64_t>(value + QUACK_DUCK_TIMESTAMP_OFFSET)),
Append<duckdb::timestamp_t>(result, duckdb::timestamp_t(static_cast<int64_t>(value + QUACK_DUCK_TIMESTAMP_OFFSET)),
offset);
break;
case duckdb::LogicalTypeId::FLOAT: {
Expand Down

0 comments on commit 7da0e22

Please sign in to comment.