duckdb 0.7.2-dev12.0 → 0.7.2-dev1238.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/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- 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 +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- 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/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/local_file_system.cpp +64 -7
- 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/progress_bar/progress_bar.cpp +7 -0
- 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/comparators.cpp +14 -5
- 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 +18 -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 +12 -10
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
- 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/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- 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_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- 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 +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- 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/operator/set/physical_recursive_cte.cpp +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -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_create_index.cpp +2 -1
- 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/radix_partitioned_hashtable.cpp +23 -15
- 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 +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
- 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/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- 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_sort.cpp +25 -18
- 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 +60 -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 +9 -12
- 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/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- 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/progress_bar/progress_bar.hpp +2 -0
- 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 +27 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
- 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 +35 -20
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- 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 +10 -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 +5 -1
- 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_config.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 +2 -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 +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- 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 +21 -7
- 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 +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- 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 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- 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 +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -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/capi/table_function-c.cpp +23 -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/main/settings/settings.cpp +20 -8
- 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 +3 -6
- 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 +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -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 -7
- 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 +85 -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 +10 -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 +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -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 +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -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_common_types.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
|
@@ -17,12 +17,28 @@
|
|
|
17
17
|
|
|
18
18
|
namespace duckdb {
|
|
19
19
|
|
|
20
|
+
class FormatSerializer;
|
|
21
|
+
class FormatDeserializer;
|
|
20
22
|
class Serializer;
|
|
21
23
|
class Deserializer;
|
|
22
24
|
class Value;
|
|
23
25
|
class TypeCatalogEntry;
|
|
24
26
|
class Vector;
|
|
25
27
|
class ClientContext;
|
|
28
|
+
class FieldWriter;
|
|
29
|
+
|
|
30
|
+
//! Extra Type Info Type
|
|
31
|
+
enum class ExtraTypeInfoType : uint8_t {
|
|
32
|
+
INVALID_TYPE_INFO = 0,
|
|
33
|
+
GENERIC_TYPE_INFO = 1,
|
|
34
|
+
DECIMAL_TYPE_INFO = 2,
|
|
35
|
+
STRING_TYPE_INFO = 3,
|
|
36
|
+
LIST_TYPE_INFO = 4,
|
|
37
|
+
STRUCT_TYPE_INFO = 5,
|
|
38
|
+
ENUM_TYPE_INFO = 6,
|
|
39
|
+
USER_TYPE_INFO = 7,
|
|
40
|
+
AGGREGATE_STATE_TYPE_INFO = 8
|
|
41
|
+
};
|
|
26
42
|
|
|
27
43
|
struct hugeint_t {
|
|
28
44
|
public:
|
|
@@ -32,7 +48,7 @@ public:
|
|
|
32
48
|
public:
|
|
33
49
|
DUCKDB_API hugeint_t() = default;
|
|
34
50
|
DUCKDB_API hugeint_t(int64_t value); // NOLINT: Allow implicit conversion from `int64_t`
|
|
35
|
-
DUCKDB_API constexpr hugeint_t(int64_t upper, uint64_t lower): lower(lower), upper(upper) {}
|
|
51
|
+
DUCKDB_API constexpr hugeint_t(int64_t upper, uint64_t lower): lower(lower), upper(upper) {}
|
|
36
52
|
DUCKDB_API constexpr hugeint_t(const hugeint_t &rhs) = default;
|
|
37
53
|
DUCKDB_API constexpr hugeint_t(hugeint_t &&rhs) = default;
|
|
38
54
|
DUCKDB_API hugeint_t &operator=(const hugeint_t &rhs) = default;
|
|
@@ -94,6 +110,12 @@ struct list_entry_t {
|
|
|
94
110
|
list_entry_t() = default;
|
|
95
111
|
list_entry_t(uint64_t offset, uint64_t length) : offset(offset), length(length) {
|
|
96
112
|
}
|
|
113
|
+
inline constexpr bool operator != (const list_entry_t &other) const {
|
|
114
|
+
return !(*this == other);
|
|
115
|
+
}
|
|
116
|
+
inline constexpr bool operator == (const list_entry_t &other) const {
|
|
117
|
+
return offset == other.offset && length == other.length;
|
|
118
|
+
}
|
|
97
119
|
|
|
98
120
|
uint64_t offset;
|
|
99
121
|
uint64_t length;
|
|
@@ -261,7 +283,6 @@ enum class LogicalTypeId : uint8_t {
|
|
|
261
283
|
|
|
262
284
|
HUGEINT = 50,
|
|
263
285
|
POINTER = 51,
|
|
264
|
-
// HASH = 52, // deprecated, uses UBIGINT instead
|
|
265
286
|
VALIDITY = 53,
|
|
266
287
|
UUID = 54,
|
|
267
288
|
|
|
@@ -275,8 +296,8 @@ enum class LogicalTypeId : uint8_t {
|
|
|
275
296
|
UNION = 107
|
|
276
297
|
};
|
|
277
298
|
|
|
278
|
-
struct ExtraTypeInfo;
|
|
279
299
|
|
|
300
|
+
struct ExtraTypeInfo;
|
|
280
301
|
|
|
281
302
|
struct aggregate_state_t;
|
|
282
303
|
|
|
@@ -298,6 +319,11 @@ struct LogicalType {
|
|
|
298
319
|
inline const ExtraTypeInfo *AuxInfo() const {
|
|
299
320
|
return type_info_.get();
|
|
300
321
|
}
|
|
322
|
+
|
|
323
|
+
inline shared_ptr<ExtraTypeInfo> GetAuxInfoShrPtr() const {
|
|
324
|
+
return type_info_;
|
|
325
|
+
}
|
|
326
|
+
|
|
301
327
|
inline void CopyAuxInfo(const LogicalType& other) {
|
|
302
328
|
type_info_ = other.type_info_;
|
|
303
329
|
}
|
|
@@ -314,7 +340,7 @@ struct LogicalType {
|
|
|
314
340
|
inline LogicalType& operator=(LogicalType&& other) noexcept {
|
|
315
341
|
id_ = other.id_;
|
|
316
342
|
physical_type_ = other.physical_type_;
|
|
317
|
-
|
|
343
|
+
std::swap(type_info_, other.type_info_);
|
|
318
344
|
return *this;
|
|
319
345
|
}
|
|
320
346
|
|
|
@@ -325,9 +351,16 @@ struct LogicalType {
|
|
|
325
351
|
|
|
326
352
|
//! Serializes a LogicalType to a stand-alone binary blob
|
|
327
353
|
DUCKDB_API void Serialize(Serializer &serializer) const;
|
|
354
|
+
|
|
355
|
+
DUCKDB_API void SerializeEnumType(Serializer &serializer) const;
|
|
356
|
+
|
|
328
357
|
//! Deserializes a blob back into an LogicalType
|
|
329
358
|
DUCKDB_API static LogicalType Deserialize(Deserializer &source);
|
|
330
359
|
|
|
360
|
+
DUCKDB_API void FormatSerialize(FormatSerializer &serializer) const;
|
|
361
|
+
DUCKDB_API static LogicalType FormatDeserialize(FormatDeserializer &deserializer);
|
|
362
|
+
|
|
363
|
+
|
|
331
364
|
DUCKDB_API static bool TypeIsTimestamp(LogicalTypeId id) {
|
|
332
365
|
return (id == LogicalTypeId::TIMESTAMP ||
|
|
333
366
|
id == LogicalTypeId::TIMESTAMP_MS ||
|
|
@@ -350,6 +383,8 @@ struct LogicalType {
|
|
|
350
383
|
DUCKDB_API static void SetCatalog(LogicalType &type, TypeCatalogEntry* catalog_entry);
|
|
351
384
|
DUCKDB_API static TypeCatalogEntry* GetCatalog(const LogicalType &type);
|
|
352
385
|
|
|
386
|
+
DUCKDB_API static ExtraTypeInfoType GetExtraTypeInfoType(const ExtraTypeInfo &type);
|
|
387
|
+
|
|
353
388
|
//! Gets the decimal properties of a numeric type. Fails if the type is not numeric.
|
|
354
389
|
DUCKDB_API bool GetDecimalProperties(uint8_t &width, uint8_t &scale) const;
|
|
355
390
|
|
|
@@ -404,10 +439,10 @@ public:
|
|
|
404
439
|
// explicitly allowing these functions to be capitalized to be in-line with the remaining functions
|
|
405
440
|
DUCKDB_API static LogicalType DECIMAL(int width, int scale); // NOLINT
|
|
406
441
|
DUCKDB_API static LogicalType VARCHAR_COLLATION(string collation); // NOLINT
|
|
407
|
-
DUCKDB_API static LogicalType LIST( LogicalType child); // NOLINT
|
|
408
|
-
DUCKDB_API static LogicalType STRUCT( child_list_t<LogicalType> children); // NOLINT
|
|
442
|
+
DUCKDB_API static LogicalType LIST(const LogicalType &child); // NOLINT
|
|
443
|
+
DUCKDB_API static LogicalType STRUCT(const child_list_t<LogicalType> &children); // NOLINT
|
|
409
444
|
DUCKDB_API static LogicalType AGGREGATE_STATE(aggregate_state_t state_type); // NOLINT
|
|
410
|
-
DUCKDB_API static LogicalType MAP(LogicalType child); // NOLINT
|
|
445
|
+
DUCKDB_API static LogicalType MAP(const LogicalType &child); // NOLINT
|
|
411
446
|
DUCKDB_API static LogicalType MAP( child_list_t<LogicalType> children); // NOLINT
|
|
412
447
|
DUCKDB_API static LogicalType MAP(LogicalType key, LogicalType value); // NOLINT
|
|
413
448
|
DUCKDB_API static LogicalType UNION( child_list_t<LogicalType> members); // NOLINT
|
|
@@ -442,12 +477,14 @@ struct UserType{
|
|
|
442
477
|
struct EnumType{
|
|
443
478
|
DUCKDB_API static const string &GetTypeName(const LogicalType &type);
|
|
444
479
|
DUCKDB_API static int64_t GetPos(const LogicalType &type, const string_t& key);
|
|
445
|
-
DUCKDB_API static Vector &GetValuesInsertOrder(const LogicalType &type);
|
|
480
|
+
DUCKDB_API static const Vector &GetValuesInsertOrder(const LogicalType &type);
|
|
446
481
|
DUCKDB_API static idx_t GetSize(const LogicalType &type);
|
|
447
482
|
DUCKDB_API static const string GetValue(const Value &val);
|
|
448
483
|
DUCKDB_API static void SetCatalog(LogicalType &type, TypeCatalogEntry* catalog_entry);
|
|
449
484
|
DUCKDB_API static TypeCatalogEntry* GetCatalog(const LogicalType &type);
|
|
485
|
+
DUCKDB_API static string GetSchemaName(const LogicalType &type);
|
|
450
486
|
DUCKDB_API static PhysicalType GetPhysicalType(const LogicalType &type);
|
|
487
|
+
DUCKDB_API static void Serialize(FieldWriter& writer, const ExtraTypeInfo& type_info, bool serialize_internals);
|
|
451
488
|
};
|
|
452
489
|
|
|
453
490
|
struct StructType {
|
|
@@ -209,8 +209,8 @@ public:
|
|
|
209
209
|
|
|
210
210
|
template <class INPUT_TYPE, class RESULT_TYPE, class OP>
|
|
211
211
|
static void ExecuteString(Vector &input, Vector &result, idx_t count) {
|
|
212
|
-
UnaryExecutor::GenericExecute<
|
|
213
|
-
|
|
212
|
+
UnaryExecutor::GenericExecute<INPUT_TYPE, RESULT_TYPE, UnaryStringOperator<OP>>(input, result, count,
|
|
213
|
+
(void *)&result);
|
|
214
214
|
}
|
|
215
215
|
};
|
|
216
216
|
|
|
@@ -62,6 +62,20 @@ struct AggregateHTScanState {
|
|
|
62
62
|
idx_t scan_position = 0;
|
|
63
63
|
};
|
|
64
64
|
|
|
65
|
+
struct AggregateHTAppendState {
|
|
66
|
+
AggregateHTAppendState();
|
|
67
|
+
|
|
68
|
+
Vector ht_offsets;
|
|
69
|
+
Vector hash_salts;
|
|
70
|
+
SelectionVector group_compare_vector;
|
|
71
|
+
SelectionVector no_match_vector;
|
|
72
|
+
SelectionVector empty_vector;
|
|
73
|
+
SelectionVector new_groups;
|
|
74
|
+
Vector addresses;
|
|
75
|
+
unique_ptr<UnifiedVectorFormat[]> group_data;
|
|
76
|
+
DataChunk group_chunk;
|
|
77
|
+
};
|
|
78
|
+
|
|
65
79
|
class GroupedAggregateHashTable : public BaseAggregateHashTable {
|
|
66
80
|
public:
|
|
67
81
|
//! The hash table load factor, when a resize is triggered
|
|
@@ -71,10 +85,12 @@ public:
|
|
|
71
85
|
public:
|
|
72
86
|
GroupedAggregateHashTable(ClientContext &context, Allocator &allocator, vector<LogicalType> group_types,
|
|
73
87
|
vector<LogicalType> payload_types, const vector<BoundAggregateExpression *> &aggregates,
|
|
74
|
-
HtEntryType entry_type = HtEntryType::HT_WIDTH_64
|
|
88
|
+
HtEntryType entry_type = HtEntryType::HT_WIDTH_64,
|
|
89
|
+
idx_t initial_capacity = InitialCapacity());
|
|
75
90
|
GroupedAggregateHashTable(ClientContext &context, Allocator &allocator, vector<LogicalType> group_types,
|
|
76
91
|
vector<LogicalType> payload_types, vector<AggregateObject> aggregates,
|
|
77
|
-
HtEntryType entry_type = HtEntryType::HT_WIDTH_64
|
|
92
|
+
HtEntryType entry_type = HtEntryType::HT_WIDTH_64,
|
|
93
|
+
idx_t initial_capacity = InitialCapacity());
|
|
78
94
|
GroupedAggregateHashTable(ClientContext &context, Allocator &allocator, vector<LogicalType> group_types);
|
|
79
95
|
~GroupedAggregateHashTable() override;
|
|
80
96
|
|
|
@@ -85,9 +101,10 @@ public:
|
|
|
85
101
|
//! Add the given data to the HT, computing the aggregates grouped by the
|
|
86
102
|
//! data in the group chunk. When resize = true, aggregates will not be
|
|
87
103
|
//! computed but instead just assigned.
|
|
88
|
-
idx_t AddChunk(DataChunk &groups, DataChunk &payload, const vector<idx_t> &filter);
|
|
89
|
-
idx_t AddChunk(DataChunk &groups, Vector &group_hashes, DataChunk &payload,
|
|
90
|
-
|
|
104
|
+
idx_t AddChunk(AggregateHTAppendState &state, DataChunk &groups, DataChunk &payload, const vector<idx_t> &filter);
|
|
105
|
+
idx_t AddChunk(AggregateHTAppendState &state, DataChunk &groups, Vector &group_hashes, DataChunk &payload,
|
|
106
|
+
const vector<idx_t> &filter);
|
|
107
|
+
idx_t AddChunk(AggregateHTAppendState &state, DataChunk &groups, DataChunk &payload, AggregateType filter);
|
|
91
108
|
|
|
92
109
|
//! Scan the HT starting from the scan_position until the result and group
|
|
93
110
|
//! chunks are filled. scan_position will be updated by this function.
|
|
@@ -100,19 +117,26 @@ public:
|
|
|
100
117
|
//! Finds or creates groups in the hashtable using the specified group keys. The addresses vector will be filled
|
|
101
118
|
//! with pointers to the groups in the hash table, and the new_groups selection vector will point to the newly
|
|
102
119
|
//! created groups. The return value is the amount of newly created groups.
|
|
103
|
-
idx_t FindOrCreateGroups(
|
|
120
|
+
idx_t FindOrCreateGroups(AggregateHTAppendState &state, DataChunk &groups, Vector &group_hashes,
|
|
121
|
+
Vector &addresses_out, SelectionVector &new_groups_out);
|
|
122
|
+
idx_t FindOrCreateGroups(AggregateHTAppendState &state, DataChunk &groups, Vector &addresses_out,
|
|
104
123
|
SelectionVector &new_groups_out);
|
|
105
|
-
|
|
106
|
-
void FindOrCreateGroups(DataChunk &groups, Vector &addresses_out);
|
|
124
|
+
void FindOrCreateGroups(AggregateHTAppendState &state, DataChunk &groups, Vector &addresses_out);
|
|
107
125
|
|
|
108
126
|
//! Executes the filter(if any) and update the aggregates
|
|
109
127
|
void Combine(GroupedAggregateHashTable &other);
|
|
110
128
|
|
|
129
|
+
static idx_t InitialCapacity();
|
|
111
130
|
idx_t Size() {
|
|
112
131
|
return entries;
|
|
113
132
|
}
|
|
133
|
+
idx_t Capacity() {
|
|
134
|
+
return capacity;
|
|
135
|
+
}
|
|
114
136
|
|
|
137
|
+
idx_t ResizeThreshold();
|
|
115
138
|
idx_t MaxCapacity();
|
|
139
|
+
static idx_t GetMaxCapacity(HtEntryType entry_type, idx_t tuple_size);
|
|
116
140
|
|
|
117
141
|
void Partition(vector<GroupedAggregateHashTable *> &partition_hts, hash_t mask, idx_t shift);
|
|
118
142
|
|
|
@@ -137,8 +161,7 @@ private:
|
|
|
137
161
|
//! The hashes of the HT
|
|
138
162
|
BufferHandle hashes_hdl;
|
|
139
163
|
data_ptr_t hashes_hdl_ptr;
|
|
140
|
-
|
|
141
|
-
idx_t hash_offset; // Offset into the layout of the hash column
|
|
164
|
+
idx_t hash_offset; // Offset into the layout of the hash column
|
|
142
165
|
|
|
143
166
|
hash_t hash_prefix_shift;
|
|
144
167
|
idx_t payload_page_offset;
|
|
@@ -146,16 +169,8 @@ private:
|
|
|
146
169
|
//! Bitmask for getting relevant bits from the hashes to determine the position
|
|
147
170
|
hash_t bitmask;
|
|
148
171
|
|
|
149
|
-
vector<unique_ptr<GroupedAggregateHashTable>> distinct_hashes;
|
|
150
|
-
|
|
151
172
|
bool is_finalized;
|
|
152
173
|
|
|
153
|
-
// some stuff from FindOrCreateGroupsInternal() to avoid allocation there
|
|
154
|
-
Vector ht_offsets;
|
|
155
|
-
Vector hash_salts;
|
|
156
|
-
SelectionVector group_compare_vector;
|
|
157
|
-
SelectionVector no_match_vector;
|
|
158
|
-
SelectionVector empty_vector;
|
|
159
174
|
vector<ExpressionType> predicates;
|
|
160
175
|
|
|
161
176
|
private:
|
|
@@ -175,8 +190,8 @@ private:
|
|
|
175
190
|
template <class ENTRY>
|
|
176
191
|
void Resize(idx_t size);
|
|
177
192
|
template <class ENTRY>
|
|
178
|
-
idx_t FindOrCreateGroupsInternal(
|
|
179
|
-
SelectionVector &new_groups);
|
|
193
|
+
idx_t FindOrCreateGroupsInternal(AggregateHTAppendState &state, DataChunk &groups, Vector &group_hashes,
|
|
194
|
+
Vector &addresses, SelectionVector &new_groups);
|
|
180
195
|
|
|
181
196
|
template <class FUNC = std::function<void(idx_t, idx_t, data_ptr_t)>>
|
|
182
197
|
void PayloadApply(FUNC fun);
|
|
@@ -27,18 +27,7 @@
|
|
|
27
27
|
namespace duckdb {
|
|
28
28
|
|
|
29
29
|
class ConflictManager;
|
|
30
|
-
|
|
31
|
-
struct ARTIndexScanState : public IndexScanState {
|
|
32
|
-
|
|
33
|
-
//! Scan predicates (single predicate scan or range scan)
|
|
34
|
-
Value values[2];
|
|
35
|
-
//! Expressions of the scan predicates
|
|
36
|
-
ExpressionType expressions[2];
|
|
37
|
-
bool checked = false;
|
|
38
|
-
//! All scanned row IDs
|
|
39
|
-
vector<row_t> result_ids;
|
|
40
|
-
Iterator iterator;
|
|
41
|
-
};
|
|
30
|
+
struct ARTIndexScanState;
|
|
42
31
|
|
|
43
32
|
enum class VerifyExistenceType : uint8_t {
|
|
44
33
|
APPEND = 0, // appends to a table
|
|
@@ -72,7 +61,7 @@ public:
|
|
|
72
61
|
vector<row_t> &result_ids) override;
|
|
73
62
|
|
|
74
63
|
//! Called when data is appended to the index. The lock obtained from InitializeLock must be held
|
|
75
|
-
|
|
64
|
+
PreservedError Append(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override;
|
|
76
65
|
//! Verify that data can be appended to the index without a constraint violation
|
|
77
66
|
void VerifyAppend(DataChunk &chunk) override;
|
|
78
67
|
//! Verify that data can be appended to the index without a constraint violation using the conflict manager
|
|
@@ -80,7 +69,7 @@ public:
|
|
|
80
69
|
//! Delete a chunk of entries from the index. The lock obtained from InitializeLock must be held
|
|
81
70
|
void Delete(IndexLock &lock, DataChunk &entries, Vector &row_identifiers) override;
|
|
82
71
|
//! Insert a chunk of entries into the index
|
|
83
|
-
|
|
72
|
+
PreservedError Insert(IndexLock &lock, DataChunk &data, Vector &row_ids) override;
|
|
84
73
|
|
|
85
74
|
//! Construct an ART from a vector of sorted keys
|
|
86
75
|
bool ConstructFromSorted(idx_t count, vector<Key> &keys, Vector &row_identifiers);
|
|
@@ -20,7 +20,7 @@ class PhysicalPerfectHashAggregate : public PhysicalOperator {
|
|
|
20
20
|
public:
|
|
21
21
|
PhysicalPerfectHashAggregate(ClientContext &context, vector<LogicalType> types,
|
|
22
22
|
vector<unique_ptr<Expression>> aggregates, vector<unique_ptr<Expression>> groups,
|
|
23
|
-
vector<unique_ptr<BaseStatistics>> group_stats, vector<idx_t> required_bits,
|
|
23
|
+
const vector<unique_ptr<BaseStatistics>> &group_stats, vector<idx_t> required_bits,
|
|
24
24
|
idx_t estimated_cardinality);
|
|
25
25
|
|
|
26
26
|
//! The groups
|
|
@@ -60,10 +60,12 @@ public:
|
|
|
60
60
|
|
|
61
61
|
OperatorResultType Execute(DataChunk &input, DataChunk &output);
|
|
62
62
|
|
|
63
|
+
// returns if the left side is scanned as a constant vector
|
|
63
64
|
bool ScanLHS() {
|
|
64
65
|
return scan_input_chunk;
|
|
65
66
|
}
|
|
66
67
|
|
|
68
|
+
// returns the position in the chunk of chunk scanned as a constant input vector
|
|
67
69
|
idx_t PositionInChunk() {
|
|
68
70
|
return position_in_chunk;
|
|
69
71
|
}
|
|
@@ -87,6 +87,7 @@ public:
|
|
|
87
87
|
// we have data left to read from the file
|
|
88
88
|
// read directly into the buffer
|
|
89
89
|
auto bytes_read = file_handle->Read((char *)buffer + result_offset, nr_bytes - result_offset);
|
|
90
|
+
file_size = file_handle->GetFileSize();
|
|
90
91
|
read_position += bytes_read;
|
|
91
92
|
if (reset_enabled) {
|
|
92
93
|
// if reset caching is enabled, we need to cache the bytes that we have read
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#include "duckdb/common/types/value.hpp"
|
|
15
15
|
#include "duckdb/common/field_writer.hpp"
|
|
16
16
|
#include "duckdb/common/case_insensitive_map.hpp"
|
|
17
|
+
#include "duckdb/common/types.hpp"
|
|
17
18
|
|
|
18
19
|
namespace duckdb {
|
|
19
20
|
|
|
@@ -77,12 +78,19 @@ struct BufferedCSVReaderOptions {
|
|
|
77
78
|
vector<LogicalType> sql_type_list;
|
|
78
79
|
//! User-defined name list
|
|
79
80
|
vector<string> name_list;
|
|
81
|
+
//! Types considered as candidates for auto detection ordered by descending specificity (~ from high to low)
|
|
82
|
+
vector<LogicalType> auto_type_candidates = {LogicalType::VARCHAR, LogicalType::TIMESTAMP, LogicalType::DATE,
|
|
83
|
+
LogicalType::TIME, LogicalType::DOUBLE, LogicalType::BIGINT,
|
|
84
|
+
LogicalType::BOOLEAN, LogicalType::SQLNULL};
|
|
85
|
+
|
|
80
86
|
//===--------------------------------------------------------------------===//
|
|
81
87
|
// ReadCSVOptions
|
|
82
88
|
//===--------------------------------------------------------------------===//
|
|
83
89
|
|
|
84
90
|
//! How many leading rows to skip
|
|
85
91
|
idx_t skip_rows = 0;
|
|
92
|
+
//! Whether or not the skip_rows is set by the user
|
|
93
|
+
bool skip_rows_set = false;
|
|
86
94
|
//! Maximum CSV line size: specified because if we reach this amount, we likely have wrong delimiters (default: 2MB)
|
|
87
95
|
//! note that this is the guaranteed line length that will succeed, longer lines may be accepted if slightly above
|
|
88
96
|
idx_t maximum_line_size = 2097152;
|
|
@@ -110,6 +118,8 @@ struct BufferedCSVReaderOptions {
|
|
|
110
118
|
idx_t buffer_size = CSVBuffer::INITIAL_BUFFER_SIZE_COLOSSAL;
|
|
111
119
|
//! Decimal separator when reading as numeric
|
|
112
120
|
string decimal_separator = ".";
|
|
121
|
+
//! Whether or not to pad rows that do not have enough columns with NULL values
|
|
122
|
+
bool null_padding = true;
|
|
113
123
|
|
|
114
124
|
//===--------------------------------------------------------------------===//
|
|
115
125
|
// WriteCSVOptions
|
|
@@ -30,6 +30,11 @@ public:
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
string ParamsToString() const override;
|
|
33
|
+
|
|
34
|
+
static unique_ptr<PhysicalOperator>
|
|
35
|
+
CreateJoinProjection(vector<LogicalType> proj_types, const vector<LogicalType> &lhs_types,
|
|
36
|
+
const vector<LogicalType> &rhs_types, const vector<idx_t> &left_projection_map,
|
|
37
|
+
const vector<idx_t> &right_projection_map, const idx_t estimated_cardinality);
|
|
33
38
|
};
|
|
34
39
|
|
|
35
40
|
} // namespace duckdb
|
|
@@ -54,12 +54,16 @@ private:
|
|
|
54
54
|
vector<idx_t> sel_vector_sizes;
|
|
55
55
|
DataChunk group_subset, payload_subset;
|
|
56
56
|
Vector hashes, hashes_subset;
|
|
57
|
+
AggregateHTAppendState append_state;
|
|
57
58
|
|
|
58
59
|
HashTableList unpartitioned_hts;
|
|
59
|
-
|
|
60
|
+
vector<HashTableList> radix_partitioned_hts;
|
|
61
|
+
idx_t tuple_size;
|
|
60
62
|
|
|
61
63
|
private:
|
|
62
64
|
idx_t ListAddChunk(HashTableList &list, DataChunk &groups, Vector &group_hashes, DataChunk &payload,
|
|
63
65
|
const vector<idx_t> &filter);
|
|
66
|
+
//! Returns the HT entry size used for intermediate hash tables
|
|
67
|
+
HtEntryType GetHTEntrySize();
|
|
64
68
|
};
|
|
65
69
|
} // 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
|