duckdb 0.7.2-dev0.0 → 0.7.2-dev1034.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
- package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +4 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +155 -127
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/index/art/art.cpp +6 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +12 -4
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -3
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +6 -14
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +21 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +8 -8
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +55 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +1 -1
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +6 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +7 -5
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +10 -6
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +8 -5
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +10 -1
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
- package/src/duckdb/src/include/duckdb.h +50 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +105 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +31 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -4
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +63 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +19 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
- package/src/duckdb/src/storage/data_table.cpp +20 -20
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +20 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +45 -46
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +7 -8
- package/src/duckdb/src/storage/table/column_segment.cpp +13 -14
- package/src/duckdb/src/storage/table/list_column_data.cpp +41 -59
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +38 -32
- package/src/duckdb/src/storage/table/row_group_collection.cpp +94 -78
- package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
- package/src/duckdb/src/storage/table/standard_column_data.cpp +7 -6
- package/src/duckdb/src/storage/table/struct_column_data.cpp +16 -16
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +20 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
#include "duckdb/function/aggregate/sum_helpers.hpp"
|
|
3
3
|
#include "duckdb/common/exception.hpp"
|
|
4
4
|
#include "duckdb/common/types/decimal.hpp"
|
|
5
|
-
#include "duckdb/storage/statistics/numeric_statistics.hpp"
|
|
6
5
|
#include "duckdb/planner/expression/bound_aggregate_expression.hpp"
|
|
7
6
|
#include "duckdb/function/aggregate/algebraic_functions.hpp"
|
|
8
7
|
|
|
@@ -52,9 +51,6 @@ struct DoubleSumOperation : public BaseSumOperation<SumSetOperation, ADD_OPERATO
|
|
|
52
51
|
if (!state->isset) {
|
|
53
52
|
mask.SetInvalid(idx);
|
|
54
53
|
} else {
|
|
55
|
-
if (!Value::DoubleIsFinite(state->value)) {
|
|
56
|
-
throw OutOfRangeException("SUM is out of range!");
|
|
57
|
-
}
|
|
58
54
|
target[idx] = state->value;
|
|
59
55
|
}
|
|
60
56
|
}
|
|
@@ -75,30 +71,29 @@ struct HugeintSumOperation : public BaseSumOperation<SumSetOperation, RegularAdd
|
|
|
75
71
|
};
|
|
76
72
|
|
|
77
73
|
unique_ptr<BaseStatistics> SumPropagateStats(ClientContext &context, BoundAggregateExpression &expr,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if (numeric_stats.min.IsNull() || numeric_stats.max.IsNull()) {
|
|
74
|
+
AggregateStatisticsInput &input) {
|
|
75
|
+
if (input.node_stats && input.node_stats->has_max_cardinality) {
|
|
76
|
+
auto &numeric_stats = input.child_stats[0];
|
|
77
|
+
if (!NumericStats::HasMinMax(numeric_stats)) {
|
|
83
78
|
return nullptr;
|
|
84
79
|
}
|
|
85
|
-
auto internal_type = numeric_stats.
|
|
80
|
+
auto internal_type = numeric_stats.GetType().InternalType();
|
|
86
81
|
hugeint_t max_negative;
|
|
87
82
|
hugeint_t max_positive;
|
|
88
83
|
switch (internal_type) {
|
|
89
84
|
case PhysicalType::INT32:
|
|
90
|
-
max_negative = numeric_stats.
|
|
91
|
-
max_positive = numeric_stats.
|
|
85
|
+
max_negative = NumericStats::Min(numeric_stats).GetValueUnsafe<int32_t>();
|
|
86
|
+
max_positive = NumericStats::Max(numeric_stats).GetValueUnsafe<int32_t>();
|
|
92
87
|
break;
|
|
93
88
|
case PhysicalType::INT64:
|
|
94
|
-
max_negative = numeric_stats.
|
|
95
|
-
max_positive = numeric_stats.
|
|
89
|
+
max_negative = NumericStats::Min(numeric_stats).GetValueUnsafe<int64_t>();
|
|
90
|
+
max_positive = NumericStats::Max(numeric_stats).GetValueUnsafe<int64_t>();
|
|
96
91
|
break;
|
|
97
92
|
default:
|
|
98
93
|
throw InternalException("Unsupported type for propagate sum stats");
|
|
99
94
|
}
|
|
100
|
-
auto max_sum_negative = max_negative * hugeint_t(node_stats->max_cardinality);
|
|
101
|
-
auto max_sum_positive = max_positive * hugeint_t(node_stats->max_cardinality);
|
|
95
|
+
auto max_sum_negative = max_negative * hugeint_t(input.node_stats->max_cardinality);
|
|
96
|
+
auto max_sum_positive = max_positive * hugeint_t(input.node_stats->max_cardinality);
|
|
102
97
|
if (max_sum_positive >= NumericLimits<int64_t>::Maximum() ||
|
|
103
98
|
max_sum_negative <= NumericLimits<int64_t>::Minimum()) {
|
|
104
99
|
// sum can potentially exceed int64_t bounds: use hugeint sum
|
|
@@ -115,6 +110,7 @@ AggregateFunction SumFun::GetSumAggregate(PhysicalType type) {
|
|
|
115
110
|
case PhysicalType::INT16: {
|
|
116
111
|
auto function = AggregateFunction::UnaryAggregate<SumState<int64_t>, int16_t, hugeint_t, IntegerSumOperation>(
|
|
117
112
|
LogicalType::SMALLINT, LogicalType::HUGEINT);
|
|
113
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
118
114
|
return function;
|
|
119
115
|
}
|
|
120
116
|
|
|
@@ -123,6 +119,7 @@ AggregateFunction SumFun::GetSumAggregate(PhysicalType type) {
|
|
|
123
119
|
AggregateFunction::UnaryAggregate<SumState<hugeint_t>, int32_t, hugeint_t, SumToHugeintOperation>(
|
|
124
120
|
LogicalType::INTEGER, LogicalType::HUGEINT);
|
|
125
121
|
function.statistics = SumPropagateStats;
|
|
122
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
126
123
|
return function;
|
|
127
124
|
}
|
|
128
125
|
case PhysicalType::INT64: {
|
|
@@ -130,12 +127,14 @@ AggregateFunction SumFun::GetSumAggregate(PhysicalType type) {
|
|
|
130
127
|
AggregateFunction::UnaryAggregate<SumState<hugeint_t>, int64_t, hugeint_t, SumToHugeintOperation>(
|
|
131
128
|
LogicalType::BIGINT, LogicalType::HUGEINT);
|
|
132
129
|
function.statistics = SumPropagateStats;
|
|
130
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
133
131
|
return function;
|
|
134
132
|
}
|
|
135
133
|
case PhysicalType::INT128: {
|
|
136
134
|
auto function =
|
|
137
135
|
AggregateFunction::UnaryAggregate<SumState<hugeint_t>, hugeint_t, hugeint_t, HugeintSumOperation>(
|
|
138
136
|
LogicalType::HUGEINT, LogicalType::HUGEINT);
|
|
137
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
139
138
|
return function;
|
|
140
139
|
}
|
|
141
140
|
default:
|
|
@@ -149,12 +148,14 @@ AggregateFunction SumFun::GetSumAggregateNoOverflow(PhysicalType type) {
|
|
|
149
148
|
auto function = AggregateFunction::UnaryAggregate<SumState<int64_t>, int32_t, hugeint_t, IntegerSumOperation>(
|
|
150
149
|
LogicalType::INTEGER, LogicalType::HUGEINT);
|
|
151
150
|
function.name = "sum_no_overflow";
|
|
151
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
152
152
|
return function;
|
|
153
153
|
}
|
|
154
154
|
case PhysicalType::INT64: {
|
|
155
155
|
auto function = AggregateFunction::UnaryAggregate<SumState<int64_t>, int64_t, hugeint_t, IntegerSumOperation>(
|
|
156
156
|
LogicalType::BIGINT, LogicalType::HUGEINT);
|
|
157
157
|
function.name = "sum_no_overflow";
|
|
158
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
158
159
|
return function;
|
|
159
160
|
}
|
|
160
161
|
default:
|
|
@@ -169,6 +170,7 @@ unique_ptr<FunctionData> BindDecimalSum(ClientContext &context, AggregateFunctio
|
|
|
169
170
|
function.name = "sum";
|
|
170
171
|
function.arguments[0] = decimal_type;
|
|
171
172
|
function.return_type = LogicalType::DECIMAL(Decimal::MAX_WIDTH_DECIMAL, DecimalType::GetScale(decimal_type));
|
|
173
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
172
174
|
return nullptr;
|
|
173
175
|
}
|
|
174
176
|
|
|
@@ -179,6 +181,7 @@ unique_ptr<FunctionData> BindDecimalSumNoOverflow(ClientContext &context, Aggreg
|
|
|
179
181
|
function.name = "sum_no_overflow";
|
|
180
182
|
function.arguments[0] = decimal_type;
|
|
181
183
|
function.return_type = LogicalType::DECIMAL(Decimal::MAX_WIDTH_DECIMAL, DecimalType::GetScale(decimal_type));
|
|
184
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
182
185
|
return nullptr;
|
|
183
186
|
}
|
|
184
187
|
|
|
@@ -70,11 +70,14 @@ struct ApproxQuantileOperation {
|
|
|
70
70
|
|
|
71
71
|
template <class INPUT_TYPE, class STATE, class OP>
|
|
72
72
|
static void Operation(STATE *state, AggregateInputData &, INPUT_TYPE *data, ValidityMask &mask, idx_t idx) {
|
|
73
|
+
auto val = Cast::template Operation<INPUT_TYPE, SAVE_TYPE>(data[idx]);
|
|
74
|
+
if (!Value::DoubleIsFinite(val)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
73
77
|
if (!state->h) {
|
|
74
78
|
state->h = new duckdb_tdigest::TDigest(100);
|
|
75
79
|
}
|
|
76
|
-
|
|
77
|
-
state->h->add(Cast::template Operation<INPUT_TYPE, SAVE_TYPE>(data[idx]));
|
|
80
|
+
state->h->add(val);
|
|
78
81
|
state->pos++;
|
|
79
82
|
}
|
|
80
83
|
|
|
@@ -176,7 +176,7 @@ struct ModeFunction {
|
|
|
176
176
|
}
|
|
177
177
|
auto highest_frequency = state->Scan();
|
|
178
178
|
if (highest_frequency != state->frequency_map->end()) {
|
|
179
|
-
target[idx] = INPUT_TYPE(highest_frequency->first);
|
|
179
|
+
target[idx] = ASSIGN_OP::template Assign<INPUT_TYPE, INPUT_TYPE>(result, highest_frequency->first);
|
|
180
180
|
} else {
|
|
181
181
|
mask.SetInvalid(idx);
|
|
182
182
|
}
|
|
@@ -414,7 +414,7 @@ struct QuantileBindData : public FunctionData {
|
|
|
414
414
|
size_t pos = 0;
|
|
415
415
|
size_t neg = 0;
|
|
416
416
|
for (idx_t i = 0; i < quantiles_p.size(); ++i) {
|
|
417
|
-
const auto q = quantiles_p[i];
|
|
417
|
+
const auto &q = quantiles_p[i];
|
|
418
418
|
pos += (q > 0);
|
|
419
419
|
neg += (q < 0);
|
|
420
420
|
quantiles.emplace_back(QuantileAbs(q));
|
|
@@ -795,6 +795,7 @@ AggregateFunction GetTypedDiscreteQuantileListAggregateFunction(const LogicalTyp
|
|
|
795
795
|
using STATE = QuantileState<SAVE_TYPE>;
|
|
796
796
|
using OP = QuantileListOperation<INPUT_TYPE, true>;
|
|
797
797
|
auto fun = QuantileListAggregate<STATE, INPUT_TYPE, list_entry_t, OP>(type, type);
|
|
798
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
798
799
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, list_entry_t, OP>;
|
|
799
800
|
return fun;
|
|
800
801
|
}
|
|
@@ -851,6 +852,7 @@ AggregateFunction GetTypedContinuousQuantileAggregateFunction(const LogicalType
|
|
|
851
852
|
using STATE = QuantileState<INPUT_TYPE>;
|
|
852
853
|
using OP = QuantileScalarOperation<false>;
|
|
853
854
|
auto fun = AggregateFunction::UnaryAggregateDestructor<STATE, INPUT_TYPE, TARGET_TYPE, OP>(input_type, target_type);
|
|
855
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
854
856
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, TARGET_TYPE, OP>;
|
|
855
857
|
return fun;
|
|
856
858
|
}
|
|
@@ -904,6 +906,7 @@ AggregateFunction GetTypedContinuousQuantileListAggregateFunction(const LogicalT
|
|
|
904
906
|
using STATE = QuantileState<INPUT_TYPE>;
|
|
905
907
|
using OP = QuantileListOperation<CHILD_TYPE, false>;
|
|
906
908
|
auto fun = QuantileListAggregate<STATE, INPUT_TYPE, list_entry_t, OP>(input_type, result_type);
|
|
909
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
907
910
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, list_entry_t, OP>;
|
|
908
911
|
return fun;
|
|
909
912
|
}
|
|
@@ -1129,6 +1132,7 @@ AggregateFunction GetTypedMedianAbsoluteDeviationAggregateFunction(const Logical
|
|
|
1129
1132
|
using STATE = QuantileState<INPUT_TYPE>;
|
|
1130
1133
|
using OP = MedianAbsoluteDeviationOperation<MEDIAN_TYPE>;
|
|
1131
1134
|
auto fun = AggregateFunction::UnaryAggregateDestructor<STATE, INPUT_TYPE, TARGET_TYPE, OP>(input_type, target_type);
|
|
1135
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1132
1136
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, TARGET_TYPE, OP>;
|
|
1133
1137
|
return fun;
|
|
1134
1138
|
}
|
|
@@ -1198,6 +1202,7 @@ unique_ptr<FunctionData> BindMedianDecimal(ClientContext &context, AggregateFunc
|
|
|
1198
1202
|
function.name = "median";
|
|
1199
1203
|
function.serialize = QuantileSerialize;
|
|
1200
1204
|
function.deserialize = QuantileDeserialize;
|
|
1205
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1201
1206
|
return bind_data;
|
|
1202
1207
|
}
|
|
1203
1208
|
|
|
@@ -1205,6 +1210,7 @@ unique_ptr<FunctionData> BindMedianAbsoluteDeviationDecimal(ClientContext &conte
|
|
|
1205
1210
|
vector<unique_ptr<Expression>> &arguments) {
|
|
1206
1211
|
function = GetMedianAbsoluteDeviationAggregateFunction(arguments[0]->return_type);
|
|
1207
1212
|
function.name = "mad";
|
|
1213
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1208
1214
|
return nullptr;
|
|
1209
1215
|
}
|
|
1210
1216
|
|
|
@@ -1257,6 +1263,7 @@ unique_ptr<FunctionData> BindDiscreteQuantileDecimal(ClientContext &context, Agg
|
|
|
1257
1263
|
function.name = "quantile_disc";
|
|
1258
1264
|
function.serialize = QuantileDecimalSerialize;
|
|
1259
1265
|
function.deserialize = QuantileDeserialize;
|
|
1266
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1260
1267
|
return bind_data;
|
|
1261
1268
|
}
|
|
1262
1269
|
|
|
@@ -1267,6 +1274,7 @@ unique_ptr<FunctionData> BindDiscreteQuantileDecimalList(ClientContext &context,
|
|
|
1267
1274
|
function.name = "quantile_disc";
|
|
1268
1275
|
function.serialize = QuantileDecimalSerialize;
|
|
1269
1276
|
function.deserialize = QuantileDeserialize;
|
|
1277
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1270
1278
|
return bind_data;
|
|
1271
1279
|
}
|
|
1272
1280
|
|
|
@@ -1277,6 +1285,7 @@ unique_ptr<FunctionData> BindContinuousQuantileDecimal(ClientContext &context, A
|
|
|
1277
1285
|
function.name = "quantile_cont";
|
|
1278
1286
|
function.serialize = QuantileDecimalSerialize;
|
|
1279
1287
|
function.deserialize = QuantileDeserialize;
|
|
1288
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1280
1289
|
return bind_data;
|
|
1281
1290
|
}
|
|
1282
1291
|
|
|
@@ -1287,6 +1296,7 @@ unique_ptr<FunctionData> BindContinuousQuantileDecimalList(ClientContext &contex
|
|
|
1287
1296
|
function.name = "quantile_cont";
|
|
1288
1297
|
function.serialize = QuantileDecimalSerialize;
|
|
1289
1298
|
function.deserialize = QuantileDeserialize;
|
|
1299
|
+
function.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1290
1300
|
return bind_data;
|
|
1291
1301
|
}
|
|
1292
1302
|
|
|
@@ -1316,6 +1326,7 @@ AggregateFunction GetDiscreteQuantileAggregate(const LogicalType &type) {
|
|
|
1316
1326
|
fun.deserialize = QuantileDeserialize;
|
|
1317
1327
|
// temporarily push an argument so we can bind the actual quantile
|
|
1318
1328
|
fun.arguments.emplace_back(LogicalType::DOUBLE);
|
|
1329
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1319
1330
|
return fun;
|
|
1320
1331
|
}
|
|
1321
1332
|
|
|
@@ -1327,6 +1338,7 @@ AggregateFunction GetDiscreteQuantileListAggregate(const LogicalType &type) {
|
|
|
1327
1338
|
// temporarily push an argument so we can bind the actual quantile
|
|
1328
1339
|
auto list_of_double = LogicalType::LIST(LogicalType::DOUBLE);
|
|
1329
1340
|
fun.arguments.push_back(list_of_double);
|
|
1341
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1330
1342
|
return fun;
|
|
1331
1343
|
}
|
|
1332
1344
|
|
|
@@ -1337,6 +1349,7 @@ AggregateFunction GetContinuousQuantileAggregate(const LogicalType &type) {
|
|
|
1337
1349
|
fun.deserialize = QuantileDeserialize;
|
|
1338
1350
|
// temporarily push an argument so we can bind the actual quantile
|
|
1339
1351
|
fun.arguments.emplace_back(LogicalType::DOUBLE);
|
|
1352
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1340
1353
|
return fun;
|
|
1341
1354
|
}
|
|
1342
1355
|
|
|
@@ -1348,6 +1361,7 @@ AggregateFunction GetContinuousQuantileListAggregate(const LogicalType &type) {
|
|
|
1348
1361
|
// temporarily push an argument so we can bind the actual quantile
|
|
1349
1362
|
auto list_of_double = LogicalType::LIST(LogicalType::DOUBLE);
|
|
1350
1363
|
fun.arguments.push_back(list_of_double);
|
|
1364
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1351
1365
|
return fun;
|
|
1352
1366
|
}
|
|
1353
1367
|
|
|
@@ -1357,6 +1371,7 @@ AggregateFunction GetQuantileDecimalAggregate(const vector<LogicalType> &argumen
|
|
|
1357
1371
|
fun.bind = bind;
|
|
1358
1372
|
fun.serialize = QuantileSerialize;
|
|
1359
1373
|
fun.deserialize = QuantileDeserialize;
|
|
1374
|
+
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
|
1360
1375
|
return fun;
|
|
1361
1376
|
}
|
|
1362
1377
|
|
|
@@ -723,9 +723,9 @@ static void GetSegmentDataFunctions(WriteDataToSegment &write_data_to_segment,
|
|
|
723
723
|
read_data_from_segment.segment_function = ReadDataFromVarcharSegment;
|
|
724
724
|
copy_data_from_segment.segment_function = CopyDataFromListSegment;
|
|
725
725
|
|
|
726
|
-
write_data_to_segment.child_functions.emplace_back(
|
|
726
|
+
write_data_to_segment.child_functions.emplace_back();
|
|
727
727
|
write_data_to_segment.child_functions.back().create_segment = CreatePrimitiveSegment<char>;
|
|
728
|
-
copy_data_from_segment.child_functions.emplace_back(
|
|
728
|
+
copy_data_from_segment.child_functions.emplace_back();
|
|
729
729
|
copy_data_from_segment.child_functions.back().segment_function = CopyDataFromPrimitiveSegment<char>;
|
|
730
730
|
break;
|
|
731
731
|
}
|
|
@@ -736,9 +736,9 @@ static void GetSegmentDataFunctions(WriteDataToSegment &write_data_to_segment,
|
|
|
736
736
|
copy_data_from_segment.segment_function = CopyDataFromListSegment;
|
|
737
737
|
|
|
738
738
|
// recurse
|
|
739
|
-
write_data_to_segment.child_functions.emplace_back(
|
|
740
|
-
read_data_from_segment.child_functions.emplace_back(
|
|
741
|
-
copy_data_from_segment.child_functions.emplace_back(
|
|
739
|
+
write_data_to_segment.child_functions.emplace_back();
|
|
740
|
+
read_data_from_segment.child_functions.emplace_back();
|
|
741
|
+
copy_data_from_segment.child_functions.emplace_back();
|
|
742
742
|
GetSegmentDataFunctions(write_data_to_segment.child_functions.back(),
|
|
743
743
|
read_data_from_segment.child_functions.back(),
|
|
744
744
|
copy_data_from_segment.child_functions.back(), ListType::GetChildType(type));
|
|
@@ -753,9 +753,9 @@ static void GetSegmentDataFunctions(WriteDataToSegment &write_data_to_segment,
|
|
|
753
753
|
// recurse
|
|
754
754
|
auto child_types = StructType::GetChildTypes(type);
|
|
755
755
|
for (idx_t i = 0; i < child_types.size(); i++) {
|
|
756
|
-
write_data_to_segment.child_functions.emplace_back(
|
|
757
|
-
read_data_from_segment.child_functions.emplace_back(
|
|
758
|
-
copy_data_from_segment.child_functions.emplace_back(
|
|
756
|
+
write_data_to_segment.child_functions.emplace_back();
|
|
757
|
+
read_data_from_segment.child_functions.emplace_back();
|
|
758
|
+
copy_data_from_segment.child_functions.emplace_back();
|
|
759
759
|
GetSegmentDataFunctions(write_data_to_segment.child_functions.back(),
|
|
760
760
|
read_data_from_segment.child_functions.back(),
|
|
761
761
|
copy_data_from_segment.child_functions.back(), child_types[i].second);
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
#include "duckdb/common/types/column_data_collection.hpp"
|
|
4
4
|
#include "duckdb/function/function_binder.hpp"
|
|
5
5
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
6
|
+
#include "duckdb/planner/expression/bound_aggregate_expression.hpp"
|
|
7
|
+
#include "duckdb/parser/expression_map.hpp"
|
|
8
|
+
#include "duckdb/function/aggregate/distributive_functions.hpp"
|
|
6
9
|
|
|
7
10
|
namespace duckdb {
|
|
8
11
|
|
|
@@ -71,17 +74,25 @@ struct SortedAggregateBindData : public FunctionData {
|
|
|
71
74
|
};
|
|
72
75
|
|
|
73
76
|
struct SortedAggregateState {
|
|
74
|
-
|
|
77
|
+
//! Default buffer size, optimised for small group to avoid blowing out memory.
|
|
78
|
+
static const idx_t BUFFER_CAPACITY = 16;
|
|
75
79
|
|
|
76
80
|
SortedAggregateState() : nsel(0) {
|
|
77
81
|
}
|
|
78
82
|
|
|
79
83
|
static inline void InitializeBuffer(DataChunk &chunk, const vector<LogicalType> &types) {
|
|
80
84
|
if (!chunk.ColumnCount() && !types.empty()) {
|
|
81
|
-
chunk.Initialize(Allocator::DefaultAllocator(), types);
|
|
85
|
+
chunk.Initialize(Allocator::DefaultAllocator(), types, BUFFER_CAPACITY);
|
|
82
86
|
}
|
|
83
87
|
}
|
|
84
88
|
|
|
89
|
+
//! Make sure the buffer is large enough for slicing
|
|
90
|
+
static inline void ResetBuffer(DataChunk &chunk, const vector<LogicalType> &types) {
|
|
91
|
+
chunk.Reset();
|
|
92
|
+
chunk.Destroy();
|
|
93
|
+
chunk.Initialize(Allocator::DefaultAllocator(), types);
|
|
94
|
+
}
|
|
95
|
+
|
|
85
96
|
void Flush(SortedAggregateBindData &order_bind) {
|
|
86
97
|
if (ordering) {
|
|
87
98
|
return;
|
|
@@ -90,10 +101,12 @@ struct SortedAggregateState {
|
|
|
90
101
|
ordering = make_unique<ColumnDataCollection>(order_bind.buffer_manager, order_bind.sort_types);
|
|
91
102
|
InitializeBuffer(sort_buffer, order_bind.sort_types);
|
|
92
103
|
ordering->Append(sort_buffer);
|
|
104
|
+
ResetBuffer(sort_buffer, order_bind.sort_types);
|
|
93
105
|
|
|
94
106
|
arguments = make_unique<ColumnDataCollection>(order_bind.buffer_manager, order_bind.arg_types);
|
|
95
107
|
InitializeBuffer(arg_buffer, order_bind.arg_types);
|
|
96
108
|
arguments->Append(arg_buffer);
|
|
109
|
+
ResetBuffer(arg_buffer, order_bind.arg_types);
|
|
97
110
|
}
|
|
98
111
|
|
|
99
112
|
void Update(SortedAggregateBindData &order_bind, DataChunk &sort_chunk, DataChunk &arg_chunk) {
|
|
@@ -101,7 +114,7 @@ struct SortedAggregateState {
|
|
|
101
114
|
InitializeBuffer(sort_buffer, order_bind.sort_types);
|
|
102
115
|
InitializeBuffer(arg_buffer, order_bind.arg_types);
|
|
103
116
|
|
|
104
|
-
if (sort_chunk.size() + sort_buffer.size() >
|
|
117
|
+
if (sort_chunk.size() + sort_buffer.size() > STANDARD_VECTOR_SIZE) {
|
|
105
118
|
Flush(order_bind);
|
|
106
119
|
}
|
|
107
120
|
if (ordering) {
|
|
@@ -118,7 +131,7 @@ struct SortedAggregateState {
|
|
|
118
131
|
InitializeBuffer(sort_buffer, order_bind.sort_types);
|
|
119
132
|
InitializeBuffer(arg_buffer, order_bind.arg_types);
|
|
120
133
|
|
|
121
|
-
if (nsel + sort_buffer.size() >
|
|
134
|
+
if (nsel + sort_buffer.size() > STANDARD_VECTOR_SIZE) {
|
|
122
135
|
Flush(order_bind);
|
|
123
136
|
}
|
|
124
137
|
if (ordering) {
|
|
@@ -276,6 +289,8 @@ struct SortedAggregateFunction {
|
|
|
276
289
|
auto &orders = order_bind->orders;
|
|
277
290
|
RowLayout payload_layout;
|
|
278
291
|
payload_layout.Initialize(order_bind->arg_types);
|
|
292
|
+
DataChunk chunk;
|
|
293
|
+
chunk.Initialize(Allocator::DefaultAllocator(), order_bind->arg_types);
|
|
279
294
|
|
|
280
295
|
// Reusable inner state
|
|
281
296
|
vector<data_t> agg_state(order_bind->function.state_size());
|
|
@@ -314,7 +329,6 @@ struct SortedAggregateFunction {
|
|
|
314
329
|
global_sort->CompleteMergeRound(false);
|
|
315
330
|
}
|
|
316
331
|
|
|
317
|
-
auto &chunk = state->arg_buffer;
|
|
318
332
|
PayloadScanner scanner(*global_sort);
|
|
319
333
|
for (;;) {
|
|
320
334
|
chunk.Reset();
|
|
@@ -352,16 +366,44 @@ struct SortedAggregateFunction {
|
|
|
352
366
|
}
|
|
353
367
|
};
|
|
354
368
|
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
369
|
+
void FunctionBinder::BindSortedAggregate(ClientContext &context, BoundAggregateExpression &expr,
|
|
370
|
+
const vector<unique_ptr<Expression>> &groups) {
|
|
371
|
+
if (!expr.order_bys || expr.order_bys->orders.empty() || expr.children.empty()) {
|
|
372
|
+
// not a sorted aggregate: return
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (context.config.enable_optimizer) {
|
|
376
|
+
// for each ORDER BY - check if it is actually necessary
|
|
377
|
+
// expressions that are in the groups do not need to be ORDERED BY
|
|
378
|
+
// `ORDER BY` on a group has no effect, because for each aggregate, the group is unique
|
|
379
|
+
// similarly, we only need to ORDER BY each aggregate once
|
|
380
|
+
expression_set_t seen_expressions;
|
|
381
|
+
for (auto &target : groups) {
|
|
382
|
+
seen_expressions.insert(target.get());
|
|
383
|
+
}
|
|
384
|
+
vector<BoundOrderByNode> new_order_nodes;
|
|
385
|
+
for (auto &order_node : expr.order_bys->orders) {
|
|
386
|
+
if (seen_expressions.find(order_node.expression.get()) != seen_expressions.end()) {
|
|
387
|
+
// we do not need to order by this node
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
seen_expressions.insert(order_node.expression.get());
|
|
391
|
+
new_order_nodes.push_back(std::move(order_node));
|
|
392
|
+
}
|
|
393
|
+
if (new_order_nodes.empty()) {
|
|
394
|
+
expr.order_bys.reset();
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
expr.order_bys->orders = std::move(new_order_nodes);
|
|
398
|
+
}
|
|
399
|
+
auto &bound_function = expr.function;
|
|
400
|
+
auto &children = expr.children;
|
|
401
|
+
auto &order_bys = *expr.order_bys;
|
|
402
|
+
auto sorted_bind = make_unique<SortedAggregateBindData>(context, bound_function, expr.children,
|
|
403
|
+
std::move(expr.bind_info), order_bys);
|
|
362
404
|
|
|
363
405
|
// The arguments are the children plus the sort columns.
|
|
364
|
-
for (auto &order : order_bys
|
|
406
|
+
for (auto &order : order_bys.orders) {
|
|
365
407
|
children.emplace_back(std::move(order.expression));
|
|
366
408
|
}
|
|
367
409
|
|
|
@@ -381,9 +423,9 @@ unique_ptr<FunctionData> FunctionBinder::BindSortedAggregate(AggregateFunction &
|
|
|
381
423
|
AggregateFunction::StateDestroy<SortedAggregateState, SortedAggregateFunction>, nullptr,
|
|
382
424
|
SortedAggregateFunction::Window, SortedAggregateFunction::Serialize, SortedAggregateFunction::Deserialize);
|
|
383
425
|
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
426
|
+
expr.function = std::move(ordered_aggregate);
|
|
427
|
+
expr.bind_info = std::move(sorted_bind);
|
|
428
|
+
expr.order_bys.reset();
|
|
387
429
|
}
|
|
388
430
|
|
|
389
431
|
} // namespace duckdb
|
|
@@ -9,8 +9,6 @@ BoundCastInfo DefaultCasts::BitCastSwitch(BindCastInput &input, const LogicalTyp
|
|
|
9
9
|
case LogicalTypeId::VARCHAR:
|
|
10
10
|
// bit to varchar
|
|
11
11
|
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, duckdb::CastFromBit>);
|
|
12
|
-
case LogicalTypeId::BLOB:
|
|
13
|
-
return DefaultCasts::ReinterpretCast;
|
|
14
12
|
default:
|
|
15
13
|
return DefaultCasts::TryVectorNullCast;
|
|
16
14
|
}
|
|
@@ -10,7 +10,6 @@ BoundCastInfo DefaultCasts::BlobCastSwitch(BindCastInput &input, const LogicalTy
|
|
|
10
10
|
// blob to varchar
|
|
11
11
|
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, duckdb::CastFromBlob>);
|
|
12
12
|
case LogicalTypeId::AGGREGATE_STATE:
|
|
13
|
-
case LogicalTypeId::BIT:
|
|
14
13
|
return DefaultCasts::ReinterpretCast;
|
|
15
14
|
default:
|
|
16
15
|
return DefaultCasts::TryVectorNullCast;
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
namespace duckdb {
|
|
8
8
|
|
|
9
|
-
BindCastInput::BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, ClientContext
|
|
9
|
+
BindCastInput::BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, optional_ptr<ClientContext> context)
|
|
10
10
|
: function_set(function_set), info(info), context(context) {
|
|
11
11
|
}
|
|
12
12
|
|
|
@@ -109,17 +109,39 @@ unique_ptr<BoundCastData> BindEnumCast(BindCastInput &input, const LogicalType &
|
|
|
109
109
|
return make_unique<EnumBoundCastData>(std::move(to_varchar_cast), std::move(from_varchar_cast));
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
struct EnumCastLocalState : public FunctionLocalState {
|
|
113
|
+
public:
|
|
114
|
+
unique_ptr<FunctionLocalState> to_varchar_local;
|
|
115
|
+
unique_ptr<FunctionLocalState> from_varchar_local;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
static unique_ptr<FunctionLocalState> InitEnumCastLocalState(CastLocalStateParameters ¶meters) {
|
|
119
|
+
auto &cast_data = (EnumBoundCastData &)*parameters.cast_data;
|
|
120
|
+
auto result = make_unique<EnumCastLocalState>();
|
|
121
|
+
|
|
122
|
+
if (cast_data.from_varchar_cast.init_local_state) {
|
|
123
|
+
CastLocalStateParameters from_varchar_params(parameters, cast_data.from_varchar_cast.cast_data);
|
|
124
|
+
result->from_varchar_local = cast_data.from_varchar_cast.init_local_state(from_varchar_params);
|
|
125
|
+
}
|
|
126
|
+
if (cast_data.to_varchar_cast.init_local_state) {
|
|
127
|
+
CastLocalStateParameters from_varchar_params(parameters, cast_data.to_varchar_cast.cast_data);
|
|
128
|
+
result->from_varchar_local = cast_data.to_varchar_cast.init_local_state(from_varchar_params);
|
|
129
|
+
}
|
|
130
|
+
return std::move(result);
|
|
131
|
+
}
|
|
132
|
+
|
|
112
133
|
static bool EnumToAnyCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
113
134
|
auto &cast_data = (EnumBoundCastData &)*parameters.cast_data;
|
|
135
|
+
auto &lstate = (EnumCastLocalState &)*parameters.local_state;
|
|
114
136
|
|
|
115
137
|
Vector varchar_cast(LogicalType::VARCHAR, count);
|
|
116
138
|
|
|
117
139
|
// cast to varchar
|
|
118
|
-
CastParameters to_varchar_params(parameters, cast_data.to_varchar_cast.cast_data.
|
|
140
|
+
CastParameters to_varchar_params(parameters, cast_data.to_varchar_cast.cast_data, lstate.to_varchar_local);
|
|
119
141
|
cast_data.to_varchar_cast.function(source, varchar_cast, count, to_varchar_params);
|
|
120
142
|
|
|
121
143
|
// cast from varchar to the target
|
|
122
|
-
CastParameters from_varchar_params(parameters, cast_data.from_varchar_cast.cast_data.
|
|
144
|
+
CastParameters from_varchar_params(parameters, cast_data.from_varchar_cast.cast_data, lstate.from_varchar_local);
|
|
123
145
|
cast_data.from_varchar_cast.function(varchar_cast, result, count, from_varchar_params);
|
|
124
146
|
return true;
|
|
125
147
|
}
|
|
@@ -152,7 +174,7 @@ BoundCastInfo DefaultCasts::EnumCastSwitch(BindCastInput &input, const LogicalTy
|
|
|
152
174
|
throw InternalException("ENUM can only have unsigned integers (except UINT64) as physical types");
|
|
153
175
|
}
|
|
154
176
|
default: {
|
|
155
|
-
return BoundCastInfo(EnumToAnyCast, BindEnumCast(input, source, target));
|
|
177
|
+
return BoundCastInfo(EnumToAnyCast, BindEnumCast(input, source, target), InitEnumCastLocalState);
|
|
156
178
|
}
|
|
157
179
|
}
|
|
158
180
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include "duckdb/function/cast/default_casts.hpp"
|
|
2
2
|
#include "duckdb/function/cast/cast_function_set.hpp"
|
|
3
|
+
#include "duckdb/function/cast/bound_cast_data.hpp"
|
|
3
4
|
|
|
4
5
|
namespace duckdb {
|
|
5
6
|
|
|
@@ -12,6 +13,15 @@ unique_ptr<BoundCastData> ListBoundCastData::BindListToListCast(BindCastInput &i
|
|
|
12
13
|
return make_unique<ListBoundCastData>(std::move(child_cast));
|
|
13
14
|
}
|
|
14
15
|
|
|
16
|
+
unique_ptr<FunctionLocalState> ListBoundCastData::InitListLocalState(CastLocalStateParameters ¶meters) {
|
|
17
|
+
auto &cast_data = (ListBoundCastData &)*parameters.cast_data;
|
|
18
|
+
if (!cast_data.child_cast_info.init_local_state) {
|
|
19
|
+
return nullptr;
|
|
20
|
+
}
|
|
21
|
+
CastLocalStateParameters child_parameters(parameters, cast_data.child_cast_info.cast_data);
|
|
22
|
+
return cast_data.child_cast_info.init_local_state(child_parameters);
|
|
23
|
+
}
|
|
24
|
+
|
|
15
25
|
bool ListCast::ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
16
26
|
auto &cast_data = (ListBoundCastData &)*parameters.cast_data;
|
|
17
27
|
|
|
@@ -40,7 +50,7 @@ bool ListCast::ListToListCast(Vector &source, Vector &result, idx_t count, CastP
|
|
|
40
50
|
ListVector::Reserve(result, source_size);
|
|
41
51
|
auto &append_vector = ListVector::GetEntry(result);
|
|
42
52
|
|
|
43
|
-
CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data.
|
|
53
|
+
CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data, parameters.local_state);
|
|
44
54
|
if (!cast_data.child_cast_info.function(source_cc, append_vector, source_size, child_parameters)) {
|
|
45
55
|
return false;
|
|
46
56
|
}
|
|
@@ -116,10 +126,13 @@ static bool ListToVarcharCast(Vector &source, Vector &result, idx_t count, CastP
|
|
|
116
126
|
BoundCastInfo DefaultCasts::ListCastSwitch(BindCastInput &input, const LogicalType &source, const LogicalType &target) {
|
|
117
127
|
switch (target.id()) {
|
|
118
128
|
case LogicalTypeId::LIST:
|
|
119
|
-
return BoundCastInfo(ListCast::ListToListCast, ListBoundCastData::BindListToListCast(input, source, target)
|
|
129
|
+
return BoundCastInfo(ListCast::ListToListCast, ListBoundCastData::BindListToListCast(input, source, target),
|
|
130
|
+
ListBoundCastData::InitListLocalState);
|
|
120
131
|
case LogicalTypeId::VARCHAR:
|
|
121
|
-
return BoundCastInfo(
|
|
122
|
-
|
|
132
|
+
return BoundCastInfo(
|
|
133
|
+
ListToVarcharCast,
|
|
134
|
+
ListBoundCastData::BindListToListCast(input, source, LogicalType::LIST(LogicalType::VARCHAR)),
|
|
135
|
+
ListBoundCastData::InitListLocalState);
|
|
123
136
|
default:
|
|
124
137
|
return DefaultCasts::TryVectorNullCast;
|
|
125
138
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include "duckdb/function/cast/default_casts.hpp"
|
|
2
2
|
#include "duckdb/function/cast/cast_function_set.hpp"
|
|
3
|
+
#include "duckdb/function/cast/bound_cast_data.hpp"
|
|
3
4
|
|
|
4
5
|
namespace duckdb {
|
|
5
6
|
|
|
@@ -78,10 +79,12 @@ static bool MapToVarcharCast(Vector &source, Vector &result, idx_t count, CastPa
|
|
|
78
79
|
BoundCastInfo DefaultCasts::MapCastSwitch(BindCastInput &input, const LogicalType &source, const LogicalType &target) {
|
|
79
80
|
switch (target.id()) {
|
|
80
81
|
case LogicalTypeId::MAP:
|
|
81
|
-
return BoundCastInfo(ListCast::ListToListCast, ListBoundCastData::BindListToListCast(input, source, target)
|
|
82
|
+
return BoundCastInfo(ListCast::ListToListCast, ListBoundCastData::BindListToListCast(input, source, target),
|
|
83
|
+
ListBoundCastData::InitListLocalState);
|
|
82
84
|
case LogicalTypeId::VARCHAR: {
|
|
83
85
|
auto varchar_type = LogicalType::MAP(LogicalType::VARCHAR, LogicalType::VARCHAR);
|
|
84
|
-
return BoundCastInfo(MapToVarcharCast, ListBoundCastData::BindListToListCast(input, source, varchar_type)
|
|
86
|
+
return BoundCastInfo(MapToVarcharCast, ListBoundCastData::BindListToListCast(input, source, varchar_type),
|
|
87
|
+
ListBoundCastData::InitListLocalState);
|
|
85
88
|
}
|
|
86
89
|
default:
|
|
87
90
|
return TryVectorNullCast;
|