duckdb 0.7.2-dev0.0 → 0.7.2-dev1138.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 +12 -2
- package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- 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 +4 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/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/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +156 -128
- 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 +10 -5
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- 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 +0 -4
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
- 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 +1 -0
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_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 +25 -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/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +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 +3 -0
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_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
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/string_stats.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/exception.hpp"
|
|
13
|
+
#include "duckdb/common/types/hugeint.hpp"
|
|
14
|
+
#include "duckdb/common/enums/filter_propagate_result.hpp"
|
|
15
|
+
#include "duckdb/common/enums/expression_type.hpp"
|
|
16
|
+
#include "duckdb/common/operator/comparison_operators.hpp"
|
|
17
|
+
|
|
18
|
+
namespace duckdb {
|
|
19
|
+
class BaseStatistics;
|
|
20
|
+
class FieldWriter;
|
|
21
|
+
class FieldReader;
|
|
22
|
+
struct SelectionVector;
|
|
23
|
+
class Vector;
|
|
24
|
+
|
|
25
|
+
struct StringStatsData {
|
|
26
|
+
constexpr static uint32_t MAX_STRING_MINMAX_SIZE = 8;
|
|
27
|
+
|
|
28
|
+
//! The minimum value of the segment, potentially truncated
|
|
29
|
+
data_t min[MAX_STRING_MINMAX_SIZE];
|
|
30
|
+
//! The maximum value of the segment, potentially truncated
|
|
31
|
+
data_t max[MAX_STRING_MINMAX_SIZE];
|
|
32
|
+
//! Whether or not the column can contain unicode characters
|
|
33
|
+
bool has_unicode;
|
|
34
|
+
//! Whether or not the maximum string length is known
|
|
35
|
+
bool has_max_string_length;
|
|
36
|
+
//! The maximum string length in bytes
|
|
37
|
+
uint32_t max_string_length;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
struct StringStats {
|
|
41
|
+
//! Unknown statistics - i.e. "has_unicode" is true, "max_string_length" is unknown, "min" is \0, max is \xFF
|
|
42
|
+
DUCKDB_API static BaseStatistics CreateUnknown(LogicalType type);
|
|
43
|
+
//! Empty statistics - i.e. "has_unicode" is false, "max_string_length" is 0, "min" is \xFF, max is \x00
|
|
44
|
+
DUCKDB_API static BaseStatistics CreateEmpty(LogicalType type);
|
|
45
|
+
//! Whether or not the statistics have a maximum string length defined
|
|
46
|
+
DUCKDB_API static bool HasMaxStringLength(const BaseStatistics &stats);
|
|
47
|
+
//! Returns the maximum string length, or throws an exception if !HasMaxStringLength()
|
|
48
|
+
DUCKDB_API static uint32_t MaxStringLength(const BaseStatistics &stats);
|
|
49
|
+
//! Whether or not the strings can contain unicode
|
|
50
|
+
DUCKDB_API static bool CanContainUnicode(const BaseStatistics &stats);
|
|
51
|
+
|
|
52
|
+
//! Resets the max string length so HasMaxStringLength() is false
|
|
53
|
+
DUCKDB_API static void ResetMaxStringLength(BaseStatistics &stats);
|
|
54
|
+
//! FIXME: make this part of Set on statistics
|
|
55
|
+
DUCKDB_API static void SetContainsUnicode(BaseStatistics &stats);
|
|
56
|
+
|
|
57
|
+
DUCKDB_API static void Serialize(const BaseStatistics &stats, FieldWriter &writer);
|
|
58
|
+
DUCKDB_API static BaseStatistics Deserialize(FieldReader &reader, LogicalType type);
|
|
59
|
+
|
|
60
|
+
DUCKDB_API static string ToString(const BaseStatistics &stats);
|
|
61
|
+
|
|
62
|
+
DUCKDB_API static FilterPropagateResult CheckZonemap(const BaseStatistics &stats, ExpressionType comparison_type,
|
|
63
|
+
const string &value);
|
|
64
|
+
|
|
65
|
+
DUCKDB_API static void Update(BaseStatistics &stats, const string_t &value);
|
|
66
|
+
DUCKDB_API static void Merge(BaseStatistics &stats, const BaseStatistics &other);
|
|
67
|
+
DUCKDB_API static void Verify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
68
|
+
|
|
69
|
+
private:
|
|
70
|
+
static StringStatsData &GetDataUnsafe(BaseStatistics &stats);
|
|
71
|
+
static const StringStatsData &GetDataUnsafe(const BaseStatistics &stats);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
} // namespace duckdb
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/struct_stats.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/exception.hpp"
|
|
13
|
+
|
|
14
|
+
namespace duckdb {
|
|
15
|
+
class BaseStatistics;
|
|
16
|
+
class FieldWriter;
|
|
17
|
+
class FieldReader;
|
|
18
|
+
struct SelectionVector;
|
|
19
|
+
class Vector;
|
|
20
|
+
|
|
21
|
+
struct StructStats {
|
|
22
|
+
DUCKDB_API static void Construct(BaseStatistics &stats);
|
|
23
|
+
DUCKDB_API static BaseStatistics CreateUnknown(LogicalType type);
|
|
24
|
+
DUCKDB_API static BaseStatistics CreateEmpty(LogicalType type);
|
|
25
|
+
|
|
26
|
+
DUCKDB_API static const BaseStatistics *GetChildStats(const BaseStatistics &stats);
|
|
27
|
+
DUCKDB_API static const BaseStatistics &GetChildStats(const BaseStatistics &stats, idx_t i);
|
|
28
|
+
DUCKDB_API static BaseStatistics &GetChildStats(BaseStatistics &stats, idx_t i);
|
|
29
|
+
DUCKDB_API static void SetChildStats(BaseStatistics &stats, idx_t i, const BaseStatistics &new_stats);
|
|
30
|
+
DUCKDB_API static void SetChildStats(BaseStatistics &stats, idx_t i, unique_ptr<BaseStatistics> new_stats);
|
|
31
|
+
|
|
32
|
+
DUCKDB_API static void Serialize(const BaseStatistics &stats, FieldWriter &writer);
|
|
33
|
+
DUCKDB_API static BaseStatistics Deserialize(FieldReader &reader, LogicalType type);
|
|
34
|
+
|
|
35
|
+
DUCKDB_API static string ToString(const BaseStatistics &stats);
|
|
36
|
+
|
|
37
|
+
DUCKDB_API static void Merge(BaseStatistics &stats, const BaseStatistics &other);
|
|
38
|
+
DUCKDB_API static void Copy(BaseStatistics &stats, const BaseStatistics &other);
|
|
39
|
+
DUCKDB_API static void Verify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
} // namespace duckdb
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
10
10
|
#include "duckdb/storage/checkpoint/string_checkpoint_state.hpp"
|
|
11
11
|
#include "duckdb/storage/segment/uncompressed.hpp"
|
|
12
|
-
#include "duckdb/storage/
|
|
12
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
13
13
|
#include "duckdb/storage/string_uncompressed.hpp"
|
|
14
14
|
#include "duckdb/storage/table/append_state.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
@@ -173,8 +173,7 @@ public:
|
|
|
173
173
|
|
|
174
174
|
public:
|
|
175
175
|
static inline void UpdateStringStats(SegmentStatistics &stats, const string_t &new_value) {
|
|
176
|
-
|
|
177
|
-
sstats.Update(new_value);
|
|
176
|
+
StringStats::Update(stats.statistics, new_value);
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
static void SetDictionary(ColumnSegment &segment, BufferHandle &handle, StringDictionaryContainer dict);
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "duckdb/storage/data_pointer.hpp"
|
|
14
14
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
16
|
+
#include "duckdb/storage/table/column_data.hpp"
|
|
16
17
|
#include "duckdb/common/unordered_set.hpp"
|
|
17
18
|
|
|
18
19
|
namespace duckdb {
|
|
@@ -28,7 +29,7 @@ struct ColumnCheckpointState {
|
|
|
28
29
|
|
|
29
30
|
RowGroup &row_group;
|
|
30
31
|
ColumnData &column_data;
|
|
31
|
-
|
|
32
|
+
ColumnSegmentTree new_tree;
|
|
32
33
|
vector<DataPointer> data_pointers;
|
|
33
34
|
unique_ptr<BaseStatistics> global_stats;
|
|
34
35
|
|
|
@@ -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
|