From fa2de5747e76f32283fec9460b4f4277333c18c1 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Fri, 29 May 2026 22:09:16 +0200 Subject: [PATCH 1/2] Pin MEOS with the wasm pg_config SIZEOF_LONG_LONG fix Adds the SIZEOF_LONG_LONG emission to the rendered pg_config.h so the DuckDB-Wasm (wasm32-emscripten / ILP32) build of MEOS no longer fails the pg_bitutils integer-width check. --- vcpkg_ports/meos/portfile.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vcpkg_ports/meos/portfile.cmake b/vcpkg_ports/meos/portfile.cmake index 82619e3a..9aeff5d5 100644 --- a/vcpkg_ports/meos/portfile.cmake +++ b/vcpkg_ports/meos/portfile.cmake @@ -1,8 +1,8 @@ vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO estebanzimanyi/MobilityDB - REF a8178dc9d56d841d0eb5025a7e8717c8d25a1d0f - SHA512 030a144bb3247695702dd2de11f4c389ed28c6eb0186e6988a489e2b00e9801179ba8f27bcbcd81ae89e398a7277ed7f9ff7058dbf15f5db322ae4644365c560 + REF 3db47f887c61f049a6a03db55c48bedf6d10eee4 + SHA512 b73123bca036813c43937f90f0d0ce45af5cb9e39d6a597304199d21ae854212319a3a7b58ecd075eb5678d89d6d5990b9faf63dd29bd8c9a4e2ed83282b94c5 ) vcpkg_replace_string( From e8501f78bcaa2991b57a4b73f55137030cb1224f Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Fri, 29 May 2026 22:10:41 +0200 Subject: [PATCH 2/2] Normalize tnumber multiplication naming from mult to mul Renames the SQL function tnumber_mult to tnumber_mul and the Mult_* execution methods to Mul_* (bodies already call mul_int_tint / mul_tfloat_float / mul_tnumber_tnumber). The * operator overloads are unchanged. --- src/include/temporal/temporal_functions.hpp | 10 ++++---- src/temporal/temporal.cpp | 24 +++++++++---------- src/temporal/temporal_functions.cpp | 10 ++++---- test/sql/parity/026_tnumber_mathfuncs.test | 4 ++-- .../026b_tnumber_mathfuncs_followups.test | 4 ++-- 5 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/include/temporal/temporal_functions.hpp b/src/include/temporal/temporal_functions.hpp index bbb895c3..9c56a3b7 100644 --- a/src/include/temporal/temporal_functions.hpp +++ b/src/include/temporal/temporal_functions.hpp @@ -209,11 +209,11 @@ struct TemporalFunctions { static void Sub_float_tfloat(DataChunk &args, ExpressionState &state, Vector &result); static void Sub_tfloat_float(DataChunk &args, ExpressionState &state, Vector &result); static void Sub_tnumber_tnumber(DataChunk &args, ExpressionState &state, Vector &result); - static void Mult_int_tint(DataChunk &args, ExpressionState &state, Vector &result); - static void Mult_tint_int(DataChunk &args, ExpressionState &state, Vector &result); - static void Mult_float_tfloat(DataChunk &args, ExpressionState &state, Vector &result); - static void Mult_tfloat_float(DataChunk &args, ExpressionState &state, Vector &result); - static void Mult_tnumber_tnumber(DataChunk &args, ExpressionState &state, Vector &result); + static void Mul_int_tint(DataChunk &args, ExpressionState &state, Vector &result); + static void Mul_tint_int(DataChunk &args, ExpressionState &state, Vector &result); + static void Mul_float_tfloat(DataChunk &args, ExpressionState &state, Vector &result); + static void Mul_tfloat_float(DataChunk &args, ExpressionState &state, Vector &result); + static void Mul_tnumber_tnumber(DataChunk &args, ExpressionState &state, Vector &result); static void Div_int_tint(DataChunk &args, ExpressionState &state, Vector &result); static void Div_tint_int(DataChunk &args, ExpressionState &state, Vector &result); static void Div_float_tfloat(DataChunk &args, ExpressionState &state, Vector &result); diff --git a/src/temporal/temporal.cpp b/src/temporal/temporal.cpp index e154afc0..b05420c3 100644 --- a/src/temporal/temporal.cpp +++ b/src/temporal/temporal.cpp @@ -1341,12 +1341,12 @@ void TemporalTypes::RegisterScalarFunctions(ExtensionLoader &loader) { duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {TemporalTypes::TINT(), TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Sub_tnumber_tnumber)); duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {TemporalTypes::TFLOAT(), TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Sub_tnumber_tnumber)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::INTEGER, TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mult_int_tint)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TINT(), LogicalType::INTEGER}, TemporalTypes::TINT(), TemporalFunctions::Mult_tint_int)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::DOUBLE, TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mult_float_tfloat)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TFLOAT(), LogicalType::DOUBLE}, TemporalTypes::TFLOAT(), TemporalFunctions::Mult_tfloat_float)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TINT(), TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mult_tnumber_tnumber)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TFLOAT(), TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mult_tnumber_tnumber)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::INTEGER, TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mul_int_tint)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TINT(), LogicalType::INTEGER}, TemporalTypes::TINT(), TemporalFunctions::Mul_tint_int)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::DOUBLE, TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mul_float_tfloat)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TFLOAT(), LogicalType::DOUBLE}, TemporalTypes::TFLOAT(), TemporalFunctions::Mul_tfloat_float)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TINT(), TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mul_tnumber_tnumber)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {TemporalTypes::TFLOAT(), TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mul_tnumber_tnumber)); duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("/", {LogicalType::INTEGER, TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Div_int_tint)); duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("/", {TemporalTypes::TINT(), LogicalType::INTEGER}, TemporalTypes::TINT(), TemporalFunctions::Div_tint_int)); @@ -1390,12 +1390,12 @@ void TemporalTypes::RegisterScalarFunctions(ExtensionLoader &loader) { duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_sub", {TemporalTypes::TINT(), TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Sub_tnumber_tnumber)); duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_sub", {TemporalTypes::TFLOAT(), TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Sub_tnumber_tnumber)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mult", {LogicalType::INTEGER, TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mult_int_tint)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mult", {TemporalTypes::TINT(), LogicalType::INTEGER}, TemporalTypes::TINT(), TemporalFunctions::Mult_tint_int)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mult", {LogicalType::DOUBLE, TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mult_float_tfloat)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mult", {TemporalTypes::TFLOAT(), LogicalType::DOUBLE}, TemporalTypes::TFLOAT(), TemporalFunctions::Mult_tfloat_float)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mult", {TemporalTypes::TINT(), TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mult_tnumber_tnumber)); - duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mult", {TemporalTypes::TFLOAT(), TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mult_tnumber_tnumber)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mul", {LogicalType::INTEGER, TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mul_int_tint)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mul", {TemporalTypes::TINT(), LogicalType::INTEGER}, TemporalTypes::TINT(), TemporalFunctions::Mul_tint_int)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mul", {LogicalType::DOUBLE, TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mul_float_tfloat)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mul", {TemporalTypes::TFLOAT(), LogicalType::DOUBLE}, TemporalTypes::TFLOAT(), TemporalFunctions::Mul_tfloat_float)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mul", {TemporalTypes::TINT(), TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Mul_tnumber_tnumber)); + duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_mul", {TemporalTypes::TFLOAT(), TemporalTypes::TFLOAT()}, TemporalTypes::TFLOAT(), TemporalFunctions::Mul_tnumber_tnumber)); duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_div", {LogicalType::INTEGER, TemporalTypes::TINT()}, TemporalTypes::TINT(), TemporalFunctions::Div_int_tint)); duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("tnumber_div", {TemporalTypes::TINT(), LogicalType::INTEGER}, TemporalTypes::TINT(), TemporalFunctions::Div_tint_int)); diff --git a/src/temporal/temporal_functions.cpp b/src/temporal/temporal_functions.cpp index fc8a2b68..ce983cf9 100644 --- a/src/temporal/temporal_functions.cpp +++ b/src/temporal/temporal_functions.cpp @@ -4756,19 +4756,19 @@ void TemporalFunctions::Sub_tnumber_tnumber(DataChunk &args, ExpressionState &st TemporalBinaryTT(args, result, [](Temporal *a, Temporal *b) { return sub_tnumber_tnumber(a, b); }); } -void TemporalFunctions::Mult_int_tint(DataChunk &args, ExpressionState &state, Vector &result) { +void TemporalFunctions::Mul_int_tint(DataChunk &args, ExpressionState &state, Vector &result) { TemporalBinaryV1(args, result, [](int32_t i, Temporal *t) { return mul_int_tint(i, t); }); } -void TemporalFunctions::Mult_tint_int(DataChunk &args, ExpressionState &state, Vector &result) { +void TemporalFunctions::Mul_tint_int(DataChunk &args, ExpressionState &state, Vector &result) { TemporalBinaryV(args, result, [](Temporal *t, int32_t i) { return mul_tint_int(t, i); }); } -void TemporalFunctions::Mult_float_tfloat(DataChunk &args, ExpressionState &state, Vector &result) { +void TemporalFunctions::Mul_float_tfloat(DataChunk &args, ExpressionState &state, Vector &result) { TemporalBinaryV1(args, result, [](double d, Temporal *t) { return mul_float_tfloat(d, t); }); } -void TemporalFunctions::Mult_tfloat_float(DataChunk &args, ExpressionState &state, Vector &result) { +void TemporalFunctions::Mul_tfloat_float(DataChunk &args, ExpressionState &state, Vector &result) { TemporalBinaryV(args, result, [](Temporal *t, double d) { return mul_tfloat_float(t, d); }); } -void TemporalFunctions::Mult_tnumber_tnumber(DataChunk &args, ExpressionState &state, Vector &result) { +void TemporalFunctions::Mul_tnumber_tnumber(DataChunk &args, ExpressionState &state, Vector &result) { TemporalBinaryTT(args, result, [](Temporal *a, Temporal *b) { return mul_tnumber_tnumber(a, b); }); } diff --git a/test/sql/parity/026_tnumber_mathfuncs.test b/test/sql/parity/026_tnumber_mathfuncs.test index e8ac8e36..81e55fde 100644 --- a/test/sql/parity/026_tnumber_mathfuncs.test +++ b/test/sql/parity/026_tnumber_mathfuncs.test @@ -7,13 +7,13 @@ # (tint / tfloat) on either side. The error surfaces as # `+(tstzset, TIMESTAMP WITH TIME ZONE) -> tstzset` (DuckDB picks an # unrelated overload). MEOS symbols: tnumber_add_tnumber, -# tnumber_sub_tnumber, tnumber_mult_tnumber, tnumber_div_tnumber, plus +# tnumber_sub_tnumber, tnumber_mul_tnumber, tnumber_div_tnumber, plus # the value-tnumber and tnumber-value variants for each of the four # operators. # # The full surface to cover: # value op tnumber, tnumber op value, tnumber op tnumber -# for + (add), - (sub), * (mult), / (div) +# for + (add), - (sub), * (mul), / (div) # x both (tint, tfloat) base types # = 24 ScalarFunction registrations per operator, 96 total. # Plus unary functions: abs, deg, rad, atan, derivative. diff --git a/test/sql/parity/026b_tnumber_mathfuncs_followups.test b/test/sql/parity/026b_tnumber_mathfuncs_followups.test index 1be3f23d..a64b0685 100644 --- a/test/sql/parity/026b_tnumber_mathfuncs_followups.test +++ b/test/sql/parity/026b_tnumber_mathfuncs_followups.test @@ -57,7 +57,7 @@ SELECT tnumber_sub(tfloat '[10@2000-01-01]', 5.0); [5@2000-01-01 00:00:00+01] query I -SELECT tnumber_mult(2.0, tfloat '[3@2000-01-01]'); +SELECT tnumber_mul(2.0, tfloat '[3@2000-01-01]'); ---- [6@2000-01-01 00:00:00+01] @@ -74,7 +74,7 @@ SELECT tnumber_add(tfloat '[3@2000-01-01]', 4.0) = (tfloat '[3@2000-01-01]' + 4. true query I -SELECT tnumber_mult(tint '[5@2000-01-01]', tint '[2@2000-01-01]') +SELECT tnumber_mul(tint '[5@2000-01-01]', tint '[2@2000-01-01]') = (tint '[5@2000-01-01]' * tint '[2@2000-01-01]'); ---- true