duckdb 0.7.1 → 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
|
@@ -57,9 +57,12 @@ private:
|
|
|
57
57
|
|
|
58
58
|
HashTableList unpartitioned_hts;
|
|
59
59
|
unordered_map<hash_t, HashTableList> radix_partitioned_hts;
|
|
60
|
+
idx_t tuple_size;
|
|
60
61
|
|
|
61
62
|
private:
|
|
62
63
|
idx_t ListAddChunk(HashTableList &list, DataChunk &groups, Vector &group_hashes, DataChunk &payload,
|
|
63
64
|
const vector<idx_t> &filter);
|
|
65
|
+
//! Returns the HT entry size used for intermediate hash tables
|
|
66
|
+
HtEntryType GetHTEntrySize();
|
|
64
67
|
};
|
|
65
68
|
} // namespace duckdb
|
|
@@ -48,6 +48,7 @@ protected:
|
|
|
48
48
|
|
|
49
49
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalAggregate &op);
|
|
50
50
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalAnyJoin &op);
|
|
51
|
+
unique_ptr<PhysicalOperator> CreatePlan(LogicalAsOfJoin &op);
|
|
51
52
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalColumnDataGet &op);
|
|
52
53
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalComparisonJoin &op);
|
|
53
54
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalCreate &op);
|
|
@@ -88,9 +89,6 @@ protected:
|
|
|
88
89
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalRecursiveCTE &op);
|
|
89
90
|
unique_ptr<PhysicalOperator> CreatePlan(LogicalCTERef &op);
|
|
90
91
|
|
|
91
|
-
unique_ptr<PhysicalOperator> CreateDistinctOn(unique_ptr<PhysicalOperator> child,
|
|
92
|
-
vector<unique_ptr<Expression>> distinct_targets);
|
|
93
|
-
|
|
94
92
|
unique_ptr<PhysicalOperator> ExtractAggregateExpressions(unique_ptr<PhysicalOperator> child,
|
|
95
93
|
vector<unique_ptr<Expression>> &expressions,
|
|
96
94
|
vector<unique_ptr<Expression>> &groups);
|
|
@@ -15,6 +15,60 @@
|
|
|
15
15
|
|
|
16
16
|
namespace duckdb {
|
|
17
17
|
|
|
18
|
+
class WindowAggregateState {
|
|
19
|
+
public:
|
|
20
|
+
WindowAggregateState(AggregateFunction &aggregate, FunctionData *bind_info, const LogicalType &result_type_p);
|
|
21
|
+
virtual ~WindowAggregateState();
|
|
22
|
+
|
|
23
|
+
virtual void Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered);
|
|
24
|
+
virtual void Finalize();
|
|
25
|
+
virtual void Compute(Vector &result, idx_t rid, idx_t start, idx_t end);
|
|
26
|
+
|
|
27
|
+
protected:
|
|
28
|
+
void AggregateInit();
|
|
29
|
+
void AggegateFinal(Vector &result, idx_t rid);
|
|
30
|
+
|
|
31
|
+
//! The aggregate that the window function is computed over
|
|
32
|
+
AggregateFunction aggregate;
|
|
33
|
+
//! The bind info of the aggregate
|
|
34
|
+
FunctionData *bind_info;
|
|
35
|
+
//! The result type of the window function
|
|
36
|
+
LogicalType result_type;
|
|
37
|
+
|
|
38
|
+
//! Data pointer that contains a single state, used for intermediate window segment aggregation
|
|
39
|
+
vector<data_t> state;
|
|
40
|
+
//! Reused result state container for the window functions
|
|
41
|
+
Vector statev;
|
|
42
|
+
//! A vector of pointers to "state", used for intermediate window segment aggregation
|
|
43
|
+
Vector statep;
|
|
44
|
+
//! Input data chunk, used for intermediate window segment aggregation
|
|
45
|
+
DataChunk inputs;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
class WindowConstantAggregate : public WindowAggregateState {
|
|
49
|
+
public:
|
|
50
|
+
static bool IsConstantAggregate(const BoundWindowExpression &wexpr);
|
|
51
|
+
|
|
52
|
+
WindowConstantAggregate(AggregateFunction &aggregate, FunctionData *bind_info, const LogicalType &result_type_p,
|
|
53
|
+
const ValidityMask &partition_mask, const idx_t count);
|
|
54
|
+
~WindowConstantAggregate() override {
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void Sink(DataChunk &payload_chunk, SelectionVector *filter_sel, idx_t filtered) override;
|
|
58
|
+
void Finalize() override;
|
|
59
|
+
void Compute(Vector &result, idx_t rid, idx_t start, idx_t end) override;
|
|
60
|
+
|
|
61
|
+
private:
|
|
62
|
+
//! Partition starts
|
|
63
|
+
vector<idx_t> partition_offsets;
|
|
64
|
+
//! Aggregate results
|
|
65
|
+
unique_ptr<Vector> results;
|
|
66
|
+
//! The current result partition being built/read
|
|
67
|
+
idx_t partition;
|
|
68
|
+
//! The current input row being built/read
|
|
69
|
+
idx_t row;
|
|
70
|
+
};
|
|
71
|
+
|
|
18
72
|
class WindowSegmentTree {
|
|
19
73
|
public:
|
|
20
74
|
using FrameBounds = std::pair<idx_t, idx_t>;
|
|
@@ -27,6 +27,11 @@ struct BitXorFun {
|
|
|
27
27
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
28
28
|
};
|
|
29
29
|
|
|
30
|
+
struct BitStringAggFun {
|
|
31
|
+
static void GetBitStringAggregate(const LogicalType &type, AggregateFunctionSet &bitstring_agg);
|
|
32
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
33
|
+
};
|
|
34
|
+
|
|
30
35
|
struct CountStarFun {
|
|
31
36
|
static AggregateFunction GetFunction();
|
|
32
37
|
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
|
|
18
18
|
namespace duckdb {
|
|
19
19
|
|
|
20
|
-
//! This allows us to use the & operator to check if the type is contained in the set
|
|
21
20
|
enum class AggregateType : uint8_t { NON_DISTINCT = 1, DISTINCT = 2 };
|
|
21
|
+
//! Whether or not the input order influences the result of the aggregate
|
|
22
|
+
enum class AggregateOrderDependent : uint8_t { ORDER_DEPENDENT = 1, NOT_ORDER_DEPENDENT = 2 };
|
|
22
23
|
|
|
23
24
|
class BoundAggregateExpression;
|
|
24
25
|
|
|
@@ -29,6 +30,17 @@ struct AggregateInputData {
|
|
|
29
30
|
Allocator &allocator;
|
|
30
31
|
};
|
|
31
32
|
|
|
33
|
+
struct AggregateStatisticsInput {
|
|
34
|
+
AggregateStatisticsInput(FunctionData *bind_data_p, vector<BaseStatistics> &child_stats_p,
|
|
35
|
+
NodeStatistics *node_stats_p)
|
|
36
|
+
: bind_data(bind_data_p), child_stats(child_stats_p), node_stats(node_stats_p) {
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
FunctionData *bind_data;
|
|
40
|
+
vector<BaseStatistics> &child_stats;
|
|
41
|
+
NodeStatistics *node_stats;
|
|
42
|
+
};
|
|
43
|
+
|
|
32
44
|
//! The type used for sizing hashed aggregate function states
|
|
33
45
|
typedef idx_t (*aggregate_size_t)();
|
|
34
46
|
//! The type used for initializing hashed aggregate function states
|
|
@@ -43,9 +55,7 @@ typedef void (*aggregate_finalize_t)(Vector &state, AggregateInputData &aggr_inp
|
|
|
43
55
|
idx_t offset);
|
|
44
56
|
//! The type used for propagating statistics in aggregate functions (optional)
|
|
45
57
|
typedef unique_ptr<BaseStatistics> (*aggregate_statistics_t)(ClientContext &context, BoundAggregateExpression &expr,
|
|
46
|
-
|
|
47
|
-
vector<unique_ptr<BaseStatistics>> &child_stats,
|
|
48
|
-
NodeStatistics *node_stats);
|
|
58
|
+
AggregateStatisticsInput &input);
|
|
49
59
|
//! Binds the scalar function and creates the function data
|
|
50
60
|
typedef unique_ptr<FunctionData> (*bind_aggregate_function_t)(ClientContext &context, AggregateFunction &function,
|
|
51
61
|
vector<unique_ptr<Expression>> &arguments);
|
|
@@ -83,7 +93,7 @@ public:
|
|
|
83
93
|
LogicalType(LogicalTypeId::INVALID), null_handling),
|
|
84
94
|
state_size(state_size), initialize(initialize), update(update), combine(combine), finalize(finalize),
|
|
85
95
|
simple_update(simple_update), window(window), bind(bind), destructor(destructor), statistics(statistics),
|
|
86
|
-
serialize(serialize), deserialize(deserialize) {
|
|
96
|
+
serialize(serialize), deserialize(deserialize), order_dependent(AggregateOrderDependent::ORDER_DEPENDENT) {
|
|
87
97
|
}
|
|
88
98
|
|
|
89
99
|
DUCKDB_API
|
|
@@ -98,7 +108,7 @@ public:
|
|
|
98
108
|
LogicalType(LogicalTypeId::INVALID)),
|
|
99
109
|
state_size(state_size), initialize(initialize), update(update), combine(combine), finalize(finalize),
|
|
100
110
|
simple_update(simple_update), window(window), bind(bind), destructor(destructor), statistics(statistics),
|
|
101
|
-
serialize(serialize), deserialize(deserialize) {
|
|
111
|
+
serialize(serialize), deserialize(deserialize), order_dependent(AggregateOrderDependent::ORDER_DEPENDENT) {
|
|
102
112
|
}
|
|
103
113
|
|
|
104
114
|
DUCKDB_API AggregateFunction(const vector<LogicalType> &arguments, const LogicalType &return_type,
|
|
@@ -151,6 +161,8 @@ public:
|
|
|
151
161
|
|
|
152
162
|
aggregate_serialize_t serialize;
|
|
153
163
|
aggregate_deserialize_t deserialize;
|
|
164
|
+
//! Whether or not the aggregate is order dependent
|
|
165
|
+
AggregateOrderDependent order_dependent;
|
|
154
166
|
|
|
155
167
|
DUCKDB_API bool operator==(const AggregateFunction &rhs) const {
|
|
156
168
|
return state_size == rhs.state_size && initialize == rhs.initialize && update == rhs.update &&
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/function/cast/bound_cast_data.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/function/cast/default_casts.hpp"
|
|
12
|
+
|
|
13
|
+
namespace duckdb {
|
|
14
|
+
|
|
15
|
+
struct ListBoundCastData : public BoundCastData {
|
|
16
|
+
explicit ListBoundCastData(BoundCastInfo child_cast) : child_cast_info(std::move(child_cast)) {
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
BoundCastInfo child_cast_info;
|
|
20
|
+
static unique_ptr<BoundCastData> BindListToListCast(BindCastInput &input, const LogicalType &source,
|
|
21
|
+
const LogicalType &target);
|
|
22
|
+
static unique_ptr<FunctionLocalState> InitListLocalState(CastLocalStateParameters ¶meters);
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
unique_ptr<BoundCastData> Copy() const override {
|
|
26
|
+
return make_unique<ListBoundCastData>(child_cast_info.Copy());
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
struct ListCast {
|
|
31
|
+
static bool ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
struct StructBoundCastData : public BoundCastData {
|
|
35
|
+
StructBoundCastData(vector<BoundCastInfo> child_casts, LogicalType target_p)
|
|
36
|
+
: child_cast_info(std::move(child_casts)), target(std::move(target_p)) {
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
vector<BoundCastInfo> child_cast_info;
|
|
40
|
+
LogicalType target;
|
|
41
|
+
|
|
42
|
+
static unique_ptr<BoundCastData> BindStructToStructCast(BindCastInput &input, const LogicalType &source,
|
|
43
|
+
const LogicalType &target);
|
|
44
|
+
static unique_ptr<FunctionLocalState> InitStructCastLocalState(CastLocalStateParameters ¶meters);
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
unique_ptr<BoundCastData> Copy() const override {
|
|
48
|
+
vector<BoundCastInfo> copy_info;
|
|
49
|
+
for (auto &info : child_cast_info) {
|
|
50
|
+
copy_info.push_back(info.Copy());
|
|
51
|
+
}
|
|
52
|
+
return make_unique<StructBoundCastData>(std::move(copy_info), target);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
struct StructCastLocalState : public FunctionLocalState {
|
|
57
|
+
public:
|
|
58
|
+
vector<unique_ptr<FunctionLocalState>> local_states;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
struct MapBoundCastData : public BoundCastData {
|
|
62
|
+
MapBoundCastData(BoundCastInfo key_cast, BoundCastInfo value_cast)
|
|
63
|
+
: key_cast(std::move(key_cast)), value_cast(std::move(value_cast)) {
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
BoundCastInfo key_cast;
|
|
67
|
+
BoundCastInfo value_cast;
|
|
68
|
+
|
|
69
|
+
static unique_ptr<BoundCastData> BindMapToMapCast(BindCastInput &input, const LogicalType &source,
|
|
70
|
+
const LogicalType &target);
|
|
71
|
+
|
|
72
|
+
public:
|
|
73
|
+
unique_ptr<BoundCastData> Copy() const override {
|
|
74
|
+
return make_unique<MapBoundCastData>(key_cast.Copy(), value_cast.Copy());
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
struct MapCastLocalState : public FunctionLocalState {
|
|
79
|
+
public:
|
|
80
|
+
unique_ptr<FunctionLocalState> key_state;
|
|
81
|
+
unique_ptr<FunctionLocalState> value_state;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
} // namespace duckdb
|
|
@@ -19,12 +19,12 @@ typedef BoundCastInfo (*bind_cast_function_t)(BindCastInput &input, const Logica
|
|
|
19
19
|
typedef int64_t (*implicit_cast_cost_t)(const LogicalType &from, const LogicalType &to);
|
|
20
20
|
|
|
21
21
|
struct GetCastFunctionInput {
|
|
22
|
-
GetCastFunctionInput(ClientContext
|
|
22
|
+
GetCastFunctionInput(optional_ptr<ClientContext> context = nullptr) : context(context) {
|
|
23
23
|
}
|
|
24
24
|
GetCastFunctionInput(ClientContext &context) : context(&context) {
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
ClientContext
|
|
27
|
+
optional_ptr<ClientContext> context;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
struct BindCastFunction {
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/types.hpp"
|
|
12
12
|
#include "duckdb/common/types/vector.hpp"
|
|
13
|
+
#include "duckdb/common/optional_ptr.hpp"
|
|
14
|
+
#include "duckdb/function/scalar_function.hpp"
|
|
13
15
|
|
|
14
16
|
namespace duckdb {
|
|
15
17
|
|
|
@@ -31,25 +33,43 @@ struct BoundCastData {
|
|
|
31
33
|
struct CastParameters {
|
|
32
34
|
CastParameters() {
|
|
33
35
|
}
|
|
34
|
-
CastParameters(BoundCastData *cast_data, bool strict, string *error_message,
|
|
36
|
+
CastParameters(BoundCastData *cast_data, bool strict, string *error_message,
|
|
37
|
+
optional_ptr<FunctionLocalState> local_state)
|
|
35
38
|
: cast_data(cast_data), strict(strict), error_message(error_message), local_state(local_state) {
|
|
36
39
|
}
|
|
37
|
-
CastParameters(CastParameters &parent, BoundCastData
|
|
38
|
-
|
|
40
|
+
CastParameters(CastParameters &parent, optional_ptr<BoundCastData> cast_data,
|
|
41
|
+
optional_ptr<FunctionLocalState> local_state)
|
|
42
|
+
: cast_data(cast_data), strict(parent.strict), error_message(parent.error_message), local_state(local_state) {
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
//! The bound cast data (if any)
|
|
42
|
-
BoundCastData
|
|
46
|
+
optional_ptr<BoundCastData> cast_data;
|
|
43
47
|
//! whether or not to enable strict casting
|
|
44
48
|
bool strict = false;
|
|
45
49
|
// out: error message in case cast has failed
|
|
46
50
|
string *error_message = nullptr;
|
|
47
51
|
//! Local state
|
|
48
|
-
FunctionLocalState
|
|
52
|
+
optional_ptr<FunctionLocalState> local_state;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
struct CastLocalStateParameters {
|
|
56
|
+
CastLocalStateParameters(optional_ptr<ClientContext> context_p, optional_ptr<BoundCastData> cast_data_p)
|
|
57
|
+
: context(context_p), cast_data(cast_data_p) {
|
|
58
|
+
}
|
|
59
|
+
CastLocalStateParameters(ClientContext &context_p, optional_ptr<BoundCastData> cast_data_p)
|
|
60
|
+
: context(&context_p), cast_data(cast_data_p) {
|
|
61
|
+
}
|
|
62
|
+
CastLocalStateParameters(CastLocalStateParameters &parent, optional_ptr<BoundCastData> cast_data_p)
|
|
63
|
+
: context(parent.context), cast_data(cast_data_p) {
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
optional_ptr<ClientContext> context;
|
|
67
|
+
//! The bound cast data (if any)
|
|
68
|
+
optional_ptr<BoundCastData> cast_data;
|
|
49
69
|
};
|
|
50
70
|
|
|
51
71
|
typedef bool (*cast_function_t)(Vector &source, Vector &result, idx_t count, CastParameters ¶meters);
|
|
52
|
-
typedef unique_ptr<FunctionLocalState> (*init_cast_local_state_t)(
|
|
72
|
+
typedef unique_ptr<FunctionLocalState> (*init_cast_local_state_t)(CastLocalStateParameters ¶meters);
|
|
53
73
|
|
|
54
74
|
struct BoundCastInfo {
|
|
55
75
|
DUCKDB_API
|
|
@@ -65,72 +85,16 @@ public:
|
|
|
65
85
|
};
|
|
66
86
|
|
|
67
87
|
struct BindCastInput {
|
|
68
|
-
DUCKDB_API BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, ClientContext
|
|
88
|
+
DUCKDB_API BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, optional_ptr<ClientContext> context);
|
|
69
89
|
|
|
70
90
|
CastFunctionSet &function_set;
|
|
71
91
|
BindCastInfo *info;
|
|
72
|
-
ClientContext
|
|
92
|
+
optional_ptr<ClientContext> context;
|
|
73
93
|
|
|
74
94
|
public:
|
|
75
95
|
DUCKDB_API BoundCastInfo GetCastFunction(const LogicalType &source, const LogicalType &target);
|
|
76
96
|
};
|
|
77
97
|
|
|
78
|
-
struct ListBoundCastData : public BoundCastData {
|
|
79
|
-
explicit ListBoundCastData(BoundCastInfo child_cast) : child_cast_info(std::move(child_cast)) {
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
BoundCastInfo child_cast_info;
|
|
83
|
-
static unique_ptr<BoundCastData> BindListToListCast(BindCastInput &input, const LogicalType &source,
|
|
84
|
-
const LogicalType &target);
|
|
85
|
-
|
|
86
|
-
public:
|
|
87
|
-
unique_ptr<BoundCastData> Copy() const override {
|
|
88
|
-
return make_unique<ListBoundCastData>(child_cast_info.Copy());
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
struct ListCast {
|
|
93
|
-
static bool ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
struct StructBoundCastData : public BoundCastData {
|
|
97
|
-
StructBoundCastData(vector<BoundCastInfo> child_casts, LogicalType target_p)
|
|
98
|
-
: child_cast_info(std::move(child_casts)), target(std::move(target_p)) {
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
vector<BoundCastInfo> child_cast_info;
|
|
102
|
-
LogicalType target;
|
|
103
|
-
|
|
104
|
-
static unique_ptr<BoundCastData> BindStructToStructCast(BindCastInput &input, const LogicalType &source,
|
|
105
|
-
const LogicalType &target);
|
|
106
|
-
|
|
107
|
-
public:
|
|
108
|
-
unique_ptr<BoundCastData> Copy() const override {
|
|
109
|
-
vector<BoundCastInfo> copy_info;
|
|
110
|
-
for (auto &info : child_cast_info) {
|
|
111
|
-
copy_info.push_back(info.Copy());
|
|
112
|
-
}
|
|
113
|
-
return make_unique<StructBoundCastData>(std::move(copy_info), target);
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
struct MapBoundCastData : public BoundCastData {
|
|
118
|
-
MapBoundCastData(BoundCastInfo key_cast, BoundCastInfo value_cast)
|
|
119
|
-
: key_cast(std::move(key_cast)), value_cast(std::move(value_cast)) {
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
BoundCastInfo key_cast;
|
|
123
|
-
BoundCastInfo value_cast;
|
|
124
|
-
|
|
125
|
-
static unique_ptr<BoundCastData> BindMapToMapCast(BindCastInput &input, const LogicalType &source,
|
|
126
|
-
const LogicalType &target);
|
|
127
|
-
|
|
128
|
-
public:
|
|
129
|
-
unique_ptr<BoundCastData> Copy() const override {
|
|
130
|
-
return make_unique<MapBoundCastData>(key_cast.Copy(), value_cast.Copy());
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
|
|
134
98
|
struct DefaultCasts {
|
|
135
99
|
DUCKDB_API static BoundCastInfo GetDefaultCastFunction(BindCastInput &input, const LogicalType &source,
|
|
136
100
|
const LogicalType &target);
|
|
@@ -59,13 +59,10 @@ public:
|
|
|
59
59
|
DUCKDB_API unique_ptr<BoundAggregateExpression>
|
|
60
60
|
BindAggregateFunction(AggregateFunction bound_function, vector<unique_ptr<Expression>> children,
|
|
61
61
|
unique_ptr<Expression> filter = nullptr,
|
|
62
|
-
AggregateType aggr_type = AggregateType::NON_DISTINCT
|
|
63
|
-
unique_ptr<BoundOrderModifier> order_bys = nullptr);
|
|
62
|
+
AggregateType aggr_type = AggregateType::NON_DISTINCT);
|
|
64
63
|
|
|
65
|
-
DUCKDB_API
|
|
66
|
-
|
|
67
|
-
unique_ptr<FunctionData> bind_info,
|
|
68
|
-
unique_ptr<BoundOrderModifier> order_bys);
|
|
64
|
+
DUCKDB_API static void BindSortedAggregate(ClientContext &context, BoundAggregateExpression &expr,
|
|
65
|
+
const vector<unique_ptr<Expression>> &groups);
|
|
69
66
|
|
|
70
67
|
private:
|
|
71
68
|
//! Cast a set of expressions to the arguments of this function
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
namespace duckdb {
|
|
4
|
+
|
|
5
|
+
template <class CHILD_TYPE, class RETURN_TYPE, class OP, class LIST_ACCESSOR>
|
|
6
|
+
static void TemplatedContainsOrPosition(DataChunk &args, Vector &result, bool is_nested = false) {
|
|
7
|
+
D_ASSERT(args.ColumnCount() == 2);
|
|
8
|
+
auto count = args.size();
|
|
9
|
+
Vector &list = LIST_ACCESSOR::GetList(args.data[0]);
|
|
10
|
+
Vector &value_vector = args.data[1];
|
|
11
|
+
|
|
12
|
+
// Create a result vector of type RETURN_TYPE
|
|
13
|
+
result.SetVectorType(VectorType::FLAT_VECTOR);
|
|
14
|
+
auto result_entries = FlatVector::GetData<RETURN_TYPE>(result);
|
|
15
|
+
auto &result_validity = FlatVector::Validity(result);
|
|
16
|
+
|
|
17
|
+
if (list.GetType().id() == LogicalTypeId::SQLNULL) {
|
|
18
|
+
result_validity.SetInvalid(0);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
auto list_size = LIST_ACCESSOR::GetListSize(list);
|
|
23
|
+
auto &child_vector = LIST_ACCESSOR::GetEntry(list);
|
|
24
|
+
|
|
25
|
+
UnifiedVectorFormat child_data;
|
|
26
|
+
child_vector.ToUnifiedFormat(list_size, child_data);
|
|
27
|
+
|
|
28
|
+
UnifiedVectorFormat list_data;
|
|
29
|
+
list.ToUnifiedFormat(count, list_data);
|
|
30
|
+
auto list_entries = (list_entry_t *)list_data.data;
|
|
31
|
+
|
|
32
|
+
UnifiedVectorFormat value_data;
|
|
33
|
+
value_vector.ToUnifiedFormat(count, value_data);
|
|
34
|
+
|
|
35
|
+
// not required for a comparison of nested types
|
|
36
|
+
auto child_value = (CHILD_TYPE *)child_data.data;
|
|
37
|
+
auto values = (CHILD_TYPE *)value_data.data;
|
|
38
|
+
|
|
39
|
+
for (idx_t i = 0; i < count; i++) {
|
|
40
|
+
auto list_index = list_data.sel->get_index(i);
|
|
41
|
+
auto value_index = value_data.sel->get_index(i);
|
|
42
|
+
|
|
43
|
+
if (!list_data.validity.RowIsValid(list_index) || !value_data.validity.RowIsValid(value_index)) {
|
|
44
|
+
result_validity.SetInvalid(i);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const auto &list_entry = list_entries[list_index];
|
|
49
|
+
|
|
50
|
+
result_entries[i] = OP::Initialize();
|
|
51
|
+
for (idx_t child_idx = 0; child_idx < list_entry.length; child_idx++) {
|
|
52
|
+
|
|
53
|
+
auto child_value_idx = child_data.sel->get_index(list_entry.offset + child_idx);
|
|
54
|
+
if (!child_data.validity.RowIsValid(child_value_idx)) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!is_nested) {
|
|
59
|
+
if (Equals::Operation(child_value[child_value_idx], values[value_index])) {
|
|
60
|
+
result_entries[i] = OP::UpdateResultEntries(child_idx);
|
|
61
|
+
break; // Found value in list, no need to look further
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
// FIXME: using Value is less efficient than modifying the vector comparison code
|
|
65
|
+
// to more efficiently compare nested types
|
|
66
|
+
|
|
67
|
+
// Note: When using GetValue we don't first apply the selection vector
|
|
68
|
+
// because it is already done inside GetValue
|
|
69
|
+
auto lvalue = child_vector.GetValue(list_entry.offset + child_idx);
|
|
70
|
+
auto rvalue = value_vector.GetValue(i);
|
|
71
|
+
if (Value::NotDistinctFrom(lvalue, rvalue)) {
|
|
72
|
+
result_entries[i] = OP::UpdateResultEntries(child_idx);
|
|
73
|
+
break; // Found value in list, no need to look further
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (args.AllConstant()) {
|
|
80
|
+
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
template <class T, class OP, class LIST_ACCESSOR>
|
|
85
|
+
void ListContainsOrPosition(DataChunk &args, Vector &result) {
|
|
86
|
+
const auto physical_type = args.data[1].GetType().InternalType();
|
|
87
|
+
switch (physical_type) {
|
|
88
|
+
case PhysicalType::BOOL:
|
|
89
|
+
case PhysicalType::INT8:
|
|
90
|
+
TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
91
|
+
break;
|
|
92
|
+
case PhysicalType::INT16:
|
|
93
|
+
TemplatedContainsOrPosition<int16_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
94
|
+
break;
|
|
95
|
+
case PhysicalType::INT32:
|
|
96
|
+
TemplatedContainsOrPosition<int32_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
97
|
+
break;
|
|
98
|
+
case PhysicalType::INT64:
|
|
99
|
+
TemplatedContainsOrPosition<int64_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
100
|
+
break;
|
|
101
|
+
case PhysicalType::INT128:
|
|
102
|
+
TemplatedContainsOrPosition<hugeint_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
103
|
+
break;
|
|
104
|
+
case PhysicalType::UINT8:
|
|
105
|
+
TemplatedContainsOrPosition<uint8_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
106
|
+
break;
|
|
107
|
+
case PhysicalType::UINT16:
|
|
108
|
+
TemplatedContainsOrPosition<uint16_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
109
|
+
break;
|
|
110
|
+
case PhysicalType::UINT32:
|
|
111
|
+
TemplatedContainsOrPosition<uint32_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
112
|
+
break;
|
|
113
|
+
case PhysicalType::UINT64:
|
|
114
|
+
TemplatedContainsOrPosition<uint64_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
115
|
+
break;
|
|
116
|
+
case PhysicalType::FLOAT:
|
|
117
|
+
TemplatedContainsOrPosition<float, T, OP, LIST_ACCESSOR>(args, result);
|
|
118
|
+
break;
|
|
119
|
+
case PhysicalType::DOUBLE:
|
|
120
|
+
TemplatedContainsOrPosition<double, T, OP, LIST_ACCESSOR>(args, result);
|
|
121
|
+
break;
|
|
122
|
+
case PhysicalType::VARCHAR:
|
|
123
|
+
TemplatedContainsOrPosition<string_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
124
|
+
break;
|
|
125
|
+
case PhysicalType::INTERVAL:
|
|
126
|
+
TemplatedContainsOrPosition<interval_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
127
|
+
break;
|
|
128
|
+
case PhysicalType::STRUCT:
|
|
129
|
+
case PhysicalType::LIST:
|
|
130
|
+
TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result, true);
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
throw NotImplementedException("This function has not been implemented for physical type %s",
|
|
134
|
+
TypeIdToString(physical_type));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
} // namespace duckdb
|
|
@@ -122,4 +122,12 @@ struct IsFiniteFun {
|
|
|
122
122
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
123
123
|
};
|
|
124
124
|
|
|
125
|
+
struct GreatestCommonDivisorFun {
|
|
126
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
struct LeastCommonMultipleFun {
|
|
130
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
131
|
+
};
|
|
132
|
+
|
|
125
133
|
} // namespace duckdb
|
|
@@ -14,12 +14,59 @@
|
|
|
14
14
|
#include "duckdb/common/unordered_map.hpp"
|
|
15
15
|
#include "duckdb/common/field_writer.hpp"
|
|
16
16
|
#include "duckdb/function/built_in_functions.hpp"
|
|
17
|
+
#include "duckdb/function/scalar/list/contains_or_position.hpp"
|
|
17
18
|
|
|
18
19
|
namespace duckdb {
|
|
19
20
|
|
|
20
21
|
enum class MapInvalidReason : uint8_t { VALID, NULL_KEY_LIST, NULL_KEY, DUPLICATE_KEY };
|
|
21
22
|
enum class UnionInvalidReason : uint8_t { VALID, TAG_OUT_OF_RANGE, NO_MEMBERS, VALIDITY_OVERLAP };
|
|
22
23
|
|
|
24
|
+
struct ListArgFunctor {
|
|
25
|
+
static Vector &GetList(Vector &list) {
|
|
26
|
+
return list;
|
|
27
|
+
}
|
|
28
|
+
static idx_t GetListSize(Vector &list) {
|
|
29
|
+
return ListVector::GetListSize(list);
|
|
30
|
+
}
|
|
31
|
+
static Vector &GetEntry(Vector &list) {
|
|
32
|
+
return ListVector::GetEntry(list);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
struct MapKeyArgFunctor {
|
|
37
|
+
// MAP is a LIST(STRUCT(K,V))
|
|
38
|
+
// meaning the MAP itself is a List, but the child vector that we're interested in (the keys)
|
|
39
|
+
// are a level deeper than the initial child vector
|
|
40
|
+
|
|
41
|
+
static Vector &GetList(Vector &map) {
|
|
42
|
+
return map;
|
|
43
|
+
}
|
|
44
|
+
static idx_t GetListSize(Vector &map) {
|
|
45
|
+
return ListVector::GetListSize(map);
|
|
46
|
+
}
|
|
47
|
+
static Vector &GetEntry(Vector &map) {
|
|
48
|
+
return MapVector::GetKeys(map);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
struct ContainsFunctor {
|
|
53
|
+
static inline bool Initialize() {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
static inline bool UpdateResultEntries(idx_t child_idx) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
struct PositionFunctor {
|
|
62
|
+
static inline int32_t Initialize() {
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
static inline int32_t UpdateResultEntries(idx_t child_idx) {
|
|
66
|
+
return child_idx + 1;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
23
70
|
struct VariableReturnBindData : public FunctionData {
|
|
24
71
|
LogicalType stype;
|
|
25
72
|
|
|
@@ -80,6 +127,18 @@ struct MapFromEntriesFun {
|
|
|
80
127
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
81
128
|
};
|
|
82
129
|
|
|
130
|
+
struct MapEntriesFun {
|
|
131
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
struct MapValuesFun {
|
|
135
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
struct MapKeysFun {
|
|
139
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
140
|
+
};
|
|
141
|
+
|
|
83
142
|
struct MapExtractFun {
|
|
84
143
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
85
144
|
};
|