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
|
@@ -9,13 +9,12 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/types/data_chunk.hpp"
|
|
12
|
-
#include "duckdb/storage/table/append_state.hpp"
|
|
13
|
-
#include "duckdb/storage/table/scan_state.hpp"
|
|
14
12
|
#include "duckdb/storage/statistics/base_statistics.hpp"
|
|
15
13
|
#include "duckdb/storage/data_pointer.hpp"
|
|
16
14
|
#include "duckdb/storage/table/persistent_table_data.hpp"
|
|
17
15
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
18
|
-
#include "duckdb/storage/table/
|
|
16
|
+
#include "duckdb/storage/table/segment_tree.hpp"
|
|
17
|
+
#include "duckdb/storage/table/column_segment_tree.hpp"
|
|
19
18
|
#include "duckdb/common/mutex.hpp"
|
|
20
19
|
|
|
21
20
|
namespace duckdb {
|
|
@@ -31,7 +30,7 @@ struct TransactionData;
|
|
|
31
30
|
struct DataTableInfo;
|
|
32
31
|
|
|
33
32
|
struct ColumnCheckpointInfo {
|
|
34
|
-
ColumnCheckpointInfo(CompressionType compression_type_p) : compression_type(compression_type_p) {};
|
|
33
|
+
explicit ColumnCheckpointInfo(CompressionType compression_type_p) : compression_type(compression_type_p) {};
|
|
35
34
|
CompressionType compression_type;
|
|
36
35
|
};
|
|
37
36
|
|
|
@@ -44,14 +43,16 @@ public:
|
|
|
44
43
|
ColumnData(ColumnData &other, idx_t start, ColumnData *parent);
|
|
45
44
|
virtual ~ColumnData();
|
|
46
45
|
|
|
46
|
+
//! The start row
|
|
47
|
+
const idx_t start;
|
|
48
|
+
//! The count of the column data
|
|
49
|
+
idx_t count;
|
|
47
50
|
//! The block manager
|
|
48
51
|
BlockManager &block_manager;
|
|
49
52
|
//! Table info for the column
|
|
50
53
|
DataTableInfo &info;
|
|
51
54
|
//! The column index of the column, either within the parent table or within the parent
|
|
52
55
|
idx_t column_index;
|
|
53
|
-
//! The start row
|
|
54
|
-
idx_t start;
|
|
55
56
|
//! The type of the column
|
|
56
57
|
LogicalType type;
|
|
57
58
|
//! The parent column (if any)
|
|
@@ -60,6 +61,9 @@ public:
|
|
|
60
61
|
public:
|
|
61
62
|
virtual bool CheckZonemap(ColumnScanState &state, TableFilter &filter) = 0;
|
|
62
63
|
|
|
64
|
+
BlockManager &GetBlockManager() {
|
|
65
|
+
return block_manager;
|
|
66
|
+
}
|
|
63
67
|
DatabaseInstance &GetDatabase() const;
|
|
64
68
|
DataTableInfo &GetTableInfo() const;
|
|
65
69
|
virtual idx_t GetMaxEntry();
|
|
@@ -93,6 +97,8 @@ public:
|
|
|
93
97
|
virtual void InitializeAppend(ColumnAppendState &state);
|
|
94
98
|
//! Append a vector of type [type] to the end of the column
|
|
95
99
|
virtual void Append(BaseStatistics &stats, ColumnAppendState &state, Vector &vector, idx_t count);
|
|
100
|
+
//! Append a vector of type [type] to the end of the column
|
|
101
|
+
void Append(ColumnAppendState &state, Vector &vector, idx_t count);
|
|
96
102
|
virtual void AppendData(BaseStatistics &stats, ColumnAppendState &state, UnifiedVectorFormat &vdata, idx_t count);
|
|
97
103
|
//! Revert a set of appends to the ColumnData
|
|
98
104
|
virtual void RevertAppend(row_t start_row);
|
|
@@ -127,6 +133,8 @@ public:
|
|
|
127
133
|
virtual void GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, TableStorageInfo &result);
|
|
128
134
|
virtual void Verify(RowGroup &parent);
|
|
129
135
|
|
|
136
|
+
bool CheckZonemap(TableFilter &filter);
|
|
137
|
+
|
|
130
138
|
static shared_ptr<ColumnData> CreateColumn(BlockManager &block_manager, DataTableInfo &info, idx_t column_index,
|
|
131
139
|
idx_t start_row, const LogicalType &type, ColumnData *parent = nullptr);
|
|
132
140
|
static shared_ptr<ColumnData> CreateColumn(ColumnData &other, idx_t start_row, ColumnData *parent = nullptr);
|
|
@@ -135,6 +143,10 @@ public:
|
|
|
135
143
|
ColumnData *parent = nullptr);
|
|
136
144
|
static unique_ptr<ColumnData> CreateColumnUnique(ColumnData &other, idx_t start_row, ColumnData *parent = nullptr);
|
|
137
145
|
|
|
146
|
+
void MergeStatistics(const BaseStatistics &other);
|
|
147
|
+
void MergeIntoStatistics(BaseStatistics &other);
|
|
148
|
+
unique_ptr<BaseStatistics> GetStatistics();
|
|
149
|
+
|
|
138
150
|
protected:
|
|
139
151
|
//! Append a transient segment
|
|
140
152
|
void AppendTransientSegment(SegmentLock &l, idx_t start_row);
|
|
@@ -148,13 +160,15 @@ protected:
|
|
|
148
160
|
|
|
149
161
|
protected:
|
|
150
162
|
//! The segments holding the data of this column segment
|
|
151
|
-
|
|
163
|
+
ColumnSegmentTree data;
|
|
152
164
|
//! The lock for the updates
|
|
153
165
|
mutex update_lock;
|
|
154
166
|
//! The updates for this column segment
|
|
155
167
|
unique_ptr<UpdateSegment> updates;
|
|
156
168
|
//! The internal version of the column data
|
|
157
169
|
idx_t version;
|
|
170
|
+
//! The stats of the root segment
|
|
171
|
+
unique_ptr<SegmentStatistics> stats;
|
|
158
172
|
};
|
|
159
173
|
|
|
160
174
|
} // namespace duckdb
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/table/column_data.hpp"
|
|
12
12
|
#include "duckdb/function/compression_function.hpp"
|
|
13
|
+
#include "duckdb/storage/table/column_checkpoint_state.hpp"
|
|
13
14
|
|
|
14
15
|
namespace duckdb {
|
|
15
16
|
|
|
@@ -25,7 +26,7 @@ public:
|
|
|
25
26
|
RowGroup &GetRowGroup();
|
|
26
27
|
ColumnCheckpointState &GetCheckpointState();
|
|
27
28
|
|
|
28
|
-
void Checkpoint(vector<SegmentNode
|
|
29
|
+
void Checkpoint(vector<SegmentNode<ColumnSegment>> nodes);
|
|
29
30
|
|
|
30
31
|
private:
|
|
31
32
|
void ScanSegments(const std::function<void(Vector &, idx_t)> &callback);
|
|
@@ -40,7 +41,7 @@ private:
|
|
|
40
41
|
ColumnCheckpointState &state;
|
|
41
42
|
bool is_validity;
|
|
42
43
|
Vector intermediate;
|
|
43
|
-
vector<SegmentNode
|
|
44
|
+
vector<SegmentNode<ColumnSegment>> nodes;
|
|
44
45
|
vector<CompressionFunction *> compression_functions;
|
|
45
46
|
ColumnCheckpointInfo &checkpoint_info;
|
|
46
47
|
};
|
|
@@ -9,14 +9,13 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/block.hpp"
|
|
12
|
-
#include "duckdb/storage/table/segment_tree.hpp"
|
|
13
12
|
#include "duckdb/common/types.hpp"
|
|
14
13
|
#include "duckdb/common/types/vector.hpp"
|
|
15
14
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
16
15
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
17
16
|
#include "duckdb/storage/storage_lock.hpp"
|
|
18
|
-
#include "duckdb/storage/table/scan_state.hpp"
|
|
19
17
|
#include "duckdb/function/compression_function.hpp"
|
|
18
|
+
#include "duckdb/storage/table/segment_base.hpp"
|
|
20
19
|
|
|
21
20
|
namespace duckdb {
|
|
22
21
|
class ColumnSegment;
|
|
@@ -35,9 +34,9 @@ struct ColumnAppendState;
|
|
|
35
34
|
enum class ColumnSegmentType : uint8_t { TRANSIENT, PERSISTENT };
|
|
36
35
|
//! TableFilter represents a filter pushed down into the table scan.
|
|
37
36
|
|
|
38
|
-
class ColumnSegment : public SegmentBase {
|
|
37
|
+
class ColumnSegment : public SegmentBase<ColumnSegment> {
|
|
39
38
|
public:
|
|
40
|
-
~ColumnSegment()
|
|
39
|
+
~ColumnSegment();
|
|
41
40
|
|
|
42
41
|
//! The database instance
|
|
43
42
|
DatabaseInstance &db;
|
|
@@ -57,7 +56,7 @@ public:
|
|
|
57
56
|
static unique_ptr<ColumnSegment> CreatePersistentSegment(DatabaseInstance &db, BlockManager &block_manager,
|
|
58
57
|
block_id_t id, idx_t offset, const LogicalType &type_p,
|
|
59
58
|
idx_t start, idx_t count, CompressionType compression_type,
|
|
60
|
-
|
|
59
|
+
BaseStatistics statistics);
|
|
61
60
|
static unique_ptr<ColumnSegment> CreateTransientSegment(DatabaseInstance &db, const LogicalType &type, idx_t start,
|
|
62
61
|
idx_t segment_size = Storage::BLOCK_SIZE);
|
|
63
62
|
static unique_ptr<ColumnSegment> CreateSegment(ColumnSegment &other, idx_t start);
|
|
@@ -124,7 +123,7 @@ public:
|
|
|
124
123
|
|
|
125
124
|
public:
|
|
126
125
|
ColumnSegment(DatabaseInstance &db, shared_ptr<BlockHandle> block, LogicalType type, ColumnSegmentType segment_type,
|
|
127
|
-
idx_t start, idx_t count, CompressionFunction *function,
|
|
126
|
+
idx_t start, idx_t count, CompressionFunction *function, BaseStatistics statistics,
|
|
128
127
|
block_id_t block_id, idx_t offset, idx_t segment_size);
|
|
129
128
|
ColumnSegment(ColumnSegment &other, idx_t start);
|
|
130
129
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/table/column_segment_tree.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/storage/table/segment_tree.hpp"
|
|
12
|
+
#include "duckdb/storage/table/column_segment.hpp"
|
|
13
|
+
|
|
14
|
+
namespace duckdb {
|
|
15
|
+
|
|
16
|
+
class ColumnSegmentTree : public SegmentTree<ColumnSegment> {};
|
|
17
|
+
|
|
18
|
+
} // namespace duckdb
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/constants.hpp"
|
|
12
12
|
#include "duckdb/common/vector.hpp"
|
|
13
|
-
#include "duckdb/storage/table/segment_tree.hpp"
|
|
14
13
|
#include "duckdb/storage/data_pointer.hpp"
|
|
14
|
+
#include "duckdb/storage/table/table_statistics.hpp"
|
|
15
15
|
|
|
16
16
|
namespace duckdb {
|
|
17
17
|
class BaseStatistics;
|
|
@@ -21,8 +21,11 @@ public:
|
|
|
21
21
|
explicit PersistentTableData(idx_t column_count);
|
|
22
22
|
~PersistentTableData();
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
TableStatistics table_stats;
|
|
25
|
+
idx_t total_rows;
|
|
26
|
+
idx_t row_group_count;
|
|
27
|
+
block_id_t block_id;
|
|
28
|
+
idx_t offset;
|
|
26
29
|
};
|
|
27
30
|
|
|
28
31
|
} // namespace duckdb
|
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/vector_size.hpp"
|
|
12
|
-
#include "duckdb/storage/table/segment_base.hpp"
|
|
13
12
|
#include "duckdb/storage/table/chunk_info.hpp"
|
|
14
|
-
#include "duckdb/storage/table/append_state.hpp"
|
|
15
|
-
#include "duckdb/storage/table/scan_state.hpp"
|
|
16
13
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
14
|
+
#include "duckdb/common/types/data_chunk.hpp"
|
|
17
15
|
#include "duckdb/common/enums/scan_options.hpp"
|
|
18
16
|
#include "duckdb/common/mutex.hpp"
|
|
19
17
|
#include "duckdb/parser/column_list.hpp"
|
|
18
|
+
#include "duckdb/storage/table/segment_base.hpp"
|
|
19
|
+
#include "duckdb/storage/block.hpp"
|
|
20
20
|
|
|
21
21
|
namespace duckdb {
|
|
22
22
|
class AttachedDatabase;
|
|
@@ -27,21 +27,27 @@ class DataTable;
|
|
|
27
27
|
class PartialBlockManager;
|
|
28
28
|
struct DataTableInfo;
|
|
29
29
|
class ExpressionExecutor;
|
|
30
|
+
class RowGroupCollection;
|
|
30
31
|
class RowGroupWriter;
|
|
31
32
|
class UpdateSegment;
|
|
33
|
+
class TableStatistics;
|
|
32
34
|
class TableStorageInfo;
|
|
33
35
|
class Vector;
|
|
34
36
|
struct ColumnCheckpointState;
|
|
35
37
|
struct RowGroupPointer;
|
|
36
38
|
struct TransactionData;
|
|
37
39
|
struct VersionNode;
|
|
40
|
+
class CollectionScanState;
|
|
41
|
+
class TableFilterSet;
|
|
42
|
+
struct ColumnFetchState;
|
|
43
|
+
struct RowGroupAppendState;
|
|
38
44
|
|
|
39
45
|
struct RowGroupWriteData {
|
|
40
46
|
vector<unique_ptr<ColumnCheckpointState>> states;
|
|
41
|
-
vector<
|
|
47
|
+
vector<BaseStatistics> statistics;
|
|
42
48
|
};
|
|
43
49
|
|
|
44
|
-
class RowGroup : public SegmentBase {
|
|
50
|
+
class RowGroup : public SegmentBase<RowGroup> {
|
|
45
51
|
public:
|
|
46
52
|
friend class ColumnData;
|
|
47
53
|
friend class VersionDeleteState;
|
|
@@ -51,48 +57,33 @@ public:
|
|
|
51
57
|
static constexpr const idx_t ROW_GROUP_VECTOR_COUNT = ROW_GROUP_SIZE / STANDARD_VECTOR_SIZE;
|
|
52
58
|
|
|
53
59
|
public:
|
|
54
|
-
RowGroup(
|
|
55
|
-
RowGroup(
|
|
56
|
-
|
|
57
|
-
RowGroup(RowGroup &row_group, idx_t start);
|
|
60
|
+
RowGroup(RowGroupCollection &collection, idx_t start, idx_t count);
|
|
61
|
+
RowGroup(RowGroupCollection &collection, RowGroupPointer &&pointer);
|
|
62
|
+
RowGroup(RowGroup &row_group, RowGroupCollection &collection, idx_t start);
|
|
58
63
|
~RowGroup();
|
|
59
64
|
|
|
60
65
|
private:
|
|
61
|
-
//! The
|
|
62
|
-
|
|
63
|
-
//! The block manager
|
|
64
|
-
BlockManager &block_manager;
|
|
65
|
-
//! The table info of this row_group
|
|
66
|
-
DataTableInfo &table_info;
|
|
66
|
+
//! The RowGroupCollection this row-group is a part of
|
|
67
|
+
RowGroupCollection &collection;
|
|
67
68
|
//! The version info of the row_group (inserted and deleted tuple info)
|
|
68
69
|
shared_ptr<VersionNode> version_info;
|
|
69
70
|
//! The column data of the row_group
|
|
70
71
|
vector<shared_ptr<ColumnData>> columns;
|
|
71
|
-
//! The segment statistics for each of the columns
|
|
72
|
-
vector<shared_ptr<SegmentStatistics>> stats;
|
|
73
72
|
|
|
74
73
|
public:
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
return block_manager;
|
|
78
|
-
}
|
|
79
|
-
DataTableInfo &GetTableInfo() {
|
|
80
|
-
return table_info;
|
|
81
|
-
}
|
|
82
|
-
idx_t GetColumnIndex(ColumnData *data) {
|
|
83
|
-
for (idx_t i = 0; i < columns.size(); i++) {
|
|
84
|
-
if (columns[i].get() == data) {
|
|
85
|
-
return i;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return 0;
|
|
74
|
+
RowGroupCollection &GetCollection() {
|
|
75
|
+
return collection;
|
|
89
76
|
}
|
|
77
|
+
DatabaseInstance &GetDatabase();
|
|
78
|
+
BlockManager &GetBlockManager();
|
|
79
|
+
DataTableInfo &GetTableInfo();
|
|
90
80
|
|
|
91
|
-
unique_ptr<RowGroup> AlterType(const LogicalType &target_type, idx_t changed_idx,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
81
|
+
unique_ptr<RowGroup> AlterType(RowGroupCollection &collection, const LogicalType &target_type, idx_t changed_idx,
|
|
82
|
+
ExpressionExecutor &executor, CollectionScanState &scan_state,
|
|
83
|
+
DataChunk &scan_chunk);
|
|
84
|
+
unique_ptr<RowGroup> AddColumn(RowGroupCollection &collection, ColumnDefinition &new_column,
|
|
85
|
+
ExpressionExecutor &executor, Expression *default_value, Vector &intermediate);
|
|
86
|
+
unique_ptr<RowGroup> RemoveColumn(RowGroupCollection &collection, idx_t removed_column);
|
|
96
87
|
|
|
97
88
|
void CommitDrop();
|
|
98
89
|
void CommitDropColumn(idx_t index);
|
|
@@ -100,16 +91,16 @@ public:
|
|
|
100
91
|
void InitializeEmpty(const vector<LogicalType> &types);
|
|
101
92
|
|
|
102
93
|
//! Initialize a scan over this row_group
|
|
103
|
-
bool InitializeScan(
|
|
104
|
-
bool InitializeScanWithOffset(
|
|
94
|
+
bool InitializeScan(CollectionScanState &state);
|
|
95
|
+
bool InitializeScanWithOffset(CollectionScanState &state, idx_t vector_offset);
|
|
105
96
|
//! Checks the given set of table filters against the row-group statistics. Returns false if the entire row group
|
|
106
97
|
//! can be skipped.
|
|
107
98
|
bool CheckZonemap(TableFilterSet &filters, const vector<column_t> &column_ids);
|
|
108
99
|
//! Checks the given set of table filters against the per-segment statistics. Returns false if any segments were
|
|
109
100
|
//! skipped.
|
|
110
|
-
bool CheckZonemapSegments(
|
|
111
|
-
void Scan(TransactionData transaction,
|
|
112
|
-
void ScanCommitted(
|
|
101
|
+
bool CheckZonemapSegments(CollectionScanState &state);
|
|
102
|
+
void Scan(TransactionData transaction, CollectionScanState &state, DataChunk &result);
|
|
103
|
+
void ScanCommitted(CollectionScanState &state, DataChunk &result, TableScanType type);
|
|
113
104
|
|
|
114
105
|
idx_t GetSelVector(TransactionData transaction, idx_t vector_idx, SelectionVector &sel_vector, idx_t max_count);
|
|
115
106
|
idx_t GetCommittedSelVector(transaction_t start_time, transaction_t transaction_id, idx_t vector_idx,
|
|
@@ -132,9 +123,9 @@ public:
|
|
|
132
123
|
idx_t Delete(TransactionData transaction, DataTable *table, row_t *row_ids, idx_t count);
|
|
133
124
|
|
|
134
125
|
RowGroupWriteData WriteToDisk(PartialBlockManager &manager, const vector<CompressionType> &compression_types);
|
|
135
|
-
RowGroupPointer Checkpoint(RowGroupWriter &writer,
|
|
126
|
+
RowGroupPointer Checkpoint(RowGroupWriter &writer, TableStatistics &global_stats);
|
|
136
127
|
static void Serialize(RowGroupPointer &pointer, Serializer &serializer);
|
|
137
|
-
static RowGroupPointer Deserialize(Deserializer &source, const
|
|
128
|
+
static RowGroupPointer Deserialize(Deserializer &source, const vector<LogicalType> &columns);
|
|
138
129
|
|
|
139
130
|
void InitializeAppend(RowGroupAppendState &append_state);
|
|
140
131
|
void Append(RowGroupAppendState &append_state, DataChunk &chunk, idx_t append_count);
|
|
@@ -154,13 +145,16 @@ public:
|
|
|
154
145
|
|
|
155
146
|
void Verify();
|
|
156
147
|
|
|
157
|
-
void NextVector(
|
|
148
|
+
void NextVector(CollectionScanState &state);
|
|
158
149
|
|
|
159
150
|
private:
|
|
160
151
|
ChunkInfo *GetChunkInfo(idx_t vector_idx);
|
|
152
|
+
ColumnData &GetColumn(idx_t c);
|
|
153
|
+
idx_t GetColumnCount() const;
|
|
154
|
+
vector<shared_ptr<ColumnData>> &GetColumns();
|
|
161
155
|
|
|
162
156
|
template <TableScanType TYPE>
|
|
163
|
-
void TemplatedScan(TransactionData transaction,
|
|
157
|
+
void TemplatedScan(TransactionData transaction, CollectionScanState &state, DataChunk &result);
|
|
164
158
|
|
|
165
159
|
static void CheckpointDeletes(VersionNode *versions, Serializer &serializer);
|
|
166
160
|
static shared_ptr<VersionNode> DeserializeDeletes(Deserializer &source);
|
|
@@ -168,6 +162,8 @@ private:
|
|
|
168
162
|
private:
|
|
169
163
|
mutex row_group_lock;
|
|
170
164
|
mutex stats_lock;
|
|
165
|
+
vector<BlockPointer> column_pointers;
|
|
166
|
+
unique_ptr<atomic<bool>[]> is_loaded;
|
|
171
167
|
};
|
|
172
168
|
|
|
173
169
|
struct VersionNode {
|
|
@@ -15,13 +15,17 @@
|
|
|
15
15
|
|
|
16
16
|
namespace duckdb {
|
|
17
17
|
struct ParallelTableScanState;
|
|
18
|
-
|
|
18
|
+
struct ParallelCollectionScanState;
|
|
19
|
+
class CreateIndexScanState;
|
|
20
|
+
class CollectionScanState;
|
|
19
21
|
class PersistentTableData;
|
|
20
22
|
class TableDataWriter;
|
|
21
23
|
class TableIndexList;
|
|
22
24
|
class TableStatistics;
|
|
23
|
-
|
|
25
|
+
struct TableAppendState;
|
|
26
|
+
class DuckTransaction;
|
|
24
27
|
class BoundConstraint;
|
|
28
|
+
class RowGroupSegmentTree;
|
|
25
29
|
|
|
26
30
|
class RowGroupCollection {
|
|
27
31
|
public:
|
|
@@ -46,8 +50,8 @@ public:
|
|
|
46
50
|
void InitializeCreateIndexScan(CreateIndexScanState &state);
|
|
47
51
|
void InitializeScanWithOffset(CollectionScanState &state, const vector<column_t> &column_ids, idx_t start_row,
|
|
48
52
|
idx_t end_row);
|
|
49
|
-
static bool InitializeScanInRowGroup(CollectionScanState &state,
|
|
50
|
-
idx_t max_row);
|
|
53
|
+
static bool InitializeScanInRowGroup(CollectionScanState &state, RowGroupCollection &collection,
|
|
54
|
+
RowGroup &row_group, idx_t vector_index, idx_t max_row);
|
|
51
55
|
void InitializeParallelScan(ParallelCollectionScanState &state);
|
|
52
56
|
bool NextParallelScan(ClientContext &context, ParallelCollectionScanState &state, CollectionScanState &scan_state);
|
|
53
57
|
|
|
@@ -78,7 +82,7 @@ public:
|
|
|
78
82
|
void UpdateColumn(TransactionData transaction, Vector &row_ids, const vector<column_t> &column_path,
|
|
79
83
|
DataChunk &updates);
|
|
80
84
|
|
|
81
|
-
void Checkpoint(TableDataWriter &writer,
|
|
85
|
+
void Checkpoint(TableDataWriter &writer, TableStatistics &global_stats);
|
|
82
86
|
|
|
83
87
|
void CommitDropColumn(idx_t index);
|
|
84
88
|
void CommitDropTable();
|
|
@@ -93,8 +97,18 @@ public:
|
|
|
93
97
|
vector<column_t> bound_columns, Expression &cast_expr);
|
|
94
98
|
void VerifyNewConstraint(DataTable &parent, const BoundConstraint &constraint);
|
|
95
99
|
|
|
100
|
+
void CopyStats(TableStatistics &stats);
|
|
96
101
|
unique_ptr<BaseStatistics> CopyStats(column_t column_id);
|
|
97
|
-
void
|
|
102
|
+
void SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats);
|
|
103
|
+
|
|
104
|
+
AttachedDatabase &GetAttached();
|
|
105
|
+
DatabaseInstance &GetDatabase();
|
|
106
|
+
BlockManager &GetBlockManager() {
|
|
107
|
+
return block_manager;
|
|
108
|
+
}
|
|
109
|
+
DataTableInfo &GetTableInfo() {
|
|
110
|
+
return *info;
|
|
111
|
+
}
|
|
98
112
|
|
|
99
113
|
private:
|
|
100
114
|
bool IsEmpty(SegmentLock &) const;
|
|
@@ -104,11 +118,13 @@ private:
|
|
|
104
118
|
BlockManager &block_manager;
|
|
105
119
|
//! The number of rows in the table
|
|
106
120
|
atomic<idx_t> total_rows;
|
|
121
|
+
//! The data table info
|
|
107
122
|
shared_ptr<DataTableInfo> info;
|
|
123
|
+
//! The column types of the row group collection
|
|
108
124
|
vector<LogicalType> types;
|
|
109
125
|
idx_t row_start;
|
|
110
126
|
//! The segment trees holding the various row_groups of the table
|
|
111
|
-
shared_ptr<
|
|
127
|
+
shared_ptr<RowGroupSegmentTree> row_groups;
|
|
112
128
|
//! Table statistics
|
|
113
129
|
TableStatistics stats;
|
|
114
130
|
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/table/row_group_segment_tree.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/storage/table/segment_tree.hpp"
|
|
12
|
+
#include "duckdb/storage/table/row_group.hpp"
|
|
13
|
+
|
|
14
|
+
namespace duckdb {
|
|
15
|
+
struct DataTableInfo;
|
|
16
|
+
class PersistentTableData;
|
|
17
|
+
class MetaBlockReader;
|
|
18
|
+
|
|
19
|
+
class RowGroupSegmentTree : public SegmentTree<RowGroup, true> {
|
|
20
|
+
public:
|
|
21
|
+
RowGroupSegmentTree(RowGroupCollection &collection);
|
|
22
|
+
~RowGroupSegmentTree() override;
|
|
23
|
+
|
|
24
|
+
void Initialize(PersistentTableData &data);
|
|
25
|
+
|
|
26
|
+
protected:
|
|
27
|
+
unique_ptr<RowGroup> LoadSegment() override;
|
|
28
|
+
|
|
29
|
+
RowGroupCollection &collection;
|
|
30
|
+
idx_t current_row_group;
|
|
31
|
+
idx_t max_row_group;
|
|
32
|
+
unique_ptr<MetaBlockReader> reader;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
} // namespace duckdb
|
|
@@ -25,10 +25,12 @@ class RowGroupCollection;
|
|
|
25
25
|
class UpdateSegment;
|
|
26
26
|
class TableScanState;
|
|
27
27
|
class ColumnSegment;
|
|
28
|
+
class ColumnSegmentTree;
|
|
28
29
|
class ValiditySegment;
|
|
29
30
|
class TableFilterSet;
|
|
30
31
|
class ColumnData;
|
|
31
32
|
class DuckTransaction;
|
|
33
|
+
class RowGroupSegmentTree;
|
|
32
34
|
|
|
33
35
|
struct SegmentScanState {
|
|
34
36
|
virtual ~SegmentScanState() {
|
|
@@ -45,6 +47,8 @@ typedef unordered_map<block_id_t, BufferHandle> buffer_handle_set_t;
|
|
|
45
47
|
struct ColumnScanState {
|
|
46
48
|
//! The column segment that is currently being scanned
|
|
47
49
|
ColumnSegment *current = nullptr;
|
|
50
|
+
//! Column segment tree
|
|
51
|
+
ColumnSegmentTree *segment_tree = nullptr;
|
|
48
52
|
//! The current row index of the scan
|
|
49
53
|
idx_t row_index = 0;
|
|
50
54
|
//! The internal row index (i.e. the position of the SegmentScanState)
|
|
@@ -64,14 +68,15 @@ struct ColumnScanState {
|
|
|
64
68
|
//! We initialize one SegmentScanState per segment, however, if scanning a DataChunk requires us to scan over more
|
|
65
69
|
//! than one Segment, we need to keep the scan states of the previous segments around
|
|
66
70
|
vector<unique_ptr<SegmentScanState>> previous_states;
|
|
71
|
+
//! The last read offset in the child state (used for LIST columns only)
|
|
72
|
+
idx_t last_offset = 0;
|
|
67
73
|
|
|
68
74
|
public:
|
|
75
|
+
void Initialize(const LogicalType &type);
|
|
69
76
|
//! Move the scan state forward by "count" rows (including all child states)
|
|
70
77
|
void Next(idx_t count);
|
|
71
78
|
//! Move ONLY this state forward by "count" rows (i.e. not the child states)
|
|
72
79
|
void NextInternal(idx_t count);
|
|
73
|
-
//! Move the scan state forward by STANDARD_VECTOR_SIZE rows
|
|
74
|
-
void NextVector();
|
|
75
80
|
};
|
|
76
81
|
|
|
77
82
|
struct ColumnFetchState {
|
|
@@ -83,50 +88,33 @@ struct ColumnFetchState {
|
|
|
83
88
|
BufferHandle &GetOrInsertHandle(ColumnSegment &segment);
|
|
84
89
|
};
|
|
85
90
|
|
|
86
|
-
class
|
|
91
|
+
class CollectionScanState {
|
|
87
92
|
public:
|
|
88
|
-
|
|
89
|
-
: row_group(nullptr), vector_index(0), max_row(0), parent(parent_p) {
|
|
90
|
-
}
|
|
93
|
+
CollectionScanState(TableScanState &parent_p);
|
|
91
94
|
|
|
92
95
|
//! The current row_group we are scanning
|
|
93
|
-
RowGroup *row_group
|
|
96
|
+
RowGroup *row_group;
|
|
94
97
|
//! The vector index within the row_group
|
|
95
|
-
idx_t vector_index
|
|
96
|
-
//! The maximum row
|
|
97
|
-
idx_t
|
|
98
|
+
idx_t vector_index;
|
|
99
|
+
//! The maximum row within the row group
|
|
100
|
+
idx_t max_row_group_row;
|
|
98
101
|
//! Child column scans
|
|
99
102
|
unique_ptr<ColumnScanState[]> column_scans;
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const vector<column_t> &GetColumnIds();
|
|
103
|
-
TableFilterSet *GetFilters();
|
|
104
|
-
AdaptiveFilter *GetAdaptiveFilter();
|
|
105
|
-
idx_t GetParentMaxRow();
|
|
106
|
-
|
|
107
|
-
private:
|
|
108
|
-
//! The parent scan state
|
|
109
|
-
CollectionScanState &parent;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
class CollectionScanState {
|
|
113
|
-
public:
|
|
114
|
-
CollectionScanState(TableScanState &parent_p)
|
|
115
|
-
: row_group_state(*this), max_row(0), batch_index(0), parent(parent_p) {};
|
|
116
|
-
|
|
117
|
-
//! The row_group scan state
|
|
118
|
-
RowGroupScanState row_group_state;
|
|
103
|
+
//! Row group segment tree
|
|
104
|
+
RowGroupSegmentTree *row_groups;
|
|
119
105
|
//! The total maximum row index
|
|
120
106
|
idx_t max_row;
|
|
121
107
|
//! The current batch index
|
|
122
108
|
idx_t batch_index;
|
|
123
109
|
|
|
124
110
|
public:
|
|
111
|
+
void Initialize(const vector<LogicalType> &types);
|
|
125
112
|
const vector<column_t> &GetColumnIds();
|
|
126
113
|
TableFilterSet *GetFilters();
|
|
127
114
|
AdaptiveFilter *GetAdaptiveFilter();
|
|
128
115
|
bool Scan(DuckTransaction &transaction, DataChunk &result);
|
|
129
116
|
bool ScanCommitted(DataChunk &result, TableScanType type);
|
|
117
|
+
bool ScanCommitted(DataChunk &result, SegmentLock &l, TableScanType type);
|
|
130
118
|
|
|
131
119
|
private:
|
|
132
120
|
TableScanState &parent;
|
|
@@ -158,12 +146,16 @@ private:
|
|
|
158
146
|
};
|
|
159
147
|
|
|
160
148
|
struct ParallelCollectionScanState {
|
|
149
|
+
ParallelCollectionScanState();
|
|
150
|
+
|
|
161
151
|
//! The row group collection we are scanning
|
|
162
152
|
RowGroupCollection *collection;
|
|
163
153
|
RowGroup *current_row_group;
|
|
164
154
|
idx_t vector_index;
|
|
165
155
|
idx_t max_row;
|
|
166
156
|
idx_t batch_index;
|
|
157
|
+
atomic<idx_t> processed_rows;
|
|
158
|
+
mutex lock;
|
|
167
159
|
};
|
|
168
160
|
|
|
169
161
|
struct ParallelTableScanState {
|
|
@@ -13,13 +13,12 @@
|
|
|
13
13
|
|
|
14
14
|
namespace duckdb {
|
|
15
15
|
|
|
16
|
+
template <class T>
|
|
16
17
|
class SegmentBase {
|
|
17
18
|
public:
|
|
18
19
|
SegmentBase(idx_t start, idx_t count) : start(start), count(count), next(nullptr) {
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
SegmentBase *Next() {
|
|
21
|
+
T *Next() {
|
|
23
22
|
#ifndef DUCKDB_R_BUILD
|
|
24
23
|
return next.load();
|
|
25
24
|
#else
|
|
@@ -32,12 +31,13 @@ public:
|
|
|
32
31
|
//! The amount of entries in this storage chunk
|
|
33
32
|
atomic<idx_t> count;
|
|
34
33
|
//! The next segment after this one
|
|
35
|
-
|
|
36
34
|
#ifndef DUCKDB_R_BUILD
|
|
37
|
-
atomic<
|
|
35
|
+
atomic<T *> next;
|
|
38
36
|
#else
|
|
39
|
-
|
|
37
|
+
T *next;
|
|
40
38
|
#endif
|
|
39
|
+
//! The index within the segment tree
|
|
40
|
+
idx_t index;
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
} // namespace duckdb
|