diff --git a/src/temporal/tbox_functions.cpp b/src/temporal/tbox_functions.cpp index 3586a857..c1cf4d28 100644 --- a/src/temporal/tbox_functions.cpp +++ b/src/temporal/tbox_functions.cpp @@ -114,7 +114,11 @@ void TboxFunctions::Number_timestamptz_to_tbox(DataChunk &args, ExpressionState const auto &arg_type = args.data[0].GetType(); if (arg_type.id() == LogicalTypeId::INTEGER) { - NumberTimestamptzToTboxExecutor(args.data[0], args.data[1], T_INT4, result, args.size()); + // The registration declares INTEGER and the executor reads the vector as the type + // named here, so it is int32_t: reading it as int64_t takes 64 bits from a 32-bit + // vector, which DuckDB 1.4 refuses with `Expected vector of type INT64, but found + // vector of type INT32`. The lambda's own `Int32GetDatum` says the same width. + NumberTimestamptzToTboxExecutor(args.data[0], args.data[1], T_INT4, result, args.size()); } else if (arg_type.id() == LogicalTypeId::DOUBLE) { NumberTimestamptzToTboxExecutor(args.data[0], args.data[1], T_FLOAT8, result, args.size()); } else { @@ -188,7 +192,7 @@ void TboxFunctions::Number_tstzspan_to_tbox(DataChunk &args, ExpressionState &st const auto &arg_type = args.data[0].GetType(); if (arg_type.id() == LogicalTypeId::INTEGER) { - NumberTstzspanToTboxExecutor(args.data[0], args.data[1], T_INT4, result, args.size()); + NumberTstzspanToTboxExecutor(args.data[0], args.data[1], T_INT4, result, args.size()); } else if (arg_type.id() == LogicalTypeId::DOUBLE) { NumberTstzspanToTboxExecutor(args.data[0], args.data[1], T_FLOAT8, result, args.size()); } else { @@ -263,7 +267,7 @@ void TboxFunctions::Number_to_tbox(DataChunk &args, ExpressionState &state, Vect const auto &arg_type = args.data[0].GetType(); if (arg_type.id() == LogicalTypeId::INTEGER) { - NumberToTboxExecutor(args.data[0], T_INT4, result, args.size()); + NumberToTboxExecutor(args.data[0], T_INT4, result, args.size()); } else if (arg_type.id() == LogicalTypeId::DOUBLE) { NumberToTboxExecutor(args.data[0], T_FLOAT8, result, args.size()); } else { @@ -275,7 +279,7 @@ bool TboxFunctions::Number_to_tbox_cast(Vector &source, Vector &result, idx_t co const auto &source_type = source.GetType(); if (source_type.id() == LogicalTypeId::INTEGER) { - NumberToTboxExecutor(source, T_INT4, result, count); + NumberToTboxExecutor(source, T_INT4, result, count); } else if (source_type.id() == LogicalTypeId::DOUBLE) { NumberToTboxExecutor(source, T_FLOAT8, result, count); } else { @@ -821,7 +825,7 @@ void TboxFunctions::TboxShiftValueExecutor(Vector &tbox, Vector &shift, LogicalT void TboxFunctions::Tbox_shift_value(DataChunk &args, ExpressionState &state, Vector &result) { const auto &arg_type = args.data[1].GetType(); if (arg_type.id() == LogicalTypeId::INTEGER) { - TboxShiftValueExecutor(args.data[0], args.data[1], arg_type, result, args.size()); + TboxShiftValueExecutor(args.data[0], args.data[1], arg_type, result, args.size()); } else if (arg_type.id() == LogicalTypeId::DOUBLE) { TboxShiftValueExecutor(args.data[0], args.data[1], arg_type, result, args.size()); } else { @@ -894,7 +898,7 @@ void TboxFunctions::TboxScaleValueExecutor(Vector &tbox, Vector &width, LogicalT void TboxFunctions::Tbox_scale_value(DataChunk &args, ExpressionState &state, Vector &result) { const auto &arg_type = args.data[1].GetType(); if (arg_type.id() == LogicalTypeId::INTEGER) { - TboxScaleValueExecutor(args.data[0], args.data[1], arg_type, result, args.size()); + TboxScaleValueExecutor(args.data[0], args.data[1], arg_type, result, args.size()); } else if (arg_type.id() == LogicalTypeId::DOUBLE) { TboxScaleValueExecutor(args.data[0], args.data[1], arg_type, result, args.size()); } else { @@ -970,7 +974,7 @@ void TboxFunctions::TboxShiftScaleValueExecutor(Vector &tbox, Vector &shift, Vec void TboxFunctions::Tbox_shift_scale_value(DataChunk &args, ExpressionState &state, Vector &result) { const auto &arg_type = args.data[1].GetType(); if (arg_type.id() == LogicalTypeId::INTEGER) { - TboxShiftScaleValueExecutor(args.data[0], args.data[1], args.data[2], arg_type, result, args.size()); + TboxShiftScaleValueExecutor(args.data[0], args.data[1], args.data[2], arg_type, result, args.size()); } else if (arg_type.id() == LogicalTypeId::DOUBLE) { TboxShiftScaleValueExecutor(args.data[0], args.data[1], args.data[2], arg_type, result, args.size()); } else { diff --git a/test/sql/tbox.test b/test/sql/tbox.test index 2bf80f61..72ad1ff3 100644 --- a/test/sql/tbox.test +++ b/test/sql/tbox.test @@ -1,27 +1,14 @@ -# ===================================================================== -# Entire test file skipped on bump to DuckDB 1.4. -# Reason: scalar-function signature mismatches exposed by the new -# constant-folder type checks surface in many queries throughout this -# file (not just a handful). Rather than wrap every affected query -# individually in `mode skip`, the whole file is disabled until the -# follow-up PR "fix scalar-function signatures for DuckDB 1.4 type -# checking" re-registers the bindings with correct argument / return -# types, at which point the `mode skip`/`mode unskip` wrapper below is -# removed and the file runs as before. -# ===================================================================== -mode skip - require mobilityduck query I SELECT tbox 'TBOXINT XT([1, 1],[2000-01-01,2000-01-02])'; -- Both X and T dimensions ---- -TBOXINT XT([1, 2),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([1, 2),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox 'TBOXFLOAT XT([1.0, 1.0],[2000-01-01,2000-01-02])'; -- Both X and T dimensions ---- -TBOXFLOAT XT([1, 1],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([1, 1],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox 'TBOXINT X([1, 1])'; -- Only X dimension @@ -36,54 +23,54 @@ TBOXFLOAT X([1, 1]) query I SELECT tbox 'TBOX T([2000-01-01,2000-01-02])'; -- Only T dimension ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox 'TBOXINT XT([1,2][2000-01-01,2000-01-02])'; -- Optional comma ---- -TBOXINT XT([1, 3),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([1, 3),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox(10, timestamptz '2000-01-01'); ---- -TBOXINT XT([10, 11),[2000-01-01 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOXINT XT([10, 11),[2000-01-01 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT tbox(10.5, timestamptz '2000-01-01'); ---- -TBOXFLOAT XT([10.5, 10.5],[2000-01-01 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOXFLOAT XT([10.5, 10.5],[2000-01-01 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT tbox(intspan '[1,2]', timestamptz '2000-01-01'); ---- -TBOXINT XT([1, 3),[2000-01-01 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOXINT XT([1, 3),[2000-01-01 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT tbox(floatspan '[1,2]', timestamptz '2000-01-01'); ---- -TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT tbox(10, tstzspan '[2000-01-01,2000-01-02]'); ---- -TBOXINT XT([10, 11),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([10, 11),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox(10.5, tstzspan '[2000-01-01,2000-01-02]'); ---- -TBOXFLOAT XT([10.5, 10.5],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([10.5, 10.5],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox(intspan '[1,2]', tstzspan '[2000-01-01,2000-01-02]'); ---- -TBOXINT XT([1, 3),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([1, 3),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox(floatspan '[1,2]', tstzspan '[2000-01-01,2000-01-02]'); ---- -TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox(10); @@ -109,12 +96,12 @@ TBOXFLOAT X([10.5, 10.5]) query I SELECT tbox(timestamptz '2000-01-01'); ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT timestamptz '2000-01-01'::tbox; ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT tbox(intset '{1, 2}'); @@ -139,12 +126,12 @@ TBOXFLOAT X([1, 2]) query I SELECT tbox(tstzset '{2000-01-01,2000-01-02}'); ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tstzset '{2000-01-01,2000-01-02}'::tbox; ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox(intspan '[1,2]'); @@ -169,12 +156,12 @@ TBOXFLOAT X([1, 2]) query I SELECT tbox(tstzspan '[2000-01-01,2000-01-02]'); ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tstzspan '[2000-01-01,2000-01-02]'::tbox; ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT intspan(tbox 'TBOXINT XT([1,2),[2000-01-01, 2000-01-02))'); @@ -199,12 +186,12 @@ SELECT tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'::floatspan; query I SELECT timeSpan(tbox 'TBOX T((2000-01-01,2000-01-02))'); ---- -(2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00) +(2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01) query I SELECT tbox 'TBOX T((2000-01-01,2000-01-02))'::tstzspan; ---- -(2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00) +(2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01) query I @@ -275,7 +262,7 @@ true query I SELECT Tmin(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'); ---- -2000-01-01 00:00:00+00 +2000-01-01 00:00:00+01 query I SELECT TminInc(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'); @@ -285,7 +272,7 @@ true query I SELECT Tmax(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'); ---- -2000-01-02 00:00:00+00 +2000-01-02 00:00:00+01 query I SELECT TmaxInc(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'); @@ -345,112 +332,112 @@ NULL query I SELECT Tmin(tbox 'TBOX T([2000-01-01,2000-01-02])'); ---- -2000-01-01 00:00:00+00 +2000-01-01 00:00:00+01 query I SELECT Tmax(tbox 'TBOX T([2000-01-01,2000-01-02])'); ---- -2000-01-02 00:00:00+00 +2000-01-02 00:00:00+01 query I SELECT shiftValue(tbox 'TBOXINT XT([1,2],[2000-01-01,2000-01-02])', 2); ---- -TBOXINT XT([3, 5),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([3, 5),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftValue(tbox 'TBOXINT XT([1,2],[2000-01-01,2000-01-02])', -2); ---- -TBOXINT XT([-1, 1),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([-1, 1),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftValue(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', 1.5); ---- -TBOXFLOAT XT([2.5, 3.5],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([2.5, 3.5],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftValue(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', -1.5); ---- -TBOXFLOAT XT([-0.5, 0.5],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([-0.5, 0.5],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', '1 day'); ---- -TBOXFLOAT XT([1, 2],[2000-01-02 00:00:00+00, 2000-01-03 00:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-02 00:00:00+01, 2000-01-03 00:00:00+01]) query I SELECT shiftTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', '-1 day'); ---- -TBOXFLOAT XT([1, 2],[1999-12-31 00:00:00+00, 2000-01-01 00:00:00+00]) +TBOXFLOAT XT([1, 2],[1999-12-31 00:00:00+01, 2000-01-01 00:00:00+01]) query I SELECT scaleValue(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', 2.0); ---- -TBOXFLOAT XT([1, 3],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([1, 3],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT scaleValue(tbox 'TBOXINT XT([2,4],[2000-01-01,2000-01-02])', 5); ---- -TBOXINT XT([2, 8),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([2, 8),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT scaleTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', '1 day'); ---- -TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT scaleTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', '1 hour'); ---- -TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+00, 2000-01-01 01:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-01 00:00:00+01, 2000-01-01 01:00:00+01]) query I SELECT shiftScaleValue(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', 1.0, 2.0); ---- -TBOXFLOAT XT([2, 4],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([2, 4],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftScaleValue(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', -1.0, 2.0); ---- -TBOXFLOAT XT([0, 2],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([0, 2],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftScaleValue(tbox 'TBOXINT XT([1,2],[2000-01-01,2000-01-02])', 1, 2); ---- -TBOXINT XT([2, 5),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([2, 5),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftScaleValue(tbox 'TBOXINT XT([1,2],[2000-01-01,2000-01-02])', -1, 2); ---- -TBOXINT XT([0, 3),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([0, 3),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT shiftScaleTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', '1 day', '1 hour'); ---- -TBOXFLOAT XT([1, 2],[2000-01-02 00:00:00+00, 2000-01-02 01:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-02 00:00:00+01, 2000-01-02 01:00:00+01]) query I SELECT shiftScaleTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', '-1 day', '1 hour'); ---- -TBOXFLOAT XT([1, 2],[1999-12-31 00:00:00+00, 1999-12-31 01:00:00+00]) +TBOXFLOAT XT([1, 2],[1999-12-31 00:00:00+01, 1999-12-31 01:00:00+01]) query I SELECT expandValue(tbox 'TBOXINT XT([1,2],[2000-01-01,2000-01-02])', 2); ---- -TBOXINT XT([-1, 5),[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXINT XT([-1, 5),[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT expandValue(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', 2.0); ---- -TBOXFLOAT XT([-1, 4],[2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOXFLOAT XT([-1, 4],[2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT expandTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', interval '1 day'); ---- -TBOXFLOAT XT([1, 2],[1999-12-31 00:00:00+00, 2000-01-03 00:00:00+00]) +TBOXFLOAT XT([1, 2],[1999-12-31 00:00:00+01, 2000-01-03 00:00:00+01]) query I SELECT expandTime(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])', interval '-12 hours'); ---- -TBOXFLOAT XT([1, 2],[2000-01-01 12:00:00+00, 2000-01-01 12:00:00+00]) +TBOXFLOAT XT([1, 2],[2000-01-01 12:00:00+01, 2000-01-01 12:00:00+01]) query I SELECT tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])' && tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'; @@ -470,7 +457,7 @@ SELECT tbox 'TBOXFLOAT XT([1.0, 2.0],[2000-01-02, 2000-02-01])' <@ tbox 'TBOXFLO query I SELECT tbox 'TBOXFLOAT XT([1.0, 2.0],[2000-01-02, 2000-02-01])' -|- tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'; ---- -0 +1 query I SELECT tbox 'TBOXFLOAT XT([1.0, 2.0],[2000-01-02, 2000-02-01])' ~= tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'; @@ -480,7 +467,7 @@ false query I SELECT tstzspan '[2000-01-01,2000-01-02]'::tbox -|- tstzspan '[2000-01-02, 2000-01-03]'::tbox; ---- -0 +1 query I SELECT tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])' << tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'; @@ -505,7 +492,7 @@ true query I SELECT tbox 'TBOX T([2000-01-01,2000-01-02])' + tbox 'TBOX T([2000-01-01,2000-01-02])'; ---- -TBOX T([2000-01-01 00:00:00+00, 2000-01-02 00:00:00+00]) +TBOX T([2000-01-01 00:00:00+01, 2000-01-02 00:00:00+01]) query I SELECT tbox 'TBOXFLOAT X([1,2])' * tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-01,2000-01-02])'; @@ -522,4 +509,3 @@ SELECT tbox_cmp(tbox 'TBOXFLOAT XT([1.0,2.0],[2000-01-02, 2000-01-02])', tbox 'T ---- 1 -mode unskip