duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.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
|
@@ -8,58 +8,29 @@
|
|
|
8
8
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
|
-
#include "duckdb/
|
|
12
|
-
#include "duckdb/parser/expression_map.hpp"
|
|
13
|
-
#include "duckdb/planner/expression_binder.hpp"
|
|
11
|
+
#include "duckdb/planner/expression_binder/base_select_binder.hpp"
|
|
14
12
|
|
|
15
13
|
namespace duckdb {
|
|
16
|
-
class BoundColumnRefExpression;
|
|
17
|
-
class WindowExpression;
|
|
18
|
-
|
|
19
|
-
class BoundSelectNode;
|
|
20
|
-
|
|
21
|
-
struct BoundGroupInformation {
|
|
22
|
-
expression_map_t<idx_t> map;
|
|
23
|
-
case_insensitive_map_t<idx_t> alias_map;
|
|
24
|
-
};
|
|
25
14
|
|
|
26
15
|
//! The SELECT binder is responsible for binding an expression within the SELECT clause of a SQL statement
|
|
27
|
-
class SelectBinder : public
|
|
16
|
+
class SelectBinder : public BaseSelectBinder {
|
|
28
17
|
public:
|
|
29
18
|
SelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info,
|
|
30
19
|
case_insensitive_map_t<idx_t> alias_map);
|
|
31
20
|
SelectBinder(Binder &binder, ClientContext &context, BoundSelectNode &node, BoundGroupInformation &info);
|
|
32
21
|
|
|
33
|
-
bool
|
|
34
|
-
return
|
|
22
|
+
bool HasExpandedExpressions() {
|
|
23
|
+
return !expanded_expressions.empty();
|
|
35
24
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this->bound_columns.clear();
|
|
25
|
+
vector<unique_ptr<Expression>> &ExpandedExpressions() {
|
|
26
|
+
return expanded_expressions;
|
|
39
27
|
}
|
|
40
28
|
|
|
41
29
|
protected:
|
|
42
|
-
BindResult
|
|
43
|
-
bool root_expression = false) override;
|
|
44
|
-
|
|
45
|
-
BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth) override;
|
|
46
|
-
|
|
47
|
-
BindResult BindUnnest(FunctionExpression &function, idx_t depth) override;
|
|
48
|
-
|
|
49
|
-
bool inside_window;
|
|
50
|
-
bool bound_aggregate = false;
|
|
51
|
-
|
|
52
|
-
BoundSelectNode &node;
|
|
53
|
-
BoundGroupInformation &info;
|
|
54
|
-
case_insensitive_map_t<idx_t> alias_map;
|
|
55
|
-
|
|
56
|
-
protected:
|
|
57
|
-
BindResult BindColumnRef(unique_ptr<ParsedExpression> *expr_ptr, idx_t depth);
|
|
58
|
-
BindResult BindGroupingFunction(OperatorExpression &op, idx_t depth) override;
|
|
59
|
-
BindResult BindWindow(WindowExpression &expr, idx_t depth);
|
|
30
|
+
BindResult BindUnnest(FunctionExpression &function, idx_t depth, bool root_expression) override;
|
|
60
31
|
|
|
61
|
-
idx_t
|
|
62
|
-
|
|
32
|
+
idx_t unnest_level = 0;
|
|
33
|
+
vector<unique_ptr<Expression>> expanded_expressions;
|
|
63
34
|
};
|
|
64
35
|
|
|
65
36
|
} // namespace duckdb
|
|
@@ -135,7 +135,7 @@ protected:
|
|
|
135
135
|
virtual BindResult BindFunction(FunctionExpression &expr, ScalarFunctionCatalogEntry *function, idx_t depth);
|
|
136
136
|
virtual BindResult BindLambdaFunction(FunctionExpression &expr, ScalarFunctionCatalogEntry *function, idx_t depth);
|
|
137
137
|
virtual BindResult BindAggregate(FunctionExpression &expr, AggregateFunctionCatalogEntry *function, idx_t depth);
|
|
138
|
-
virtual BindResult BindUnnest(FunctionExpression &expr, idx_t depth);
|
|
138
|
+
virtual BindResult BindUnnest(FunctionExpression &expr, idx_t depth, bool root_expression);
|
|
139
139
|
virtual BindResult BindMacro(FunctionExpression &expr, ScalarMacroCatalogEntry *macro, idx_t depth,
|
|
140
140
|
unique_ptr<ParsedExpression> *expr_ptr);
|
|
141
141
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#include "duckdb/planner/operator/logical_aggregate.hpp"
|
|
2
2
|
#include "duckdb/planner/operator/logical_any_join.hpp"
|
|
3
|
+
#include "duckdb/planner/operator/logical_asof_join.hpp"
|
|
3
4
|
#include "duckdb/planner/operator/logical_column_data_get.hpp"
|
|
4
5
|
#include "duckdb/planner/operator/logical_comparison_join.hpp"
|
|
5
6
|
#include "duckdb/planner/operator/logical_copy_to_file.hpp"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/planner/operator/logical_asof_join.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/planner/operator/logical_comparison_join.hpp"
|
|
12
|
+
|
|
13
|
+
namespace duckdb {
|
|
14
|
+
|
|
15
|
+
//! LogicalAsOfJoin represents a temporal-style join with one less-than inequality.
|
|
16
|
+
//! This inequality matches the greatest value on the right that satisfies the condition.
|
|
17
|
+
class LogicalAsOfJoin : public LogicalComparisonJoin {
|
|
18
|
+
public:
|
|
19
|
+
explicit LogicalAsOfJoin(JoinType type);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
} // namespace duckdb
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/constants.hpp"
|
|
12
|
+
#include "duckdb/common/enums/joinref_type.hpp"
|
|
12
13
|
#include "duckdb/common/unordered_set.hpp"
|
|
13
14
|
#include "duckdb/planner/joinside.hpp"
|
|
14
15
|
#include "duckdb/planner/operator/logical_join.hpp"
|
|
@@ -34,10 +35,12 @@ public:
|
|
|
34
35
|
FieldReader &reader);
|
|
35
36
|
|
|
36
37
|
public:
|
|
37
|
-
static unique_ptr<LogicalOperator> CreateJoin(JoinType type,
|
|
38
|
+
static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
|
|
39
|
+
unique_ptr<LogicalOperator> left_child,
|
|
38
40
|
unique_ptr<LogicalOperator> right_child,
|
|
39
41
|
unique_ptr<Expression> condition);
|
|
40
|
-
static unique_ptr<LogicalOperator> CreateJoin(JoinType type,
|
|
42
|
+
static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
|
|
43
|
+
unique_ptr<LogicalOperator> left_child,
|
|
41
44
|
unique_ptr<LogicalOperator> right_child,
|
|
42
45
|
vector<JoinCondition> conditions,
|
|
43
46
|
vector<unique_ptr<Expression>> arbitrary_expressions);
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/planner/logical_operator.hpp"
|
|
12
|
+
#include "duckdb/planner/bound_result_modifier.hpp"
|
|
12
13
|
|
|
13
14
|
namespace duckdb {
|
|
14
15
|
|
|
@@ -22,6 +23,8 @@ public:
|
|
|
22
23
|
}
|
|
23
24
|
//! The set of distinct targets (optional).
|
|
24
25
|
vector<unique_ptr<Expression>> distinct_targets;
|
|
26
|
+
//! The order by modifier (optional, only for distinct on)
|
|
27
|
+
unique_ptr<BoundOrderModifier> order_by;
|
|
25
28
|
|
|
26
29
|
public:
|
|
27
30
|
string ParamsToString() const override;
|
|
@@ -25,6 +25,13 @@ public:
|
|
|
25
25
|
vector<GroupingSet> grouping_sets;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
+
struct BoundUnnestNode {
|
|
29
|
+
//! The index of the UNNEST node
|
|
30
|
+
idx_t index;
|
|
31
|
+
//! The set of expressions
|
|
32
|
+
vector<unique_ptr<Expression>> expressions;
|
|
33
|
+
};
|
|
34
|
+
|
|
28
35
|
//! Bound equivalent of SelectNode
|
|
29
36
|
class BoundSelectNode : public BoundQueryNode {
|
|
30
37
|
public:
|
|
@@ -78,9 +85,8 @@ public:
|
|
|
78
85
|
//! Window functions to compute (only used if HasWindow is true)
|
|
79
86
|
vector<unique_ptr<Expression>> windows;
|
|
80
87
|
|
|
81
|
-
idx_t unnest_index;
|
|
82
88
|
//! Unnest expression
|
|
83
|
-
|
|
89
|
+
unordered_map<idx_t, BoundUnnestNode> unnests;
|
|
84
90
|
|
|
85
91
|
//! Index of pruned node
|
|
86
92
|
idx_t prune_index;
|
|
@@ -17,6 +17,7 @@ namespace duckdb {
|
|
|
17
17
|
class BlockManager;
|
|
18
18
|
class BufferHandle;
|
|
19
19
|
class BufferManager;
|
|
20
|
+
class BufferPool;
|
|
20
21
|
class DatabaseInstance;
|
|
21
22
|
class FileBuffer;
|
|
22
23
|
|
|
@@ -55,6 +56,7 @@ class BlockHandle {
|
|
|
55
56
|
friend struct BufferEvictionNode;
|
|
56
57
|
friend class BufferHandle;
|
|
57
58
|
friend class BufferManager;
|
|
59
|
+
friend class BufferPool;
|
|
58
60
|
|
|
59
61
|
public:
|
|
60
62
|
BlockHandle(BlockManager &block_manager, block_id_t block_id);
|
|
@@ -23,23 +23,75 @@ class DatabaseInstance;
|
|
|
23
23
|
class TemporaryDirectoryHandle;
|
|
24
24
|
struct EvictionQueue;
|
|
25
25
|
|
|
26
|
+
//! The BufferPool is in charge of handling memory management for one or more databases. It defines memory limits
|
|
27
|
+
//! and implements priority eviction among all users of the pool.
|
|
28
|
+
class BufferPool {
|
|
29
|
+
friend class BlockHandle;
|
|
30
|
+
friend class BlockManager;
|
|
31
|
+
friend class BufferManager;
|
|
32
|
+
|
|
33
|
+
public:
|
|
34
|
+
explicit BufferPool(idx_t maximum_memory);
|
|
35
|
+
virtual ~BufferPool();
|
|
36
|
+
|
|
37
|
+
//! Set a new memory limit to the buffer pool, throws an exception if the new limit is too low and not enough
|
|
38
|
+
//! blocks can be evicted
|
|
39
|
+
void SetLimit(idx_t limit, const char *exception_postscript);
|
|
40
|
+
|
|
41
|
+
idx_t GetUsedMemory() {
|
|
42
|
+
return current_memory;
|
|
43
|
+
}
|
|
44
|
+
idx_t GetMaxMemory() {
|
|
45
|
+
return maximum_memory;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
protected:
|
|
49
|
+
//! Evict blocks until the currently used memory + extra_memory fit, returns false if this was not possible
|
|
50
|
+
//! (i.e. not enough blocks could be evicted)
|
|
51
|
+
//! If the "buffer" argument is specified AND the system can find a buffer to re-use for the given allocation size
|
|
52
|
+
//! "buffer" will be made to point to the re-usable memory. Note that this is not guaranteed.
|
|
53
|
+
//! Returns a pair. result.first indicates if eviction was successful. result.second contains the
|
|
54
|
+
//! reservation handle, which can be moved to the BlockHandle that will own the reservation.
|
|
55
|
+
struct EvictionResult {
|
|
56
|
+
bool success;
|
|
57
|
+
TempBufferPoolReservation reservation;
|
|
58
|
+
};
|
|
59
|
+
virtual EvictionResult EvictBlocks(idx_t extra_memory, idx_t memory_limit,
|
|
60
|
+
unique_ptr<FileBuffer> *buffer = nullptr);
|
|
61
|
+
|
|
62
|
+
//! Garbage collect eviction queue
|
|
63
|
+
void PurgeQueue();
|
|
64
|
+
void AddToEvictionQueue(shared_ptr<BlockHandle> &handle);
|
|
65
|
+
|
|
66
|
+
private:
|
|
67
|
+
//! The lock for changing the memory limit
|
|
68
|
+
mutex limit_lock;
|
|
69
|
+
//! The current amount of memory that is occupied by the buffer manager (in bytes)
|
|
70
|
+
atomic<idx_t> current_memory;
|
|
71
|
+
//! The maximum amount of memory that the buffer manager can keep (in bytes)
|
|
72
|
+
atomic<idx_t> maximum_memory;
|
|
73
|
+
//! Eviction queue
|
|
74
|
+
unique_ptr<EvictionQueue> queue;
|
|
75
|
+
//! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue.
|
|
76
|
+
atomic<uint32_t> queue_insertions;
|
|
77
|
+
};
|
|
78
|
+
|
|
26
79
|
struct TemporaryFileInformation {
|
|
27
80
|
string path;
|
|
28
81
|
idx_t size;
|
|
29
82
|
};
|
|
30
83
|
|
|
31
|
-
//! The
|
|
32
|
-
//!
|
|
33
|
-
|
|
34
|
-
//!
|
|
35
|
-
//! can be shared by many BlockManagers.
|
|
84
|
+
//! The BufferManager is in charge of handling memory management for a singke database. It cooperatively shares a
|
|
85
|
+
//! BufferPool with other BufferManagers, belonging to different databases. It hands out memory buffers that can
|
|
86
|
+
//! be used by the database internally, and offers configuration options specific to a database, which need not be
|
|
87
|
+
//! shared by the BufferPool, including whether to support swapping temp buffers to disk, and where to swap them to.
|
|
36
88
|
class BufferManager {
|
|
37
89
|
friend class BufferHandle;
|
|
38
90
|
friend class BlockHandle;
|
|
39
91
|
friend class BlockManager;
|
|
40
92
|
|
|
41
93
|
public:
|
|
42
|
-
BufferManager(DatabaseInstance &db, string temp_directory
|
|
94
|
+
BufferManager(DatabaseInstance &db, string temp_directory);
|
|
43
95
|
virtual ~BufferManager();
|
|
44
96
|
|
|
45
97
|
//! Registers an in-memory buffer that cannot be unloaded until it is destroyed
|
|
@@ -58,21 +110,17 @@ public:
|
|
|
58
110
|
BufferHandle Pin(shared_ptr<BlockHandle> &handle);
|
|
59
111
|
void Unpin(shared_ptr<BlockHandle> &handle);
|
|
60
112
|
|
|
61
|
-
//! Set a new memory limit to the buffer manager, throws an exception if the new limit is too low and not enough
|
|
62
|
-
//! blocks can be evicted
|
|
63
|
-
void SetLimit(idx_t limit = (idx_t)-1);
|
|
64
|
-
|
|
65
113
|
DUCKDB_API static BufferManager &GetBufferManager(ClientContext &context);
|
|
66
114
|
DUCKDB_API static BufferManager &GetBufferManager(DatabaseInstance &db);
|
|
67
115
|
DUCKDB_API static BufferManager &GetBufferManager(AttachedDatabase &db);
|
|
68
116
|
|
|
69
117
|
//! Returns the currently allocated memory
|
|
70
118
|
idx_t GetUsedMemory() {
|
|
71
|
-
return current_memory;
|
|
119
|
+
return buffer_pool.current_memory;
|
|
72
120
|
}
|
|
73
121
|
//! Returns the maximum available memory
|
|
74
122
|
idx_t GetMaxMemory() {
|
|
75
|
-
return maximum_memory;
|
|
123
|
+
return buffer_pool.maximum_memory;
|
|
76
124
|
}
|
|
77
125
|
|
|
78
126
|
//! Increases the currently allocated memory, but the actual allocation does not go through the buffer manager
|
|
@@ -92,6 +140,10 @@ public:
|
|
|
92
140
|
return db;
|
|
93
141
|
}
|
|
94
142
|
|
|
143
|
+
BufferPool &GetBufferPool() {
|
|
144
|
+
return buffer_pool;
|
|
145
|
+
}
|
|
146
|
+
|
|
95
147
|
static idx_t GetAllocSize(idx_t block_size) {
|
|
96
148
|
return AlignValue<idx_t, Storage::SECTOR_SIZE>(block_size + Storage::BLOCK_HEADER_SIZE);
|
|
97
149
|
}
|
|
@@ -103,6 +155,11 @@ public:
|
|
|
103
155
|
DUCKDB_API void ReserveMemory(idx_t size);
|
|
104
156
|
DUCKDB_API void FreeReservedMemory(idx_t size);
|
|
105
157
|
|
|
158
|
+
//! Set a new memory limit to the buffer pool, throws an exception if the new limit is too low and not enough
|
|
159
|
+
//! blocks can be evicted. (Sugar for calling method directly on the BufferPool.)
|
|
160
|
+
void SetLimit(idx_t limit = (idx_t)-1) {
|
|
161
|
+
buffer_pool.SetLimit(limit, InMemoryWarning());
|
|
162
|
+
}
|
|
106
163
|
//! Returns a list of all temporary files
|
|
107
164
|
vector<TemporaryFileInformation> GetTemporaryFiles();
|
|
108
165
|
|
|
@@ -113,25 +170,6 @@ private:
|
|
|
113
170
|
//! This needs to be private to prevent creating blocks without ever pinning them:
|
|
114
171
|
//! blocks that are never pinned are never added to the eviction queue
|
|
115
172
|
shared_ptr<BlockHandle> RegisterMemory(idx_t block_size, bool can_destroy);
|
|
116
|
-
//! Evict blocks until the currently used memory + extra_memory fit, returns false if this was not possible
|
|
117
|
-
//! (i.e. not enough blocks could be evicted)
|
|
118
|
-
//! If the "buffer" argument is specified AND the system can find a buffer to re-use for the given allocation size
|
|
119
|
-
//! "buffer" will be made to point to the re-usable memory. Note that this is not guaranteed.
|
|
120
|
-
//! Returns a pair. result.first indicates if eviction was successful. result.second contains the
|
|
121
|
-
//! reservation handle, which can be moved to the BlockHandle that will own the reservation.
|
|
122
|
-
struct EvictionResult {
|
|
123
|
-
bool success;
|
|
124
|
-
TempBufferPoolReservation reservation;
|
|
125
|
-
};
|
|
126
|
-
EvictionResult EvictBlocks(idx_t extra_memory, idx_t memory_limit, unique_ptr<FileBuffer> *buffer = nullptr);
|
|
127
|
-
|
|
128
|
-
//! Helper
|
|
129
|
-
template <typename... ARGS>
|
|
130
|
-
TempBufferPoolReservation EvictBlocksOrThrow(idx_t extra_memory, idx_t limit, unique_ptr<FileBuffer> *buffer,
|
|
131
|
-
ARGS...);
|
|
132
|
-
|
|
133
|
-
//! Garbage collect eviction queue
|
|
134
|
-
void PurgeQueue();
|
|
135
173
|
|
|
136
174
|
//! Write a temporary buffer to disk
|
|
137
175
|
void WriteTemporaryBuffer(block_id_t block_id, FileBuffer &buffer);
|
|
@@ -144,9 +182,7 @@ private:
|
|
|
144
182
|
|
|
145
183
|
void RequireTemporaryDirectory();
|
|
146
184
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
string InMemoryWarning();
|
|
185
|
+
const char *InMemoryWarning();
|
|
150
186
|
|
|
151
187
|
static data_ptr_t BufferAllocatorAllocate(PrivateAllocatorData *private_data, idx_t size);
|
|
152
188
|
static void BufferAllocatorFree(PrivateAllocatorData *private_data, data_ptr_t pointer, idx_t size);
|
|
@@ -157,27 +193,23 @@ private:
|
|
|
157
193
|
//! overwrites the data within with garbage. Any readers that do not hold the pin will notice
|
|
158
194
|
void VerifyZeroReaders(shared_ptr<BlockHandle> &handle);
|
|
159
195
|
|
|
196
|
+
//! Helper
|
|
197
|
+
template <typename... ARGS>
|
|
198
|
+
TempBufferPoolReservation EvictBlocksOrThrow(idx_t extra_memory, unique_ptr<FileBuffer> *buffer, ARGS...);
|
|
199
|
+
|
|
160
200
|
private:
|
|
161
201
|
//! The database instance
|
|
162
202
|
DatabaseInstance &db;
|
|
163
|
-
//! The
|
|
164
|
-
|
|
165
|
-
//! The current amount of memory that is occupied by the buffer manager (in bytes)
|
|
166
|
-
atomic<idx_t> current_memory;
|
|
167
|
-
//! The maximum amount of memory that the buffer manager can keep (in bytes)
|
|
168
|
-
atomic<idx_t> maximum_memory;
|
|
203
|
+
//! The buffer pool
|
|
204
|
+
BufferPool &buffer_pool;
|
|
169
205
|
//! The directory name where temporary files are stored
|
|
170
206
|
string temp_directory;
|
|
171
207
|
//! Lock for creating the temp handle
|
|
172
208
|
mutex temp_handle_lock;
|
|
173
209
|
//! Handle for the temporary directory
|
|
174
210
|
unique_ptr<TemporaryDirectoryHandle> temp_directory_handle;
|
|
175
|
-
//! Eviction queue
|
|
176
|
-
unique_ptr<EvictionQueue> queue;
|
|
177
211
|
//! The temporary id used for managed buffers
|
|
178
212
|
atomic<block_id_t> temporary_id;
|
|
179
|
-
//! Total number of insertions into the eviction queue. This guides the schedule for calling PurgeQueue.
|
|
180
|
-
atomic<uint32_t> queue_insertions;
|
|
181
213
|
//! Allocator associated with the buffer manager, that passes all allocations through this buffer manager
|
|
182
214
|
Allocator buffer_allocator;
|
|
183
215
|
//! Block manager for temp data
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
namespace duckdb {
|
|
14
14
|
class DuckTableEntry;
|
|
15
|
+
class TableStatistics;
|
|
15
16
|
|
|
16
17
|
//! The table data writer is responsible for writing the data of a table to
|
|
17
18
|
//! storage.
|
|
@@ -30,7 +31,7 @@ public:
|
|
|
30
31
|
|
|
31
32
|
CompressionType GetColumnCompressionType(idx_t i);
|
|
32
33
|
|
|
33
|
-
virtual void FinalizeTable(
|
|
34
|
+
virtual void FinalizeTable(TableStatistics &&global_stats, DataTableInfo *info) = 0;
|
|
34
35
|
virtual unique_ptr<RowGroupWriter> GetRowGroupWriter(RowGroup &row_group) = 0;
|
|
35
36
|
|
|
36
37
|
virtual void AddRowGroup(RowGroupPointer &&row_group_pointer, unique_ptr<RowGroupWriter> &&writer);
|
|
@@ -47,7 +48,7 @@ public:
|
|
|
47
48
|
MetaBlockWriter &table_data_writer, MetaBlockWriter &meta_data_writer);
|
|
48
49
|
|
|
49
50
|
public:
|
|
50
|
-
virtual void FinalizeTable(
|
|
51
|
+
virtual void FinalizeTable(TableStatistics &&global_stats, DataTableInfo *info) override;
|
|
51
52
|
virtual unique_ptr<RowGroupWriter> GetRowGroupWriter(RowGroup &row_group) override;
|
|
52
53
|
|
|
53
54
|
private:
|
|
@@ -44,7 +44,7 @@ protected:
|
|
|
44
44
|
virtual void WriteMacro(ScalarMacroCatalogEntry &table);
|
|
45
45
|
virtual void WriteTableMacro(TableMacroCatalogEntry &table);
|
|
46
46
|
virtual void WriteIndex(IndexCatalogEntry &index_catalog);
|
|
47
|
-
virtual void WriteType(TypeCatalogEntry &
|
|
47
|
+
virtual void WriteType(TypeCatalogEntry &type);
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
class CheckpointReader {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
#include "duckdb/function/compression/compression.hpp"
|
|
19
19
|
#include "duckdb/main/config.hpp"
|
|
20
20
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
23
23
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
24
24
|
#include "duckdb/common/operator/subtract.hpp"
|
|
@@ -150,7 +150,7 @@ public:
|
|
|
150
150
|
|
|
151
151
|
if (is_valid) {
|
|
152
152
|
T floating_point_value = Load<T>((const_data_ptr_t)&value);
|
|
153
|
-
|
|
153
|
+
NumericStats::Update<T>(current_segment->stats.statistics, floating_point_value);
|
|
154
154
|
} else {
|
|
155
155
|
//! FIXME: find a cheaper alternative to storing a NULL
|
|
156
156
|
// store this as "value_identical", only using 9 bits for a NULL
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
#include "duckdb/function/compression_function.hpp"
|
|
18
18
|
#include "duckdb/main/config.hpp"
|
|
19
19
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
22
22
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
23
23
|
#include "duckdb/common/operator/subtract.hpp"
|
|
@@ -17,13 +17,14 @@
|
|
|
17
17
|
#include "duckdb/function/compression_function.hpp"
|
|
18
18
|
#include "duckdb/main/config.hpp"
|
|
19
19
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
22
22
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
23
23
|
#include "duckdb/common/operator/subtract.hpp"
|
|
24
24
|
|
|
25
25
|
#include "duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp"
|
|
26
26
|
#include "duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp"
|
|
27
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
27
28
|
|
|
28
29
|
namespace duckdb {
|
|
29
30
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
#include "duckdb/function/compression/compression.hpp"
|
|
19
19
|
#include "duckdb/main/config.hpp"
|
|
20
20
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
23
23
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
24
24
|
#include "duckdb/common/operator/subtract.hpp"
|
|
@@ -49,7 +49,7 @@ public:
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
if (is_valid) {
|
|
52
|
-
|
|
52
|
+
NumericStats::Update<VALUE_TYPE>(state_wrapper->current_segment->stats.statistics, value);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
state_wrapper->WriteValue(Load<EXACT_TYPE>((const_data_ptr_t)&value));
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
#include "duckdb/function/compression_function.hpp"
|
|
18
18
|
#include "duckdb/main/config.hpp"
|
|
19
19
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
22
22
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
23
23
|
#include "duckdb/common/operator/subtract.hpp"
|
|
@@ -17,10 +17,11 @@
|
|
|
17
17
|
#include "duckdb/function/compression_function.hpp"
|
|
18
18
|
#include "duckdb/main/config.hpp"
|
|
19
19
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
22
22
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
23
23
|
#include "duckdb/common/operator/subtract.hpp"
|
|
24
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
24
25
|
|
|
25
26
|
namespace duckdb {
|
|
26
27
|
|
|
@@ -18,12 +18,15 @@
|
|
|
18
18
|
namespace duckdb {
|
|
19
19
|
|
|
20
20
|
struct DataPointer {
|
|
21
|
+
DataPointer(BaseStatistics stats) : statistics(std::move(stats)) {
|
|
22
|
+
}
|
|
23
|
+
|
|
21
24
|
uint64_t row_start;
|
|
22
25
|
uint64_t tuple_count;
|
|
23
26
|
BlockPointer block_pointer;
|
|
24
27
|
CompressionType compression_type;
|
|
25
28
|
//! Type-specific statistics of the segment
|
|
26
|
-
|
|
29
|
+
BaseStatistics statistics;
|
|
27
30
|
};
|
|
28
31
|
|
|
29
32
|
struct RowGroupPointer {
|
|
@@ -31,8 +34,6 @@ struct RowGroupPointer {
|
|
|
31
34
|
uint64_t tuple_count;
|
|
32
35
|
//! The data pointers of the column segments stored in the row group
|
|
33
36
|
vector<BlockPointer> data_pointers;
|
|
34
|
-
//! The per-column statistics of the row group
|
|
35
|
-
vector<unique_ptr<BaseStatistics>> statistics;
|
|
36
37
|
//! The versions information of the row group (if any)
|
|
37
38
|
shared_ptr<VersionNode> versions;
|
|
38
39
|
};
|
|
@@ -39,6 +39,7 @@ class Transaction;
|
|
|
39
39
|
class WriteAheadLog;
|
|
40
40
|
class TableDataWriter;
|
|
41
41
|
class ConflictManager;
|
|
42
|
+
class TableScanState;
|
|
42
43
|
enum class VerifyExistenceType : uint8_t;
|
|
43
44
|
|
|
44
45
|
//! DataTable represents a physical table on disk
|
|
@@ -150,8 +151,8 @@ public:
|
|
|
150
151
|
|
|
151
152
|
//! Append a chunk with the row ids [row_start, ..., row_start + chunk.size()] to all indexes of the table, returns
|
|
152
153
|
//! whether or not the append succeeded
|
|
153
|
-
|
|
154
|
-
static
|
|
154
|
+
PreservedError AppendToIndexes(DataChunk &chunk, row_t row_start);
|
|
155
|
+
static PreservedError AppendToIndexes(TableIndexList &indexes, DataChunk &chunk, row_t row_start);
|
|
155
156
|
//! Remove a chunk with the row ids [row_start, ..., row_start + chunk.size()] from all indexes of the table
|
|
156
157
|
void RemoveFromIndexes(TableAppendState &state, DataChunk &chunk, row_t row_start);
|
|
157
158
|
//! Remove the chunk with the specified set of row identifiers from all indexes of the table
|
|
@@ -169,7 +170,7 @@ public:
|
|
|
169
170
|
//! Get statistics of a physical column within the table
|
|
170
171
|
unique_ptr<BaseStatistics> GetStatistics(ClientContext &context, column_t column_id);
|
|
171
172
|
//! Sets statistics of a physical column within the table
|
|
172
|
-
void
|
|
173
|
+
void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
|
|
173
174
|
|
|
174
175
|
//! Checkpoint the table to the specified table data writer
|
|
175
176
|
void Checkpoint(TableDataWriter &writer);
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
#include "duckdb/common/sort/sort.hpp"
|
|
15
15
|
#include "duckdb/parser/parsed_expression.hpp"
|
|
16
16
|
#include "duckdb/planner/expression.hpp"
|
|
17
|
-
#include "duckdb/storage/table/scan_state.hpp"
|
|
18
17
|
#include "duckdb/storage/meta_block_writer.hpp"
|
|
19
18
|
#include "duckdb/execution/expression_executor.hpp"
|
|
20
19
|
#include "duckdb/common/types/constraint_conflict_info.hpp"
|
|
@@ -27,6 +26,7 @@ class Transaction;
|
|
|
27
26
|
class ConflictManager;
|
|
28
27
|
|
|
29
28
|
struct IndexLock;
|
|
29
|
+
struct IndexScanState;
|
|
30
30
|
|
|
31
31
|
//! The index is an abstract base class that serves as the basis for indexes
|
|
32
32
|
class Index {
|
|
@@ -80,9 +80,9 @@ public:
|
|
|
80
80
|
//! Obtain a lock on the index
|
|
81
81
|
virtual void InitializeLock(IndexLock &state);
|
|
82
82
|
//! Called when data is appended to the index. The lock obtained from InitializeLock must be held
|
|
83
|
-
virtual
|
|
83
|
+
virtual PreservedError Append(IndexLock &state, DataChunk &entries, Vector &row_identifiers) = 0;
|
|
84
84
|
//! Obtains a lock and calls Append while holding that lock
|
|
85
|
-
|
|
85
|
+
PreservedError Append(DataChunk &entries, Vector &row_identifiers);
|
|
86
86
|
//! Verify that data can be appended to the index without a constraint violation
|
|
87
87
|
virtual void VerifyAppend(DataChunk &chunk) = 0;
|
|
88
88
|
//! Verify that data can be appended to the index without a constraint violation using the conflict manager
|
|
@@ -96,7 +96,7 @@ public:
|
|
|
96
96
|
void Delete(DataChunk &entries, Vector &row_identifiers);
|
|
97
97
|
|
|
98
98
|
//! Insert a chunk of entries into the index
|
|
99
|
-
virtual
|
|
99
|
+
virtual PreservedError Insert(IndexLock &lock, DataChunk &input, Vector &row_identifiers) = 0;
|
|
100
100
|
|
|
101
101
|
//! Merge another index into this index. The lock obtained from InitializeLock must be held, and the other
|
|
102
102
|
//! index must also be locked during the merge
|
|
@@ -147,6 +147,7 @@ public:
|
|
|
147
147
|
|
|
148
148
|
//! Execute the index expressions on an input chunk
|
|
149
149
|
void ExecuteExpressions(DataChunk &input, DataChunk &result);
|
|
150
|
+
static string AppendRowError(DataChunk &input, idx_t index);
|
|
150
151
|
|
|
151
152
|
protected:
|
|
152
153
|
//! Lock used for any changes to the index
|
|
@@ -36,7 +36,14 @@ public:
|
|
|
36
36
|
//! Read content of size read_size into the buffer
|
|
37
37
|
void ReadData(data_ptr_t buffer, idx_t read_size) override;
|
|
38
38
|
|
|
39
|
+
ClientContext &GetContext() override;
|
|
40
|
+
Catalog *GetCatalog() override;
|
|
41
|
+
void SetCatalog(Catalog *catalog_p);
|
|
42
|
+
void SetContext(ClientContext *context_p);
|
|
43
|
+
|
|
39
44
|
private:
|
|
40
45
|
void ReadNewBlock(block_id_t id);
|
|
46
|
+
Catalog *catalog = nullptr;
|
|
47
|
+
ClientContext *context = nullptr;
|
|
41
48
|
};
|
|
42
49
|
} // namespace duckdb
|