Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
184 changes: 113 additions & 71 deletions src/generated/generated_temporal_udfs_0.cpp

Large diffs are not rendered by default.

2,288 changes: 1,141 additions & 1,147 deletions src/generated/generated_temporal_udfs_1.cpp

Large diffs are not rendered by default.

1,866 changes: 850 additions & 1,016 deletions src/generated/generated_temporal_udfs_2.cpp

Large diffs are not rendered by default.

1,553 changes: 836 additions & 717 deletions src/generated/generated_temporal_udfs_3.cpp

Large diffs are not rendered by default.

1,829 changes: 946 additions & 883 deletions src/generated/generated_temporal_udfs_4.cpp

Large diffs are not rendered by default.

3,740 changes: 1,946 additions & 1,794 deletions src/generated/generated_temporal_udfs_5.cpp

Large diffs are not rendered by default.

2,975 changes: 1,758 additions & 1,217 deletions src/generated/generated_temporal_udfs_6.cpp

Large diffs are not rendered by default.

2,436 changes: 971 additions & 1,465 deletions src/generated/generated_temporal_udfs_7.cpp

Large diffs are not rendered by default.

21 changes: 0 additions & 21 deletions src/temporal/set.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,9 +224,6 @@ void SetTypes::RegisterScalarFunctions(ExtensionLoader &loader) {
ScalarFunction("textset_cat", {SetTypes::textset(), LogicalType::VARCHAR}, SetTypes::textset(),
SetFunctions::Textcat_textset_text)
);
duckdb::RegisterSerializedScalarFunction(loader,
ScalarFunction("||", {LogicalType::VARCHAR, SetTypes::textset()}, SetTypes::textset(), SetFunctions::Textcat_text_textset)
);
duckdb::RegisterSerializedScalarFunction(loader,
ScalarFunction("||", {SetTypes::textset(), LogicalType::VARCHAR}, SetTypes::textset(), SetFunctions::Textcat_textset_text)
);
Expand All @@ -250,17 +247,11 @@ void SetTypes::RegisterScalarFunctions(ExtensionLoader &loader) {
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_union", {SetTypes::dateset(), LogicalType::DATE}, SetTypes::dateset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_union", {LogicalType::TIMESTAMP_TZ, SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_union", {SetTypes::tstzset(), LogicalType::TIMESTAMP_TZ}, SetTypes::tstzset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {LogicalType::INTEGER, SetTypes::intset()}, SetTypes::intset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {SetTypes::intset(), LogicalType::INTEGER}, SetTypes::intset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {LogicalType::BIGINT, SetTypes::bigintset()}, SetTypes::bigintset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {SetTypes::bigintset(), LogicalType::BIGINT}, SetTypes::bigintset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {LogicalType::DOUBLE, SetTypes::floatset()}, SetTypes::floatset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {SetTypes::floatset(), LogicalType::DOUBLE}, SetTypes::floatset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {LogicalType::VARCHAR, SetTypes::textset()}, SetTypes::textset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {SetTypes::textset(), LogicalType::VARCHAR}, SetTypes::textset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {LogicalType::DATE, SetTypes::dateset()}, SetTypes::dateset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {SetTypes::dateset(), LogicalType::DATE}, SetTypes::dateset(), SetFunctions::Union_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {LogicalType::TIMESTAMP_TZ, SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Union_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("+", {SetTypes::tstzset(), LogicalType::TIMESTAMP_TZ}, SetTypes::tstzset(), SetFunctions::Union_set_value));

// --- set_minus / - ---
Expand All @@ -282,22 +273,16 @@ void SetTypes::RegisterScalarFunctions(ExtensionLoader &loader) {
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_minus", {LogicalType::TIMESTAMP_TZ, SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_minus", {SetTypes::tstzset(), LogicalType::TIMESTAMP_TZ}, SetTypes::tstzset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_minus", {SetTypes::tstzset(), SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Minus_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {LogicalType::INTEGER, SetTypes::intset()}, SetTypes::intset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::intset(), LogicalType::INTEGER}, SetTypes::intset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::intset(), SetTypes::intset()}, SetTypes::intset(), SetFunctions::Minus_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {LogicalType::BIGINT, SetTypes::bigintset()}, SetTypes::bigintset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::bigintset(), LogicalType::BIGINT}, SetTypes::bigintset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::bigintset(), SetTypes::bigintset()}, SetTypes::bigintset(), SetFunctions::Minus_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {LogicalType::DOUBLE, SetTypes::floatset()}, SetTypes::floatset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::floatset(), LogicalType::DOUBLE}, SetTypes::floatset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::floatset(), SetTypes::floatset()}, SetTypes::floatset(), SetFunctions::Minus_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {LogicalType::VARCHAR, SetTypes::textset()}, SetTypes::textset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::textset(), LogicalType::VARCHAR}, SetTypes::textset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::textset(), SetTypes::textset()}, SetTypes::textset(), SetFunctions::Minus_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {LogicalType::DATE, SetTypes::dateset()}, SetTypes::dateset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::dateset(), LogicalType::DATE}, SetTypes::dateset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::dateset(), SetTypes::dateset()}, SetTypes::dateset(), SetFunctions::Minus_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {LogicalType::TIMESTAMP_TZ, SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Minus_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::tstzset(), LogicalType::TIMESTAMP_TZ}, SetTypes::tstzset(), SetFunctions::Minus_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("-", {SetTypes::tstzset(), SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Minus_set_set));

Expand All @@ -320,22 +305,16 @@ void SetTypes::RegisterScalarFunctions(ExtensionLoader &loader) {
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_intersection", {LogicalType::TIMESTAMP_TZ, SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_intersection", {SetTypes::tstzset(), LogicalType::TIMESTAMP_TZ}, SetTypes::tstzset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("set_intersection", {SetTypes::tstzset(), SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Intersect_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::INTEGER, SetTypes::intset()}, SetTypes::intset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::intset(), LogicalType::INTEGER}, SetTypes::intset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::intset(), SetTypes::intset()}, SetTypes::intset(), SetFunctions::Intersect_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::BIGINT, SetTypes::bigintset()}, SetTypes::bigintset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::bigintset(), LogicalType::BIGINT}, SetTypes::bigintset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::bigintset(), SetTypes::bigintset()}, SetTypes::bigintset(), SetFunctions::Intersect_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::DOUBLE, SetTypes::floatset()}, SetTypes::floatset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::floatset(), LogicalType::DOUBLE}, SetTypes::floatset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::floatset(), SetTypes::floatset()}, SetTypes::floatset(), SetFunctions::Intersect_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::VARCHAR, SetTypes::textset()}, SetTypes::textset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::textset(), LogicalType::VARCHAR}, SetTypes::textset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::textset(), SetTypes::textset()}, SetTypes::textset(), SetFunctions::Intersect_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::DATE, SetTypes::dateset()}, SetTypes::dateset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::dateset(), LogicalType::DATE}, SetTypes::dateset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::dateset(), SetTypes::dateset()}, SetTypes::dateset(), SetFunctions::Intersect_set_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {LogicalType::TIMESTAMP_TZ, SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Intersect_value_set));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::tstzset(), LogicalType::TIMESTAMP_TZ}, SetTypes::tstzset(), SetFunctions::Intersect_set_value));
duckdb::RegisterSerializedScalarFunction(loader, ScalarFunction("*", {SetTypes::tstzset(), SetTypes::tstzset()}, SetTypes::tstzset(), SetFunctions::Intersect_set_set));

Expand Down
36 changes: 32 additions & 4 deletions tools/codegen_duck_udfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -850,10 +850,15 @@ def shape_set(f):
if len(ins) == 2 and setp(ins[0]) and setp(ins[1]):
if rb == "Set" and rn.endswith("*"): return ("b_set", "LogicalType::BLOB")
if rb == "bool" and "*" not in rn: return ("b_bool", "LogicalType::BOOLEAN")
# (Set, scalar element) -> Set : setUnion/setMinus/setIntersection with an element value
# (Set, scalar element) -> Set : setUnion/setMinus/setIntersection with an element value,
# in either operand order. MobilityDB declares both — setIntersection(bigint, bigintset)
# beside setIntersection(bigintset, bigint) — and the bool-returning branch above already
# carries the pair as setsc/scset, so the Set-returning one carries it the same way rather
# than emitting one direction and silently dropping the other.
if len(ins) == 2 and rb == "Set" and rn.endswith("*"):
e1 = selem(ins[1])
e0, e1 = selem(ins[0]), selem(ins[1])
if setp(ins[0]) and e1: return ("setsc_set:" + e1, "LogicalType::BLOB")
if setp(ins[1]) and e0: return ("scset_set:" + e0, "LogicalType::BLOB")
# (Set, scalar PARAM) -> Set where arg2 is NOT a set element (degrees(floatset, bool)):
# a same-set-type return whose trailing scalar is a fixed param, name-scoped to its set
# (<elem>set_*). Distinct from the element-add setsc_set above (arg2 co-varies there).
Expand Down Expand Up @@ -914,6 +919,25 @@ def emit_set(f, kind):
f" [&](string_t a, {cpp2} a2, ValidityMask &mask, idx_t idx) -> string_t {{\n"
f" Set *s = BlobToSet(a);\n Set *r = {name}(s, {marsh});\n free(s);\n"
f" return SetToBlobN(result, r, mask, idx);\n }});\n}}\n")
if kind.startswith("scset_set:"): # (scalar element, Set) -> Set
# The reversed operand order of setsc_set above, and NULL-safe for the same reason: the
# empty result arrives as a NULL pointer, which SetToBlobN carries to SQL NULL.
e = kind.split(':')[1]
if e == "text":
return (f"static void Gen_{name}(DataChunk &args, ExpressionState &, Vector &result) {{\n"
f" EnsureMeosThreadInitialized();\n"
f" BinaryExecutor::ExecuteWithNulls<string_t, string_t, string_t>(args.data[0], args.data[1], result, args.size(),\n"
f" [&](string_t a1, string_t b, ValidityMask &mask, idx_t idx) -> string_t {{\n"
f" text *t1 = MakeText(a1);\n Set *s = BlobToSet(b);\n"
f" Set *r = {name}(t1, s);\n free(t1); free(s);\n"
f" return SetToBlobN(result, r, mask, idx);\n }});\n}}\n")
_dt, cpp1, marsh = SCALAR_ARG[e]; marsh = marsh.replace("a2", "a1")
return (f"static void Gen_{name}(DataChunk &args, ExpressionState &, Vector &result) {{\n"
f" EnsureMeosThreadInitialized();\n"
f" BinaryExecutor::ExecuteWithNulls<{cpp1}, string_t, string_t>(args.data[0], args.data[1], result, args.size(),\n"
f" [&]({cpp1} a1, string_t b, ValidityMask &mask, idx_t idx) -> string_t {{\n"
f" Set *s = BlobToSet(b);\n Set *r = {name}({marsh}, s);\n free(s);\n"
f" return SetToBlobN(result, r, mask, idx);\n }});\n}}\n")
if kind.startswith("setcsc:"): # (Set, by-value scalar param) -> Set (degrees(floatset, bool))
_dt, cpp2, marsh = SCALAR_ARG[kind.split(':')[1]]
return (f"static void Gen_{name}(DataChunk &args, ExpressionState &, Vector &result) {{\n"
Expand Down Expand Up @@ -3600,17 +3624,21 @@ def gen_cpp(fns, out_path, declared=None, aliases=None):
# portable bare-name alias; normalize the doxygen `@`-escape (sqlop "\@>" -> "@>").
names = reg_names(f, sqlfn, aliases)
# element-typed predicates: accessor from the scalar element type, BOOLEAN ret.
if kind.startswith("setsc_set:"): # (Set, scalar element) -> Set (same set type)
if kind.startswith("setsc_set:") or kind.startswith("scset_set:"):
# (Set, scalar element) -> Set, and its reversed (scalar element, Set) order. The
# registered signature follows the C parameter order so it matches the emitted body.
b = kind.split(':')[1]
scd = "LogicalType::VARCHAR" if b == "text" else SCALAR_ARG[b][0]
setfirst = kind.startswith("setsc_set:")
# scalar-param: register over the catalog-declared core set types (round->floatset);
# element-add: the accessor is the element's set type (setUnion(intset)->intset).
pairs = sp if sp is not None else [(ELEM_TO_SET[b], ELEM_TO_SET[b], None)]
dflt = next((d for *_, d in pairs if d is not None), None)
for acc, rett, _d in pairs:
sig = f"{{{acc}, {scd}}}" if setfirst else f"{{{scd}, {acc}}}"
for nm in names:
set_specific_regs.append(f' RegisterSerializedScalarFunction(loader, ScalarFunction('
f'"{reg_name(nm, f)}", {{{acc}, {scd}}}, {rett}, Gen_{fn}));')
f'"{reg_name(nm, f)}", {sig}, {rett}, Gen_{fn}));')
# A SQL-optional trailing param (round's precision DEFAULT 0) is callable at the
# shorter arity; emit the (Set)->Set overload with the catalog default substituted.
if dflt is not None:
Expand Down
Loading