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
84 changes: 42 additions & 42 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -340,47 +340,47 @@ set(DUCKDB_SRC_FILES
src/duckdb/third_party/zstd/dict/divsufsort.cpp
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/lambda_functions.cpp
src/duckdb/extension/core_functions/function_list.cpp
src/duckdb/extension/core_functions/core_functions_extension.cpp
src/duckdb/ub_extension_core_functions_scalar_bit.cpp
src/duckdb/ub_extension_core_functions_aggregate_nested.cpp
src/duckdb/ub_extension_core_functions_aggregate_holistic.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_scalar_string.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_map.cpp
src/duckdb/ub_extension_core_functions_scalar_array.cpp
src/duckdb/ub_extension_core_functions_scalar_bit.cpp
src/duckdb/ub_extension_core_functions_scalar_union.cpp
src/duckdb/ub_extension_core_functions_scalar_debug.cpp
src/duckdb/ub_extension_core_functions_scalar_math.cpp
src/duckdb/ub_extension_core_functions_scalar_array.cpp
src/duckdb/ub_extension_core_functions_scalar_list.cpp
src/duckdb/ub_extension_core_functions_scalar_date.cpp
src/duckdb/ub_extension_core_functions_scalar_random.cpp
src/duckdb/ub_extension_core_functions_scalar_generic.cpp
src/duckdb/ub_extension_core_functions_scalar_struct.cpp
src/duckdb/ub_extension_core_functions_scalar_map.cpp
src/duckdb/ub_extension_core_functions_scalar_string.cpp
src/duckdb/ub_extension_core_functions_scalar_enum.cpp
src/duckdb/ub_extension_core_functions_scalar_random.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_scalar_math.cpp
src/duckdb/ub_extension_core_functions_scalar_operators.cpp
src/duckdb/ub_extension_core_functions_aggregate_nested.cpp
src/duckdb/ub_extension_core_functions_aggregate_holistic.cpp
src/duckdb/ub_extension_core_functions_aggregate_regression.cpp
src/duckdb/ub_extension_core_functions_aggregate_distributive.cpp
src/duckdb/ub_extension_core_functions_aggregate_algebraic.cpp
src/duckdb/extension/parquet/parquet_reader.cpp
src/duckdb/extension/parquet/parquet_multi_file_info.cpp
src/duckdb/extension/parquet/column_writer.cpp
src/duckdb/extension/parquet/parquet_timestamp.cpp
src/duckdb/extension/parquet/parquet_float16.cpp
src/duckdb/extension/parquet/geo_parquet.cpp
src/duckdb/ub_extension_core_functions_scalar_generic.cpp
src/duckdb/extension/parquet/parquet_extension.cpp
src/duckdb/extension/parquet/parquet_file_metadata_cache.cpp
src/duckdb/extension/parquet/serialize_parquet.cpp
src/duckdb/extension/parquet/parquet_metadata.cpp
src/duckdb/extension/parquet/parquet_crypto.cpp
src/duckdb/extension/parquet/parquet_float16.cpp
src/duckdb/extension/parquet/parquet_writer.cpp
src/duckdb/extension/parquet/parquet_file_metadata_cache.cpp
src/duckdb/extension/parquet/parquet_statistics.cpp
src/duckdb/extension/parquet/parquet_metadata.cpp
src/duckdb/extension/parquet/serialize_parquet.cpp
src/duckdb/extension/parquet/zstd_file_system.cpp
src/duckdb/extension/parquet/column_reader.cpp
src/duckdb/extension/parquet/parquet_reader.cpp
src/duckdb/extension/parquet/column_writer.cpp
src/duckdb/extension/parquet/geo_parquet.cpp
src/duckdb/extension/parquet/parquet_timestamp.cpp
src/duckdb/extension/parquet/parquet_multi_file_info.cpp
src/duckdb/extension/parquet/zstd_file_system.cpp
src/duckdb/ub_extension_parquet_decoder.cpp
src/duckdb/ub_extension_parquet_reader.cpp
src/duckdb/ub_extension_parquet_writer.cpp
src/duckdb/ub_extension_parquet_reader.cpp
src/duckdb/third_party/parquet/parquet_types.cpp
src/duckdb/third_party/thrift/thrift/protocol/TProtocol.cpp
src/duckdb/third_party/thrift/thrift/transport/TTransportException.cpp
Expand Down Expand Up @@ -419,32 +419,32 @@ 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-datefunc.cpp
src/duckdb/extension/icu/./icu-list-range.cpp
src/duckdb/extension/icu/./icu-datetrunc.cpp
src/duckdb/extension/icu/./icu-makedate.cpp
src/duckdb/extension/icu/./icu-timebucket.cpp
src/duckdb/extension/icu/./icu_extension.cpp
src/duckdb/extension/icu/./icu-current.cpp
src/duckdb/extension/icu/./icu-datepart.cpp
src/duckdb/extension/icu/./icu-datesub.cpp
src/duckdb/extension/icu/./icu-table-range.cpp
src/duckdb/extension/icu/./icu-dateadd.cpp
src/duckdb/extension/icu/./icu_extension.cpp
src/duckdb/extension/icu/./icu-list-range.cpp
src/duckdb/extension/icu/./icu-strptime.cpp
src/duckdb/extension/icu/./icu-dateadd.cpp
src/duckdb/extension/icu/./icu-table-range.cpp
src/duckdb/extension/icu/./icu-current.cpp
src/duckdb/extension/icu/./icu-timebucket.cpp
src/duckdb/extension/icu/./icu-timezone.cpp
src/duckdb/extension/icu/./icu-datepart.cpp
src/duckdb/extension/icu/./icu-datefunc.cpp
src/duckdb/extension/icu/./icu-makedate.cpp
src/duckdb/extension/icu/./icu-datetrunc.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_serializer.cpp
src/duckdb/extension/json/json_multi_file_info.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_multi_file_info.cpp
src/duckdb/extension/json/json_reader.cpp
src/duckdb/extension/json/json_serializer.cpp
src/duckdb/extension/json/json_common.cpp
src/duckdb/extension/json/json_functions.cpp
src/duckdb/extension/json/json_deserializer.cpp
src/duckdb/extension/json/serialize_json.cpp
src/duckdb/extension/json/json_scan.cpp
src/duckdb/extension/json/json_extension.cpp
src/duckdb/extension/json/json_deserializer.cpp
src/duckdb/ub_extension_json_json_functions.cpp)

set(JEMALLOC_SRC_FILES
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ struct TimeTZSortKeyFun {
static constexpr const char *Name = "timetz_byte_comparable";
static constexpr const char *Parameters = "time_tz";
static constexpr const char *Description = "Converts a TIME WITH TIME ZONE to an integer sort key";
static constexpr const char *Example = "timetz_byte_comparable('18:18:16.21-07:00'::TIME_TZ)";
static constexpr const char *Example = "timetz_byte_comparable('18:18:16.21-07:00'::TIMETZ)";
static constexpr const char *Categories = "";

static ScalarFunction GetFunction();
Expand Down
4 changes: 2 additions & 2 deletions src/duckdb/extension/core_functions/lambda_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -229,15 +229,15 @@ void ListLambdaBindData::Serialize(Serializer &serializer, const optional_ptr<Fu
serializer.WriteProperty(100, "return_type", bind_data.return_type);
serializer.WritePropertyWithDefault(101, "lambda_expr", bind_data.lambda_expr, unique_ptr<Expression>());
serializer.WriteProperty(102, "has_index", bind_data.has_index);
serializer.WriteProperty(103, "has_initial", bind_data.has_initial);
serializer.WritePropertyWithDefault<bool>(103, "has_initial", bind_data.has_initial, false);
}

unique_ptr<FunctionData> ListLambdaBindData::Deserialize(Deserializer &deserializer, ScalarFunction &) {
auto return_type = deserializer.ReadProperty<LogicalType>(100, "return_type");
auto lambda_expr = deserializer.ReadPropertyWithExplicitDefault<unique_ptr<Expression>>(101, "lambda_expr",
unique_ptr<Expression>());
auto has_index = deserializer.ReadProperty<bool>(102, "has_index");
auto has_initial = deserializer.ReadProperty<bool>(103, "has_initial");
auto has_initial = deserializer.ReadPropertyWithExplicitDefault<bool>(103, "has_initial", false);
return make_uniq<ListLambdaBindData>(return_type, std::move(lambda_expr), has_index, has_initial);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,18 @@ namespace duckdb {
static unique_ptr<FunctionData> ArrayGenericBinaryBind(ClientContext &context, ScalarFunction &bound_function,
vector<unique_ptr<Expression>> &arguments) {

const auto lhs_is_param = arguments[0]->HasParameter();
const auto rhs_is_param = arguments[1]->HasParameter();

if (lhs_is_param && rhs_is_param) {
throw ParameterNotResolvedException();
}

const auto &lhs_type = arguments[0]->return_type;
const auto &rhs_type = arguments[1]->return_type;

bound_function.arguments[0] = lhs_is_param ? rhs_type : lhs_type;
bound_function.arguments[1] = rhs_is_param ? lhs_type : rhs_type;
if (lhs_type.IsUnknown() && rhs_type.IsUnknown()) {
bound_function.arguments[0] = rhs_type;
bound_function.arguments[1] = lhs_type;
bound_function.return_type = LogicalType::UNKNOWN;
return nullptr;
}

bound_function.arguments[0] = lhs_type.IsUnknown() ? rhs_type : lhs_type;
bound_function.arguments[1] = rhs_type.IsUnknown() ? lhs_type : rhs_type;

if (bound_function.arguments[0].id() != LogicalTypeId::ARRAY ||
bound_function.arguments[1].id() != LogicalTypeId::ARRAY) {
Expand Down
12 changes: 6 additions & 6 deletions src/duckdb/extension/core_functions/scalar/list/flatten.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,9 @@ static unique_ptr<FunctionData> ListFlattenBind(ClientContext &context, ScalarFu

auto &input_type = arguments[0]->return_type;
bound_function.arguments[0] = input_type;
if (input_type.id() == LogicalTypeId::UNKNOWN) {
bound_function.arguments[0] = LogicalType(LogicalTypeId::UNKNOWN);
bound_function.return_type = LogicalType(LogicalTypeId::SQLNULL);
if (input_type.IsUnknown()) {
bound_function.arguments[0] = LogicalType::UNKNOWN;
bound_function.return_type = LogicalType::UNKNOWN;
return nullptr;
}
D_ASSERT(input_type.id() == LogicalTypeId::LIST);
Expand All @@ -174,9 +174,9 @@ static unique_ptr<FunctionData> ListFlattenBind(ClientContext &context, ScalarFu
bound_function.return_type = input_type;
return make_uniq<VariableReturnBindData>(bound_function.return_type);
}
if (child_type.id() == LogicalTypeId::UNKNOWN) {
bound_function.arguments[0] = LogicalType(LogicalTypeId::UNKNOWN);
bound_function.return_type = LogicalType(LogicalTypeId::SQLNULL);
if (child_type.IsUnknown()) {
bound_function.arguments[0] = LogicalType::UNKNOWN;
bound_function.return_type = LogicalType::UNKNOWN;
return nullptr;
}
D_ASSERT(child_type.id() == LogicalTypeId::LIST);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,29 +12,29 @@ static unique_ptr<FunctionData> ListHasAnyOrAllBind(ClientContext &context, Scal
arguments[0] = BoundCastExpression::AddArrayCastToList(context, std::move(arguments[0]));
arguments[1] = BoundCastExpression::AddArrayCastToList(context, std::move(arguments[1]));

const auto lhs_is_param = arguments[0]->HasParameter();
const auto rhs_is_param = arguments[1]->HasParameter();
const auto &lhs_type = arguments[0]->return_type;
const auto &rhs_type = arguments[1]->return_type;

if (lhs_is_param && rhs_is_param) {
throw ParameterNotResolvedException();
if (lhs_type.IsUnknown() && rhs_type.IsUnknown()) {
bound_function.arguments[0] = rhs_type;
bound_function.arguments[1] = lhs_type;
bound_function.return_type = LogicalType::UNKNOWN;
return nullptr;
}

const auto &lhs_list = arguments[0]->return_type;
const auto &rhs_list = arguments[1]->return_type;
// LHS and RHS must have the same input type.
// Thus, we can proceed binding, even if we only know the type of one of the arguments.

if (lhs_is_param) {
bound_function.arguments[0] = rhs_list;
bound_function.arguments[1] = rhs_list;
return nullptr;
}
if (rhs_is_param) {
bound_function.arguments[0] = lhs_list;
bound_function.arguments[1] = lhs_list;
if (lhs_type.IsUnknown() || rhs_type.IsUnknown()) {
bound_function.arguments[0] = lhs_type.IsUnknown() ? rhs_type : lhs_type;
bound_function.arguments[1] = rhs_type.IsUnknown() ? lhs_type : rhs_type;
return nullptr;
}

bound_function.arguments[0] = lhs_list;
bound_function.arguments[1] = rhs_list;
// Ensure the lists have the same child type, else throw.

bound_function.arguments[0] = lhs_type;
bound_function.arguments[1] = rhs_type;

const auto &lhs_child = ListType::GetChildType(bound_function.arguments[0]);
const auto &rhs_child = ListType::GetChildType(bound_function.arguments[1]);
Expand Down
73 changes: 31 additions & 42 deletions src/duckdb/extension/json/include/json_multi_file_info.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,48 +18,37 @@ class JSONFileReaderOptions : public BaseFileReaderOptions {
JSONReaderOptions options;
};

struct JSONMultiFileInfo {
static unique_ptr<BaseFileReaderOptions> InitializeOptions(ClientContext &context,
optional_ptr<TableFunctionInfo> info);
static bool ParseCopyOption(ClientContext &context, const string &key, const vector<Value> &values,
BaseFileReaderOptions &options, vector<string> &expected_names,
vector<LogicalType> &expected_types);
static bool ParseOption(ClientContext &context, const string &key, const Value &val, MultiFileOptions &file_options,
BaseFileReaderOptions &options);
static void FinalizeCopyBind(ClientContext &context, BaseFileReaderOptions &options,
const vector<string> &expected_names, const vector<LogicalType> &expected_types);
static unique_ptr<TableFunctionData> InitializeBindData(MultiFileBindData &multi_file_data,
unique_ptr<BaseFileReaderOptions> options);
static void BindReader(ClientContext &context, vector<LogicalType> &return_types, vector<string> &names,
MultiFileBindData &bind_data);
static void FinalizeBindData(MultiFileBindData &multi_file_data);
static void GetBindInfo(const TableFunctionData &bind_data, BindInfo &info);
static optional_idx MaxThreads(const MultiFileBindData &bind_data, const MultiFileGlobalState &global_state,
FileExpandResult expand_result);
static unique_ptr<GlobalTableFunctionState>
InitializeGlobalState(ClientContext &context, MultiFileBindData &bind_data, MultiFileGlobalState &global_state);
static unique_ptr<LocalTableFunctionState> InitializeLocalState(ExecutionContext &context,
GlobalTableFunctionState &global_state);
static shared_ptr<BaseFileReader> CreateReader(ClientContext &context, GlobalTableFunctionState &gstate,
BaseUnionData &union_data, const MultiFileBindData &bind_data_p);
static shared_ptr<BaseFileReader> CreateReader(ClientContext &context, GlobalTableFunctionState &gstate,
const OpenFileInfo &file, idx_t file_idx,
const MultiFileBindData &bind_data);
static shared_ptr<BaseFileReader> CreateReader(ClientContext &context, const OpenFileInfo &file,
JSONReaderOptions &options, const MultiFileOptions &file_options);
static shared_ptr<BaseUnionData> GetUnionData(shared_ptr<BaseFileReader> scan_p, idx_t file_idx);
static void FinalizeReader(ClientContext &context, BaseFileReader &reader, GlobalTableFunctionState &gstate_p);
static bool TryInitializeScan(ClientContext &context, shared_ptr<BaseFileReader> &reader,
GlobalTableFunctionState &gstate, LocalTableFunctionState &lstate);
static void Scan(ClientContext &context, BaseFileReader &reader, GlobalTableFunctionState &global_state,
LocalTableFunctionState &local_state, DataChunk &chunk);
static void FinishFile(ClientContext &context, GlobalTableFunctionState &global_state, BaseFileReader &reader);
static void FinishReading(ClientContext &context, GlobalTableFunctionState &global_state,
LocalTableFunctionState &local_state);
static unique_ptr<NodeStatistics> GetCardinality(const MultiFileBindData &bind_data, idx_t file_count);
static unique_ptr<BaseStatistics> GetStatistics(ClientContext &context, BaseFileReader &reader, const string &name);
static double GetProgressInFile(ClientContext &context, const BaseFileReader &reader);
static void GetVirtualColumns(ClientContext &context, MultiFileBindData &bind_data, virtual_column_map_t &result);
struct JSONMultiFileInfo : MultiFileReaderInterface {
static unique_ptr<MultiFileReaderInterface> InitializeInterface(ClientContext &context, MultiFileReader &reader,
MultiFileList &file_list);

unique_ptr<BaseFileReaderOptions> InitializeOptions(ClientContext &context,
optional_ptr<TableFunctionInfo> info) override;
bool ParseCopyOption(ClientContext &context, const string &key, const vector<Value> &values,
BaseFileReaderOptions &options, vector<string> &expected_names,
vector<LogicalType> &expected_types) override;
bool ParseOption(ClientContext &context, const string &key, const Value &val, MultiFileOptions &file_options,
BaseFileReaderOptions &options) override;
void FinalizeCopyBind(ClientContext &context, BaseFileReaderOptions &options, const vector<string> &expected_names,
const vector<LogicalType> &expected_types) override;
unique_ptr<TableFunctionData> InitializeBindData(MultiFileBindData &multi_file_data,
unique_ptr<BaseFileReaderOptions> options) override;
void BindReader(ClientContext &context, vector<LogicalType> &return_types, vector<string> &names,
MultiFileBindData &bind_data) override;
optional_idx MaxThreads(const MultiFileBindData &bind_data, const MultiFileGlobalState &global_state,
FileExpandResult expand_result) override;
unique_ptr<GlobalTableFunctionState> InitializeGlobalState(ClientContext &context, MultiFileBindData &bind_data,
MultiFileGlobalState &global_state) override;
unique_ptr<LocalTableFunctionState> InitializeLocalState(ExecutionContext &context,
GlobalTableFunctionState &global_state) override;
shared_ptr<BaseFileReader> CreateReader(ClientContext &context, GlobalTableFunctionState &gstate,
BaseUnionData &union_data, const MultiFileBindData &bind_data_p) override;
shared_ptr<BaseFileReader> CreateReader(ClientContext &context, GlobalTableFunctionState &gstate,
const OpenFileInfo &file, idx_t file_idx,
const MultiFileBindData &bind_data) override;
void FinishReading(ClientContext &context, GlobalTableFunctionState &global_state,
LocalTableFunctionState &local_state) override;
unique_ptr<NodeStatistics> GetCardinality(const MultiFileBindData &bind_data, idx_t file_count) override;
};

} // namespace duckdb
Loading