Skip to content

Commit

Permalink
fix TIMESTAMP column infinity. (#702)
Browse files Browse the repository at this point in the history
- revert TIMESTAMP_S column infinity support.
- add TIMESTAMP column infinity support.
  • Loading branch information
suketa committed Jun 25, 2024
1 parent 200d0b3 commit 37ba6a1
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 20 deletions.
37 changes: 19 additions & 18 deletions ext/duckdb/result.c
Original file line number Diff line number Diff line change
Expand Up @@ -636,16 +636,22 @@ static VALUE vector_date(void *vector_data, idx_t row_idx) {
}

static VALUE vector_timestamp(void* vector_data, idx_t row_idx) {
duckdb_timestamp_struct data = duckdb_from_timestamp(((duckdb_timestamp *)vector_data)[row_idx]);
return rb_funcall(mDuckDBConverter, id__to_time, 7,
INT2FIX(data.date.year),
INT2FIX(data.date.month),
INT2FIX(data.date.day),
INT2FIX(data.time.hour),
INT2FIX(data.time.min),
INT2FIX(data.time.sec),
INT2NUM(data.time.micros)
);
duckdb_timestamp data = ((duckdb_timestamp *)vector_data)[row_idx];
VALUE obj = infinite_timestamp_value(data);

if (obj == Qnil) {
duckdb_timestamp_struct data_st = duckdb_from_timestamp(data);
return rb_funcall(mDuckDBConverter, id__to_time, 7,
INT2FIX(data_st.date.year),
INT2FIX(data_st.date.month),
INT2FIX(data_st.date.day),
INT2FIX(data_st.time.hour),
INT2FIX(data_st.time.min),
INT2FIX(data_st.time.sec),
INT2NUM(data_st.time.micros)
);
}
return obj;
}

static VALUE vector_time(void* vector_data, idx_t row_idx) {
Expand Down Expand Up @@ -751,14 +757,9 @@ static VALUE infinite_timestamp_value(duckdb_timestamp timestamp) {

static VALUE vector_timestamp_s(void* vector_data, idx_t row_idx) {
duckdb_timestamp data = ((duckdb_timestamp *)vector_data)[row_idx];
VALUE obj = infinite_timestamp_value(data);

if (obj == Qnil) {
obj = rb_funcall(mDuckDBConverter, id__to_time_from_duckdb_timestamp_s, 1,
LL2NUM(data.micros)
);
}
return obj;
return rb_funcall(mDuckDBConverter, id__to_time_from_duckdb_timestamp_s, 1,
LL2NUM(data.micros)
);
}

static VALUE vector_timestamp_ms(void* vector_data, idx_t row_idx) {
Expand Down
4 changes: 2 additions & 2 deletions test/duckdb_test/result_chunk_each_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ def teardown
[:ok, 'DOUBLE', 'DOUBLE', 123.456789, Float, 123.456789 ],
[:ok, 'TIMESTAMP', 'TIMESTAMP', "'2019-11-03 12:34:56.000001'", Time, Time.local(2019, 11, 3, 12, 34, 56, 1) ],
[:ok, 'TIMESTAMP', 'TIMESTAMP', "'2019-11-03 12:34:56.00001'", Time, Time.local(2019, 11, 3, 12, 34, 56, 10) ],
[:ok, 'TIMESTAMP', 'TIMESTAMP', "'infinity'", String, 'infinity' ],
[:ok, 'TIMESTAMP', 'TIMESTAMP', "'-infinity'", String, '-infinity' ],
[:ok, 'DATE', 'DATE', "'2019-11-03'", Date, Date.new(2019,11,3) ],
[:ng, 'DATE', 'DATE', "'infinity'", String, 'infinity' ],
[:ng, 'DATE', 'DATE', "'-infinity'", String, '-infinity' ],
Expand Down Expand Up @@ -75,8 +77,6 @@ def teardown
[:ok, 'DECIMAL', 'DECIMAL(38, 8)', '1.234567898', BigDecimal, BigDecimal('1.23456789') ],
[:ok, 'DECIMAL', 'DECIMAL(38, 8)', '0.00123456789', BigDecimal, BigDecimal('0.00123456') ],
[:ok, 'TIMESTAMP_S', 'TIMESTAMP_S', "'2019-11-03 12:34:56.123456789'", Time, Time.local(2019, 11, 3, 12, 34, 56) ],
[:ok, 'TIMESTAMP_S', 'TIMESTAMP_S', "'infinity'", String, 'infinity' ],
[:ok, 'TIMESTAMP_S', 'TIMESTAMP_S', "'-infinity'", String, '-infinity' ],
[:ok, 'TIMESTAMP_MS', 'TIMESTAMP_MS', "'2019-11-03 12:34:56.123456789'", Time, Time.parse('2019-11-3 12:34:56.123') ],
[:ok, 'TIMESTAMP_NS', 'TIMESTAMP_NS', "'2019-11-03 12:34:56.123456789'", Time, Time.parse('2019-11-3 12:34:56.123456') ],
[:ok, 'ENUM', 'mood', "'happy'", String, 'happy' ],
Expand Down

0 comments on commit 37ba6a1

Please sign in to comment.