Skip to content
Merged
  •  
  •  
  •  
73 changes: 37 additions & 36 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ set(DUCKDB_SRC_FILES
src/duckdb/ub_src_transaction.cpp
src/duckdb/src/verification/copied_statement_verifier.cpp
src/duckdb/src/verification/deserialized_statement_verifier.cpp
src/duckdb/src/verification/explain_statement_verifier.cpp
src/duckdb/src/verification/external_statement_verifier.cpp
src/duckdb/src/verification/fetch_row_verifier.cpp
src/duckdb/src/verification/no_operator_caching_verifier.cpp
Expand Down Expand Up @@ -345,46 +346,46 @@ set(DUCKDB_SRC_FILES
src/duckdb/third_party/zstd/dict/fastcover.cpp
src/duckdb/third_party/zstd/dict/zdict.cpp
src/duckdb/extension/core_functions/core_functions_extension.cpp
src/duckdb/extension/core_functions/function_list.cpp
src/duckdb/extension/core_functions/lambda_functions.cpp
src/duckdb/ub_extension_core_functions_scalar_map.cpp
src/duckdb/extension/core_functions/function_list.cpp
src/duckdb/ub_extension_core_functions_scalar_date.cpp
src/duckdb/ub_extension_core_functions_scalar_operators.cpp
src/duckdb/ub_extension_core_functions_scalar_struct.cpp
src/duckdb/ub_extension_core_functions_scalar_list.cpp
src/duckdb/ub_extension_core_functions_scalar_array.cpp
src/duckdb/ub_extension_core_functions_scalar_random.cpp
src/duckdb/ub_extension_core_functions_scalar_string.cpp
src/duckdb/ub_extension_core_functions_scalar_blob.cpp
src/duckdb/ub_extension_core_functions_scalar_union.cpp
src/duckdb/ub_extension_core_functions_scalar_bit.cpp
src/duckdb/ub_extension_core_functions_scalar_array.cpp
src/duckdb/ub_extension_core_functions_scalar_enum.cpp
src/duckdb/ub_extension_core_functions_scalar_math.cpp
src/duckdb/ub_extension_core_functions_scalar_string.cpp
src/duckdb/ub_extension_core_functions_scalar_union.cpp
src/duckdb/ub_extension_core_functions_scalar_map.cpp
src/duckdb/ub_extension_core_functions_scalar_debug.cpp
src/duckdb/ub_extension_core_functions_scalar_enum.cpp
src/duckdb/ub_extension_core_functions_scalar_blob.cpp
src/duckdb/ub_extension_core_functions_scalar_struct.cpp
src/duckdb/ub_extension_core_functions_scalar_generic.cpp
src/duckdb/ub_extension_core_functions_scalar_date.cpp
src/duckdb/ub_extension_core_functions_scalar_list.cpp
src/duckdb/ub_extension_core_functions_aggregate_nested.cpp
src/duckdb/ub_extension_core_functions_aggregate_regression.cpp
src/duckdb/ub_extension_core_functions_aggregate_algebraic.cpp
src/duckdb/ub_extension_core_functions_aggregate_distributive.cpp
src/duckdb/ub_extension_core_functions_aggregate_holistic.cpp
src/duckdb/extension/parquet/parquet_writer.cpp
src/duckdb/ub_extension_core_functions_aggregate_distributive.cpp
src/duckdb/extension/parquet/parquet_metadata.cpp
src/duckdb/extension/parquet/serialize_parquet.cpp
src/duckdb/extension/parquet/geo_parquet.cpp
src/duckdb/extension/parquet/column_reader.cpp
src/duckdb/extension/parquet/parquet_float16.cpp
src/duckdb/extension/parquet/parquet_metadata.cpp
src/duckdb/extension/parquet/parquet_reader.cpp
src/duckdb/extension/parquet/zstd_file_system.cpp
src/duckdb/extension/parquet/parquet_timestamp.cpp
src/duckdb/extension/parquet/parquet_statistics.cpp
src/duckdb/extension/parquet/parquet_file_metadata_cache.cpp
src/duckdb/extension/parquet/parquet_crypto.cpp
src/duckdb/extension/parquet/column_reader.cpp
src/duckdb/extension/parquet/parquet_writer.cpp
src/duckdb/extension/parquet/parquet_multi_file_info.cpp
src/duckdb/extension/parquet/parquet_reader.cpp
src/duckdb/extension/parquet/column_writer.cpp
src/duckdb/extension/parquet/parquet_timestamp.cpp
src/duckdb/extension/parquet/zstd_file_system.cpp
src/duckdb/extension/parquet/parquet_extension.cpp
src/duckdb/extension/parquet/parquet_crypto.cpp
src/duckdb/extension/parquet/parquet_file_metadata_cache.cpp
src/duckdb/extension/parquet/serialize_parquet.cpp
src/duckdb/extension/parquet/parquet_statistics.cpp
src/duckdb/ub_extension_parquet_decoder.cpp
src/duckdb/ub_extension_parquet_reader.cpp
src/duckdb/ub_extension_parquet_reader_variant.cpp
src/duckdb/ub_extension_parquet_decoder.cpp
src/duckdb/ub_extension_parquet_writer.cpp
src/duckdb/third_party/parquet/parquet_types.cpp
src/duckdb/third_party/thrift/thrift/protocol/TProtocol.cpp
Expand Down Expand Up @@ -424,31 +425,31 @@ set(DUCKDB_SRC_FILES
src/duckdb/third_party/brotli/enc/metablock.cpp
src/duckdb/third_party/brotli/enc/static_dict.cpp
src/duckdb/third_party/brotli/enc/utf8_util.cpp
src/duckdb/extension/icu/./icu-list-range.cpp
src/duckdb/extension/icu/./icu-table-range.cpp
src/duckdb/extension/icu/./icu_extension.cpp
src/duckdb/extension/icu/./icu-strptime.cpp
src/duckdb/extension/icu/./icu-current.cpp
src/duckdb/extension/icu/./icu-makedate.cpp
src/duckdb/extension/icu/./icu-datetrunc.cpp
src/duckdb/extension/icu/./icu-datesub.cpp
src/duckdb/extension/icu/./icu-timezone.cpp
src/duckdb/extension/icu/./icu-timebucket.cpp
src/duckdb/extension/icu/./icu-table-range.cpp
src/duckdb/extension/icu/./icu-datefunc.cpp
src/duckdb/extension/icu/./icu-datepart.cpp
src/duckdb/extension/icu/./icu-datetrunc.cpp
src/duckdb/extension/icu/./icu-dateadd.cpp
src/duckdb/extension/icu/./icu-datepart.cpp
src/duckdb/extension/icu/./icu-timezone.cpp
src/duckdb/extension/icu/./icu-current.cpp
src/duckdb/extension/icu/./icu-strptime.cpp
src/duckdb/extension/icu/./icu-makedate.cpp
src/duckdb/extension/icu/./icu-timebucket.cpp
src/duckdb/extension/icu/./icu-list-range.cpp
src/duckdb/ub_extension_icu_third_party_icu_common.cpp
src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp
src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp
src/duckdb/extension/json/json_common.cpp
src/duckdb/extension/json/json_extension.cpp
src/duckdb/extension/json/json_multi_file_info.cpp
src/duckdb/extension/json/json_scan.cpp
src/duckdb/extension/json/json_reader.cpp
src/duckdb/extension/json/serialize_json.cpp
src/duckdb/extension/json/json_extension.cpp
src/duckdb/extension/json/json_enums.cpp
src/duckdb/extension/json/json_scan.cpp
src/duckdb/extension/json/json_functions.cpp
src/duckdb/extension/json/json_reader.cpp
src/duckdb/extension/json/json_common.cpp
src/duckdb/extension/json/json_deserializer.cpp
src/duckdb/extension/json/serialize_json.cpp
src/duckdb/extension/json/json_serializer.cpp
src/duckdb/ub_extension_json_json_functions.cpp)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ unique_ptr<FunctionData> BindDecimalArgMinMax(ClientContext &context, AggregateF
break;
}

auto cast_cost = CastFunctionSet::Get(context).ImplicitCastCost(by_type, by_types[i]);
auto cast_cost = CastFunctionSet::ImplicitCastCost(context, by_type, by_types[i]);
if (cast_cost < 0) {
continue;
}
Expand Down
60 changes: 60 additions & 0 deletions src/duckdb/extension/core_functions/aggregate/distributive/sum.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "core_functions/aggregate/distributive_functions.hpp"
#include "core_functions/aggregate/sum_helpers.hpp"
#include "duckdb/common/exception.hpp"
#include "duckdb/common/bignum.hpp"
#include "duckdb/common/types/decimal.hpp"
#include "duckdb/planner/expression/bound_aggregate_expression.hpp"
#include "duckdb/common/serializer/deserializer.hpp"
Expand Down Expand Up @@ -211,6 +212,63 @@ unique_ptr<FunctionData> BindDecimalSum(ClientContext &context, AggregateFunctio
return nullptr;
}

struct BignumState {
bool is_set;
BignumIntermediate value;
};

struct BignumOperation {
template <class STATE>
static void Initialize(STATE &state) {
state.is_set = false;
}

template <class INPUT_TYPE, class STATE, class OP>
static void ConstantOperation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input,
idx_t count) {
for (idx_t i = 0; i < count; i++) {
Operation<INPUT_TYPE, STATE, OP>(state, input, unary_input);
}
}

template <class INPUT_TYPE, class STATE, class OP>
static void Operation(STATE &state, const INPUT_TYPE &input, AggregateUnaryInput &unary_input) {
if (!state.is_set) {
state.is_set = true;
state.value.Initialize(unary_input.input.allocator);
}
BignumIntermediate rhs(input);
state.value.AddInPlace(unary_input.input.allocator, rhs);
}

template <class STATE, class OP>
static void Combine(const STATE &source, STATE &target, AggregateInputData &input) {
if (!source.is_set) {
return;
}
if (!target.is_set) {
target.value = source.value;
target.is_set = true;
return;
}
target.value.AddInPlace(input.allocator, source.value);
target.is_set = true;
}

template <class TARGET_TYPE, class STATE>
static void Finalize(STATE &state, TARGET_TYPE &target, AggregateFinalizeData &finalize_data) {
if (!state.is_set) {
finalize_data.ReturnNull();
} else {
target = state.value.ToBignum(finalize_data.input.allocator);
}
}

static bool IgnoreNull() {
return true;
}
};

} // namespace

AggregateFunctionSet SumFun::GetFunctions() {
Expand All @@ -226,6 +284,8 @@ AggregateFunctionSet SumFun::GetFunctions() {
sum.AddFunction(GetSumAggregate(PhysicalType::INT128));
sum.AddFunction(AggregateFunction::UnaryAggregate<SumState<double>, double, double, NumericSumOperation>(
LogicalType::DOUBLE, LogicalType::DOUBLE));
sum.AddFunction(AggregateFunction::UnaryAggregate<BignumState, bignum_t, bignum_t, BignumOperation>(
LogicalType::BIGNUM, LogicalType::BIGNUM));
return sum;
}

Expand Down
16 changes: 4 additions & 12 deletions src/duckdb/extension/core_functions/aggregate/nested/list.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -182,14 +182,6 @@ void ListCombineFunction(Vector &states_vector, Vector &combined, AggregateInput

unique_ptr<FunctionData> ListBindFunction(ClientContext &context, AggregateFunction &function,
vector<unique_ptr<Expression>> &arguments) {
D_ASSERT(arguments.size() == 1);
D_ASSERT(function.arguments.size() == 1);

if (arguments[0]->return_type.id() == LogicalTypeId::UNKNOWN) {
function.arguments[0] = LogicalTypeId::UNKNOWN;
function.return_type = LogicalType::SQLNULL;
return nullptr;
}

function.return_type = LogicalType::LIST(arguments[0]->return_type);
return make_uniq<ListBindData>(function.return_type);
Expand All @@ -198,10 +190,10 @@ unique_ptr<FunctionData> ListBindFunction(ClientContext &context, AggregateFunct
} // namespace

AggregateFunction ListFun::GetFunction() {
auto func =
AggregateFunction({LogicalType::ANY}, LogicalTypeId::LIST, AggregateFunction::StateSize<ListAggState>,
AggregateFunction::StateInitialize<ListAggState, ListFunction>, ListUpdateFunction,
ListCombineFunction, ListFinalize, nullptr, ListBindFunction, nullptr, nullptr, nullptr);
auto func = AggregateFunction(
{LogicalType::TEMPLATE("T")}, LogicalType::LIST(LogicalType::TEMPLATE("T")),
AggregateFunction::StateSize<ListAggState>, AggregateFunction::StateInitialize<ListAggState, ListFunction>,
ListUpdateFunction, ListCombineFunction, ListFinalize, nullptr, ListBindFunction, nullptr, nullptr, nullptr);

return func;
}
Expand Down
6 changes: 3 additions & 3 deletions src/duckdb/extension/core_functions/function_list.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -243,14 +243,14 @@ static const StaticFunctionDefinition core_functions[] = {
DUCKDB_SCALAR_FUNCTION_SET(ListInnerProductFun),
DUCKDB_SCALAR_FUNCTION_SET_ALIAS(ListNegativeDotProductFun),
DUCKDB_SCALAR_FUNCTION_SET(ListNegativeInnerProductFun),
DUCKDB_SCALAR_FUNCTION_ALIAS(ListPackFun),
DUCKDB_SCALAR_FUNCTION_SET_ALIAS(ListPackFun),
DUCKDB_SCALAR_FUNCTION_SET(ListReduceFun),
DUCKDB_SCALAR_FUNCTION_SET(ListReverseSortFun),
DUCKDB_SCALAR_FUNCTION_SET(ListSliceFun),
DUCKDB_SCALAR_FUNCTION_SET(ListSortFun),
DUCKDB_SCALAR_FUNCTION(ListTransformFun),
DUCKDB_SCALAR_FUNCTION(ListUniqueFun),
DUCKDB_SCALAR_FUNCTION(ListValueFun),
DUCKDB_SCALAR_FUNCTION_SET(ListValueFun),
DUCKDB_AGGREGATE_FUNCTION_SET_ALIAS(ListaggFun),
DUCKDB_SCALAR_FUNCTION(LnFun),
DUCKDB_SCALAR_FUNCTION_SET(LogFun),
Expand All @@ -264,7 +264,7 @@ static const StaticFunctionDefinition core_functions[] = {
DUCKDB_SCALAR_FUNCTION_SET(MakeTimestampFun),
DUCKDB_SCALAR_FUNCTION_SET(MakeTimestampMsFun),
DUCKDB_SCALAR_FUNCTION_SET(MakeTimestampNsFun),
DUCKDB_SCALAR_FUNCTION(MapFun),
DUCKDB_SCALAR_FUNCTION_SET(MapFun),
DUCKDB_SCALAR_FUNCTION(MapConcatFun),
DUCKDB_SCALAR_FUNCTION(MapEntriesFun),
DUCKDB_SCALAR_FUNCTION(MapExtractFun),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,8 @@ struct QuantileSortTree {
vector<column_t> sort_idx(1, 0);
const auto count = partition.count;

index_tree = make_uniq<WindowIndexTree>(partition.context, order_bys, sort_idx, count);
auto index_state = index_tree->GetLocalState();
index_tree = make_uniq<WindowIndexTree>(partition.context.client, order_bys, sort_idx, count);
auto index_state = index_tree->GetLocalState(partition.context);
auto &local_state = index_state->Cast<WindowIndexTreeLocalState>();

// Build the indirection array by scanning the valid indices
Expand All @@ -338,12 +338,12 @@ struct QuantileSortTree {
filter_sel[filtered++] = i;
}
}
local_state.SinkChunk(sort, row_idx, filter_sel, filtered);
local_state.Sink(partition.context, sort, row_idx, filter_sel, filtered);
} else {
local_state.SinkChunk(sort, row_idx, nullptr, 0);
local_state.Sink(partition.context, sort, row_idx, nullptr, 0);
}
}
local_state.Sort();
local_state.Finalize(partition.context);
}

inline idx_t SelectNth(const SubFrames &frames, size_t n) const {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ struct SumState {

void Initialize() {
this->isset = false;
this->value = 0;
}

void Combine(const SumState<T> &other) {
Expand Down Expand Up @@ -182,7 +183,6 @@ struct BaseSumOperation {
STATEOP::template AddValues<STATE>(state, count);
ADDOP::template AddConstant<STATE, INPUT_TYPE>(state, input, count);
}

static bool IgnoreNull() {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ struct ListValueFun {
static constexpr const char *Example = "list_value(4, 5, 6)";
static constexpr const char *Categories = "list";

static ScalarFunction GetFunction();
static ScalarFunctionSet GetFunctions();
};

struct ListPackFun {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ struct MapFun {
static constexpr const char *Example = "map(['key1', 'key2'], ['val1', 'val2'])";
static constexpr const char *Categories = "";

static ScalarFunction GetFunction();
static ScalarFunctionSet GetFunctions();
};

struct MapEntriesFun {
Expand Down
20 changes: 0 additions & 20 deletions src/duckdb/extension/core_functions/scalar/date/date_part.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1438,26 +1438,6 @@ double DatePart::JulianDayOperator::Operation(date_t input) {
return double(Date::ExtractJulianDay(input));
}

template <>
double DatePart::JulianDayOperator::Operation(interval_t input) {
throw NotImplementedException("interval units \"julian\" not recognized");
}

template <>
double DatePart::JulianDayOperator::Operation(dtime_t input) {
throw NotImplementedException("\"time\" units \"julian\" not recognized");
}

template <>
double DatePart::JulianDayOperator::Operation(dtime_ns_t input) {
return JulianDayOperator::Operation<dtime_t, double>(input.time());
}

template <>
double DatePart::JulianDayOperator::Operation(dtime_tz_t input) {
return JulianDayOperator::Operation<dtime_t, double>(input.time());
}

template <>
void DatePart::StructOperator::Operation(bigint_vec &bigint_values, double_vec &double_values, const dtime_t &input,
const idx_t idx, const part_mask_t mask) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace duckdb {
namespace {

bool CanCastImplicitly(ClientContext &context, const LogicalType &source, const LogicalType &target) {
return CastFunctionSet::Get(context).ImplicitCastCost(source, target) >= 0;
return CastFunctionSet::ImplicitCastCost(context, source, target) >= 0;
}

void CanCastImplicitlyFunction(DataChunk &args, ExpressionState &state, Vector &result) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ unique_ptr<FunctionData> CurrentSettingBind(ClientContext &context, ScalarFuncti
auto key = StringUtil::Lower(StringValue::Get(key_val));
Value val;
if (!context.TryGetCurrentSetting(key, val)) {
Catalog::AutoloadExtensionByConfigName(context, key);
auto extension_name = Catalog::AutoloadExtensionByConfigName(context, key);
// If autoloader didn't throw, the config is now available
context.TryGetCurrentSetting(key, val);
if (!context.TryGetCurrentSetting(key, val)) {
throw InternalException("Extension %s did not provide the '%s' config setting", extension_name, key);
}
}

bound_function.return_type = val.type();
Expand Down
Loading
Loading