duckdb 0.7.2-dev12.0 → 0.7.2-dev1238.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/local_file_system.cpp +64 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/comparators.cpp +14 -5
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +18 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +60 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +9 -12
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/main/settings/settings.cpp +20 -8
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -10,32 +10,39 @@
|
|
|
10
10
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
11
11
|
#include "duckdb/storage/table/list_column_data.hpp"
|
|
12
12
|
#include "duckdb/storage/table/standard_column_data.hpp"
|
|
13
|
-
#include "duckdb/transaction/transaction.hpp"
|
|
14
13
|
|
|
15
14
|
#include "duckdb/storage/table/struct_column_data.hpp"
|
|
16
15
|
#include "duckdb/storage/table/update_segment.hpp"
|
|
17
16
|
#include "duckdb/storage/table_storage_info.hpp"
|
|
17
|
+
#include "duckdb/storage/table/append_state.hpp"
|
|
18
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
18
19
|
#include "duckdb/main/attached_database.hpp"
|
|
19
20
|
|
|
20
21
|
namespace duckdb {
|
|
21
22
|
|
|
22
23
|
ColumnData::ColumnData(BlockManager &block_manager, DataTableInfo &info, idx_t column_index, idx_t start_row,
|
|
23
|
-
LogicalType
|
|
24
|
-
:
|
|
25
|
-
parent(parent), version(0) {
|
|
24
|
+
LogicalType type_p, ColumnData *parent)
|
|
25
|
+
: start(start_row), count(0), block_manager(block_manager), info(info), column_index(column_index),
|
|
26
|
+
type(std::move(type_p)), parent(parent), version(0) {
|
|
27
|
+
if (!parent) {
|
|
28
|
+
stats = make_unique<SegmentStatistics>(type);
|
|
29
|
+
}
|
|
26
30
|
}
|
|
27
31
|
|
|
28
32
|
ColumnData::ColumnData(ColumnData &other, idx_t start, ColumnData *parent)
|
|
29
|
-
:
|
|
30
|
-
type(std::move(other.type)), parent(parent),
|
|
33
|
+
: start(start), count(other.count), block_manager(other.block_manager), info(other.info),
|
|
34
|
+
column_index(other.column_index), type(std::move(other.type)), parent(parent),
|
|
35
|
+
version(parent ? parent->version + 1 : 0) {
|
|
31
36
|
if (other.updates) {
|
|
32
37
|
updates = make_unique<UpdateSegment>(*other.updates, *this);
|
|
33
38
|
}
|
|
39
|
+
if (other.stats) {
|
|
40
|
+
stats = make_unique<SegmentStatistics>(other.stats->statistics.Copy());
|
|
41
|
+
}
|
|
34
42
|
idx_t offset = 0;
|
|
35
|
-
for (auto segment
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
offset += segment->count;
|
|
43
|
+
for (auto &segment : other.data.Segments()) {
|
|
44
|
+
this->data.AppendSegment(ColumnSegment::CreateSegment(segment, start + offset));
|
|
45
|
+
offset += segment.count;
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
48
|
|
|
@@ -62,34 +69,29 @@ void ColumnData::IncrementVersion() {
|
|
|
62
69
|
}
|
|
63
70
|
|
|
64
71
|
idx_t ColumnData::GetMaxEntry() {
|
|
65
|
-
|
|
66
|
-
auto first_segment = data.GetRootSegment(l);
|
|
67
|
-
auto last_segment = data.GetLastSegment(l);
|
|
68
|
-
if (!first_segment) {
|
|
69
|
-
D_ASSERT(!last_segment);
|
|
70
|
-
return 0;
|
|
71
|
-
} else {
|
|
72
|
-
D_ASSERT(last_segment->start >= first_segment->start);
|
|
73
|
-
return last_segment->start + last_segment->count - first_segment->start;
|
|
74
|
-
}
|
|
72
|
+
return count;
|
|
75
73
|
}
|
|
76
74
|
|
|
77
75
|
void ColumnData::InitializeScan(ColumnScanState &state) {
|
|
78
|
-
state.current =
|
|
76
|
+
state.current = data.GetRootSegment();
|
|
77
|
+
state.segment_tree = &data;
|
|
79
78
|
state.row_index = state.current ? state.current->start : 0;
|
|
80
79
|
state.internal_index = state.row_index;
|
|
81
80
|
state.initialized = false;
|
|
82
81
|
state.version = version;
|
|
83
82
|
state.scan_state.reset();
|
|
83
|
+
state.last_offset = 0;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
void ColumnData::InitializeScanWithOffset(ColumnScanState &state, idx_t row_idx) {
|
|
87
|
-
state.current =
|
|
87
|
+
state.current = data.GetSegment(row_idx);
|
|
88
|
+
state.segment_tree = &data;
|
|
88
89
|
state.row_index = row_idx;
|
|
89
90
|
state.internal_index = state.current->start;
|
|
90
91
|
state.initialized = false;
|
|
91
92
|
state.version = version;
|
|
92
93
|
state.scan_state.reset();
|
|
94
|
+
state.last_offset = 0;
|
|
93
95
|
}
|
|
94
96
|
|
|
95
97
|
idx_t ColumnData::ScanVector(ColumnScanState &state, Vector &result, idx_t remaining) {
|
|
@@ -125,11 +127,12 @@ idx_t ColumnData::ScanVector(ColumnScanState &state, Vector &result, idx_t remai
|
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
if (remaining > 0) {
|
|
128
|
-
|
|
130
|
+
auto next = data.GetNextSegment(state.current);
|
|
131
|
+
if (!next) {
|
|
129
132
|
break;
|
|
130
133
|
}
|
|
131
134
|
state.previous_states.emplace_back(std::move(state.scan_state));
|
|
132
|
-
state.current =
|
|
135
|
+
state.current = next;
|
|
133
136
|
state.current->InitializeScan(state);
|
|
134
137
|
state.segment_checked = false;
|
|
135
138
|
D_ASSERT(state.row_index >= state.current->start &&
|
|
@@ -228,20 +231,60 @@ void ColumnData::Append(BaseStatistics &stats, ColumnAppendState &state, Vector
|
|
|
228
231
|
AppendData(stats, state, vdata, count);
|
|
229
232
|
}
|
|
230
233
|
|
|
234
|
+
void ColumnData::Append(ColumnAppendState &state, Vector &vector, idx_t count) {
|
|
235
|
+
if (parent || !stats) {
|
|
236
|
+
throw InternalException("ColumnData::Append called on a column with a parent or without stats");
|
|
237
|
+
}
|
|
238
|
+
Append(stats->statistics, state, vector, count);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
bool ColumnData::CheckZonemap(TableFilter &filter) {
|
|
242
|
+
if (!stats) {
|
|
243
|
+
throw InternalException("ColumnData::CheckZonemap called on a column without stats");
|
|
244
|
+
}
|
|
245
|
+
auto propagate_result = filter.CheckStatistics(stats->statistics);
|
|
246
|
+
if (propagate_result == FilterPropagateResult::FILTER_ALWAYS_FALSE ||
|
|
247
|
+
propagate_result == FilterPropagateResult::FILTER_FALSE_OR_NULL) {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
unique_ptr<BaseStatistics> ColumnData::GetStatistics() {
|
|
254
|
+
if (!stats) {
|
|
255
|
+
throw InternalException("ColumnData::GetStatistics called on a column without stats");
|
|
256
|
+
}
|
|
257
|
+
return stats->statistics.ToUnique();
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
void ColumnData::MergeStatistics(const BaseStatistics &other) {
|
|
261
|
+
if (!stats) {
|
|
262
|
+
throw InternalException("ColumnData::MergeStatistics called on a column without stats");
|
|
263
|
+
}
|
|
264
|
+
return stats->statistics.Merge(other);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
void ColumnData::MergeIntoStatistics(BaseStatistics &other) {
|
|
268
|
+
if (!stats) {
|
|
269
|
+
throw InternalException("ColumnData::MergeIntoStatistics called on a column without stats");
|
|
270
|
+
}
|
|
271
|
+
return other.Merge(stats->statistics);
|
|
272
|
+
}
|
|
273
|
+
|
|
231
274
|
void ColumnData::InitializeAppend(ColumnAppendState &state) {
|
|
232
275
|
auto l = data.Lock();
|
|
233
276
|
if (data.IsEmpty(l)) {
|
|
234
277
|
// no segments yet, append an empty segment
|
|
235
278
|
AppendTransientSegment(l, start);
|
|
236
279
|
}
|
|
237
|
-
auto segment =
|
|
280
|
+
auto segment = data.GetLastSegment(l);
|
|
238
281
|
if (segment->segment_type == ColumnSegmentType::PERSISTENT) {
|
|
239
282
|
// no transient segments yet
|
|
240
283
|
auto total_rows = segment->start + segment->count;
|
|
241
284
|
AppendTransientSegment(l, total_rows);
|
|
242
|
-
state.current =
|
|
285
|
+
state.current = data.GetLastSegment(l);
|
|
243
286
|
} else {
|
|
244
|
-
state.current =
|
|
287
|
+
state.current = segment;
|
|
245
288
|
}
|
|
246
289
|
|
|
247
290
|
D_ASSERT(state.current->segment_type == ColumnSegmentType::TRANSIENT);
|
|
@@ -251,10 +294,11 @@ void ColumnData::InitializeAppend(ColumnAppendState &state) {
|
|
|
251
294
|
|
|
252
295
|
void ColumnData::AppendData(BaseStatistics &stats, ColumnAppendState &state, UnifiedVectorFormat &vdata, idx_t count) {
|
|
253
296
|
idx_t offset = 0;
|
|
297
|
+
this->count += count;
|
|
254
298
|
while (true) {
|
|
255
299
|
// append the data from the vector
|
|
256
300
|
idx_t copied_elements = state.current->Append(state, vdata, offset, count);
|
|
257
|
-
stats.Merge(
|
|
301
|
+
stats.Merge(state.current->stats.statistics);
|
|
258
302
|
if (copied_elements == count) {
|
|
259
303
|
// finished copying everything
|
|
260
304
|
break;
|
|
@@ -264,7 +308,7 @@ void ColumnData::AppendData(BaseStatistics &stats, ColumnAppendState &state, Uni
|
|
|
264
308
|
{
|
|
265
309
|
auto l = data.Lock();
|
|
266
310
|
AppendTransientSegment(l, state.current->start + state.current->count);
|
|
267
|
-
state.current =
|
|
311
|
+
state.current = data.GetLastSegment(l);
|
|
268
312
|
state.current->InitializeAppend(state);
|
|
269
313
|
}
|
|
270
314
|
offset += copied_elements;
|
|
@@ -284,12 +328,13 @@ void ColumnData::RevertAppend(row_t start_row) {
|
|
|
284
328
|
// find the segment index that the current row belongs to
|
|
285
329
|
idx_t segment_index = data.GetSegmentIndex(l, start_row);
|
|
286
330
|
auto segment = data.GetSegmentByIndex(l, segment_index);
|
|
287
|
-
auto &transient =
|
|
331
|
+
auto &transient = *segment;
|
|
288
332
|
D_ASSERT(transient.segment_type == ColumnSegmentType::TRANSIENT);
|
|
289
333
|
|
|
290
334
|
// remove any segments AFTER this segment: they should be deleted entirely
|
|
291
335
|
data.EraseSegments(l, segment_index);
|
|
292
336
|
|
|
337
|
+
this->count = start_row - this->start;
|
|
293
338
|
segment->next = nullptr;
|
|
294
339
|
transient.RevertAppend(start_row);
|
|
295
340
|
}
|
|
@@ -299,14 +344,14 @@ idx_t ColumnData::Fetch(ColumnScanState &state, row_t row_id, Vector &result) {
|
|
|
299
344
|
D_ASSERT(idx_t(row_id) >= start);
|
|
300
345
|
// perform the fetch within the segment
|
|
301
346
|
state.row_index = start + ((row_id - start) / STANDARD_VECTOR_SIZE * STANDARD_VECTOR_SIZE);
|
|
302
|
-
state.current =
|
|
347
|
+
state.current = data.GetSegment(state.row_index);
|
|
303
348
|
state.internal_index = state.current->start;
|
|
304
349
|
return ScanVector(state, result, STANDARD_VECTOR_SIZE);
|
|
305
350
|
}
|
|
306
351
|
|
|
307
352
|
void ColumnData::FetchRow(TransactionData transaction, ColumnFetchState &state, row_t row_id, Vector &result,
|
|
308
353
|
idx_t result_idx) {
|
|
309
|
-
auto segment =
|
|
354
|
+
auto segment = data.GetSegment(row_id);
|
|
310
355
|
|
|
311
356
|
// now perform the fetch within the segment
|
|
312
357
|
segment->FetchRow(state, row_id, result, result_idx);
|
|
@@ -357,15 +402,14 @@ void ColumnData::AppendTransientSegment(SegmentLock &l, idx_t start_row) {
|
|
|
357
402
|
}
|
|
358
403
|
|
|
359
404
|
void ColumnData::CommitDropColumn() {
|
|
360
|
-
auto
|
|
361
|
-
|
|
362
|
-
if (segment
|
|
363
|
-
auto block_id = segment
|
|
405
|
+
for (auto &segment_p : data.Segments()) {
|
|
406
|
+
auto &segment = segment_p;
|
|
407
|
+
if (segment.segment_type == ColumnSegmentType::PERSISTENT) {
|
|
408
|
+
auto block_id = segment.GetBlockId();
|
|
364
409
|
if (block_id != INVALID_BLOCK) {
|
|
365
410
|
block_manager.MarkBlockAsModified(block_id);
|
|
366
411
|
}
|
|
367
412
|
}
|
|
368
|
-
segment = (ColumnSegment *)segment->Next();
|
|
369
413
|
}
|
|
370
414
|
}
|
|
371
415
|
|
|
@@ -389,7 +433,7 @@ unique_ptr<ColumnCheckpointState> ColumnData::Checkpoint(RowGroup &row_group,
|
|
|
389
433
|
// scan the segments of the column data
|
|
390
434
|
// set up the checkpoint state
|
|
391
435
|
auto checkpoint_state = CreateCheckpointState(row_group, partial_block_manager);
|
|
392
|
-
checkpoint_state->global_stats = BaseStatistics::CreateEmpty(type
|
|
436
|
+
checkpoint_state->global_stats = BaseStatistics::CreateEmpty(type).ToUnique();
|
|
393
437
|
|
|
394
438
|
auto l = data.Lock();
|
|
395
439
|
auto nodes = data.MoveSegments(l);
|
|
@@ -411,16 +455,28 @@ unique_ptr<ColumnCheckpointState> ColumnData::Checkpoint(RowGroup &row_group,
|
|
|
411
455
|
|
|
412
456
|
void ColumnData::DeserializeColumn(Deserializer &source) {
|
|
413
457
|
// load the data pointers for the column
|
|
458
|
+
this->count = 0;
|
|
414
459
|
idx_t data_pointer_count = source.Read<idx_t>();
|
|
415
460
|
for (idx_t data_ptr = 0; data_ptr < data_pointer_count; data_ptr++) {
|
|
416
461
|
// read the data pointer
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
462
|
+
auto row_start = source.Read<idx_t>();
|
|
463
|
+
auto tuple_count = source.Read<idx_t>();
|
|
464
|
+
auto block_pointer_block_id = source.Read<block_id_t>();
|
|
465
|
+
auto block_pointer_offset = source.Read<uint32_t>();
|
|
466
|
+
auto compression_type = source.Read<CompressionType>();
|
|
467
|
+
auto segment_stats = BaseStatistics::Deserialize(source, type);
|
|
468
|
+
if (stats) {
|
|
469
|
+
stats->statistics.Merge(segment_stats);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
DataPointer data_pointer(std::move(segment_stats));
|
|
473
|
+
data_pointer.row_start = row_start;
|
|
474
|
+
data_pointer.tuple_count = tuple_count;
|
|
475
|
+
data_pointer.block_pointer.block_id = block_pointer_block_id;
|
|
476
|
+
data_pointer.block_pointer.offset = block_pointer_offset;
|
|
477
|
+
data_pointer.compression_type = compression_type;
|
|
478
|
+
|
|
479
|
+
this->count += tuple_count;
|
|
424
480
|
|
|
425
481
|
// create a persistent segment
|
|
426
482
|
auto segment = ColumnSegment::CreatePersistentSegment(
|
|
@@ -458,7 +514,6 @@ void ColumnData::GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, T
|
|
|
458
514
|
while (segment) {
|
|
459
515
|
ColumnSegmentInfo column_info;
|
|
460
516
|
column_info.row_group_index = row_group_index;
|
|
461
|
-
;
|
|
462
517
|
column_info.column_id = col_path[0];
|
|
463
518
|
column_info.column_path = col_path_str;
|
|
464
519
|
column_info.segment_idx = segment_idx;
|
|
@@ -466,8 +521,7 @@ void ColumnData::GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, T
|
|
|
466
521
|
column_info.segment_start = segment->start;
|
|
467
522
|
column_info.segment_count = segment->count;
|
|
468
523
|
column_info.compression_type = CompressionTypeToString(segment->function->type);
|
|
469
|
-
column_info.segment_stats =
|
|
470
|
-
segment->stats.statistics ? segment->stats.statistics->ToString() : string("No Stats");
|
|
524
|
+
column_info.segment_stats = segment->stats.statistics.ToString();
|
|
471
525
|
column_info.has_updates = updates ? true : false;
|
|
472
526
|
// persistent
|
|
473
527
|
// block_id
|
|
@@ -482,7 +536,7 @@ void ColumnData::GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, T
|
|
|
482
536
|
result.column_segments.push_back(std::move(column_info));
|
|
483
537
|
|
|
484
538
|
segment_idx++;
|
|
485
|
-
segment = (ColumnSegment *)segment
|
|
539
|
+
segment = (ColumnSegment *)data.GetNextSegment(segment);
|
|
486
540
|
}
|
|
487
541
|
}
|
|
488
542
|
|
|
@@ -490,20 +544,22 @@ void ColumnData::Verify(RowGroup &parent) {
|
|
|
490
544
|
#ifdef DEBUG
|
|
491
545
|
D_ASSERT(this->start == parent.start);
|
|
492
546
|
data.Verify();
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
D_ASSERT(
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
547
|
+
if (type.InternalType() == PhysicalType::STRUCT) {
|
|
548
|
+
// structs don't have segments
|
|
549
|
+
D_ASSERT(!data.GetRootSegment());
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
idx_t current_index = 0;
|
|
553
|
+
idx_t current_start = this->start;
|
|
554
|
+
idx_t total_count = 0;
|
|
555
|
+
for (auto &segment : data.Segments()) {
|
|
556
|
+
D_ASSERT(segment.index == current_index);
|
|
557
|
+
D_ASSERT(segment.start == current_start);
|
|
558
|
+
current_start += segment.count;
|
|
559
|
+
total_count += segment.count;
|
|
560
|
+
current_index++;
|
|
506
561
|
}
|
|
562
|
+
D_ASSERT(this->count == total_count);
|
|
507
563
|
#endif
|
|
508
564
|
}
|
|
509
565
|
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
#include "duckdb/storage/table/update_segment.hpp"
|
|
4
4
|
#include "duckdb/storage/data_table.hpp"
|
|
5
5
|
#include "duckdb/parser/column_definition.hpp"
|
|
6
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
7
|
+
|
|
6
8
|
namespace duckdb {
|
|
7
9
|
|
|
8
10
|
ColumnDataCheckpointer::ColumnDataCheckpointer(ColumnData &col_data_p, RowGroup &row_group_p,
|
|
@@ -38,7 +40,7 @@ ColumnCheckpointState &ColumnDataCheckpointer::GetCheckpointState() {
|
|
|
38
40
|
void ColumnDataCheckpointer::ScanSegments(const std::function<void(Vector &, idx_t)> &callback) {
|
|
39
41
|
Vector scan_vector(intermediate.GetType(), nullptr);
|
|
40
42
|
for (idx_t segment_idx = 0; segment_idx < nodes.size(); segment_idx++) {
|
|
41
|
-
auto segment =
|
|
43
|
+
auto segment = nodes[segment_idx].node.get();
|
|
42
44
|
ColumnScanState scan_state;
|
|
43
45
|
scan_state.current = segment;
|
|
44
46
|
segment->InitializeScan(scan_state);
|
|
@@ -161,9 +163,9 @@ void ColumnDataCheckpointer::WriteToDisk() {
|
|
|
161
163
|
// first we check the current segments
|
|
162
164
|
// if there are any persistent segments, we will mark their old block ids as modified
|
|
163
165
|
// since the segments will be rewritten their old on disk data is no longer required
|
|
164
|
-
auto &block_manager = col_data.
|
|
166
|
+
auto &block_manager = col_data.GetBlockManager();
|
|
165
167
|
for (idx_t segment_idx = 0; segment_idx < nodes.size(); segment_idx++) {
|
|
166
|
-
auto segment =
|
|
168
|
+
auto segment = nodes[segment_idx].node.get();
|
|
167
169
|
if (segment->segment_type == ColumnSegmentType::PERSISTENT) {
|
|
168
170
|
// persistent segment has updates: mark it as modified and rewrite the block with the merged updates
|
|
169
171
|
auto block_id = segment->GetBlockId();
|
|
@@ -194,7 +196,7 @@ void ColumnDataCheckpointer::WriteToDisk() {
|
|
|
194
196
|
|
|
195
197
|
bool ColumnDataCheckpointer::HasChanges() {
|
|
196
198
|
for (idx_t segment_idx = 0; segment_idx < nodes.size(); segment_idx++) {
|
|
197
|
-
auto segment =
|
|
199
|
+
auto segment = nodes[segment_idx].node.get();
|
|
198
200
|
if (segment->segment_type == ColumnSegmentType::TRANSIENT) {
|
|
199
201
|
// transient segment: always need to write to disk
|
|
200
202
|
return true;
|
|
@@ -214,20 +216,19 @@ void ColumnDataCheckpointer::WritePersistentSegments() {
|
|
|
214
216
|
// all segments are persistent and there are no updates
|
|
215
217
|
// we only need to write the metadata
|
|
216
218
|
for (idx_t segment_idx = 0; segment_idx < nodes.size(); segment_idx++) {
|
|
217
|
-
auto segment =
|
|
219
|
+
auto segment = nodes[segment_idx].node.get();
|
|
218
220
|
D_ASSERT(segment->segment_type == ColumnSegmentType::PERSISTENT);
|
|
219
221
|
|
|
220
222
|
// set up the data pointer directly using the data from the persistent segment
|
|
221
|
-
DataPointer pointer;
|
|
223
|
+
DataPointer pointer(segment->stats.statistics.Copy());
|
|
222
224
|
pointer.block_pointer.block_id = segment->GetBlockId();
|
|
223
225
|
pointer.block_pointer.offset = segment->GetBlockOffset();
|
|
224
226
|
pointer.row_start = segment->start;
|
|
225
227
|
pointer.tuple_count = segment->count;
|
|
226
228
|
pointer.compression_type = segment->function->type;
|
|
227
|
-
pointer.statistics = segment->stats.statistics->Copy();
|
|
228
229
|
|
|
229
230
|
// merge the persistent stats into the global column stats
|
|
230
|
-
state.global_stats->Merge(
|
|
231
|
+
state.global_stats->Merge(segment->stats.statistics);
|
|
231
232
|
|
|
232
233
|
// directly append the current segment to the new tree
|
|
233
234
|
state.new_tree.AppendSegment(std::move(nodes[segment_idx].node));
|
|
@@ -236,7 +237,7 @@ void ColumnDataCheckpointer::WritePersistentSegments() {
|
|
|
236
237
|
}
|
|
237
238
|
}
|
|
238
239
|
|
|
239
|
-
void ColumnDataCheckpointer::Checkpoint(vector<SegmentNode
|
|
240
|
+
void ColumnDataCheckpointer::Checkpoint(vector<SegmentNode<ColumnSegment>> nodes) {
|
|
240
241
|
D_ASSERT(!nodes.empty());
|
|
241
242
|
this->nodes = std::move(nodes);
|
|
242
243
|
// first check if any of the segments have changes
|
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
#include "duckdb/storage/table/update_segment.hpp"
|
|
4
4
|
#include "duckdb/common/types/null_value.hpp"
|
|
5
5
|
#include "duckdb/common/types/vector.hpp"
|
|
6
|
-
#include "duckdb/common/vector_operations/vector_operations.hpp"
|
|
7
6
|
#include "duckdb/storage/table/append_state.hpp"
|
|
8
7
|
#include "duckdb/storage/storage_manager.hpp"
|
|
9
8
|
#include "duckdb/planner/filter/conjunction_filter.hpp"
|
|
10
9
|
#include "duckdb/planner/filter/constant_filter.hpp"
|
|
11
|
-
#include "duckdb/planner/filter/null_filter.hpp"
|
|
12
10
|
#include "duckdb/main/config.hpp"
|
|
11
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
13
12
|
|
|
14
13
|
#include <cstring>
|
|
15
14
|
|
|
@@ -19,7 +18,7 @@ unique_ptr<ColumnSegment> ColumnSegment::CreatePersistentSegment(DatabaseInstanc
|
|
|
19
18
|
block_id_t block_id, idx_t offset,
|
|
20
19
|
const LogicalType &type, idx_t start, idx_t count,
|
|
21
20
|
CompressionType compression_type,
|
|
22
|
-
|
|
21
|
+
BaseStatistics statistics) {
|
|
23
22
|
auto &config = DBConfig::GetConfig(db);
|
|
24
23
|
CompressionFunction *function;
|
|
25
24
|
shared_ptr<BlockHandle> block;
|
|
@@ -48,7 +47,7 @@ unique_ptr<ColumnSegment> ColumnSegment::CreateTransientSegment(DatabaseInstance
|
|
|
48
47
|
buffer_manager.Allocate(segment_size, false, &block);
|
|
49
48
|
}
|
|
50
49
|
return make_unique<ColumnSegment>(db, std::move(block), type, ColumnSegmentType::TRANSIENT, start, 0, function,
|
|
51
|
-
|
|
50
|
+
BaseStatistics::CreateEmpty(type), INVALID_BLOCK, 0, segment_size);
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
unique_ptr<ColumnSegment> ColumnSegment::CreateSegment(ColumnSegment &other, idx_t start) {
|
|
@@ -57,11 +56,11 @@ unique_ptr<ColumnSegment> ColumnSegment::CreateSegment(ColumnSegment &other, idx
|
|
|
57
56
|
|
|
58
57
|
ColumnSegment::ColumnSegment(DatabaseInstance &db, shared_ptr<BlockHandle> block, LogicalType type_p,
|
|
59
58
|
ColumnSegmentType segment_type, idx_t start, idx_t count, CompressionFunction *function_p,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
BaseStatistics statistics, block_id_t block_id_p, idx_t offset_p, idx_t segment_size_p)
|
|
60
|
+
: SegmentBase<ColumnSegment>(start, count), db(db), type(std::move(type_p)),
|
|
61
|
+
type_size(GetTypeIdSize(type.InternalType())), segment_type(segment_type), function(function_p),
|
|
62
|
+
stats(std::move(statistics)), block(std::move(block)), block_id(block_id_p), offset(offset_p),
|
|
63
|
+
segment_size(segment_size_p) {
|
|
65
64
|
D_ASSERT(function);
|
|
66
65
|
if (function->init_segment) {
|
|
67
66
|
segment_state = function->init_segment(*this, block_id);
|
|
@@ -69,10 +68,10 @@ ColumnSegment::ColumnSegment(DatabaseInstance &db, shared_ptr<BlockHandle> block
|
|
|
69
68
|
}
|
|
70
69
|
|
|
71
70
|
ColumnSegment::ColumnSegment(ColumnSegment &other, idx_t start)
|
|
72
|
-
: SegmentBase(start, other.count), db(other.db), type(std::move(other.type)),
|
|
73
|
-
|
|
74
|
-
block(std::move(other.block)), block_id(other.block_id), offset(other.offset),
|
|
75
|
-
segment_state(std::move(other.segment_state)) {
|
|
71
|
+
: SegmentBase<ColumnSegment>(start, other.count.load()), db(other.db), type(std::move(other.type)),
|
|
72
|
+
type_size(other.type_size), segment_type(other.segment_type), function(other.function),
|
|
73
|
+
stats(std::move(other.stats)), block(std::move(other.block)), block_id(other.block_id), offset(other.offset),
|
|
74
|
+
segment_size(other.segment_size), segment_state(std::move(other.segment_state)) {
|
|
76
75
|
}
|
|
77
76
|
|
|
78
77
|
ColumnSegment::~ColumnSegment() {
|
|
@@ -181,13 +180,12 @@ void ColumnSegment::ConvertToPersistent(BlockManager *block_manager, block_id_t
|
|
|
181
180
|
block_id = block_id_p;
|
|
182
181
|
offset = 0;
|
|
183
182
|
|
|
184
|
-
D_ASSERT(stats.statistics);
|
|
185
183
|
if (block_id == INVALID_BLOCK) {
|
|
186
184
|
// constant block: reset the block buffer
|
|
187
|
-
D_ASSERT(stats.statistics
|
|
185
|
+
D_ASSERT(stats.statistics.IsConstant());
|
|
188
186
|
block.reset();
|
|
189
187
|
} else {
|
|
190
|
-
D_ASSERT(!stats.statistics
|
|
188
|
+
D_ASSERT(!stats.statistics.IsConstant());
|
|
191
189
|
// non-constant block: write the block to disk
|
|
192
190
|
// the data for the block already exists in-memory of our block
|
|
193
191
|
// instead of copying the data we alter some metadata so the buffer points to an on-disk block
|
|
@@ -218,12 +216,12 @@ void ColumnSegment::MarkAsPersistent(shared_ptr<BlockHandle> block_p, uint32_t o
|
|
|
218
216
|
// Filter Selection
|
|
219
217
|
//===--------------------------------------------------------------------===//
|
|
220
218
|
template <class T, class OP, bool HAS_NULL>
|
|
221
|
-
static idx_t TemplatedFilterSelection(T *vec, T
|
|
219
|
+
static idx_t TemplatedFilterSelection(T *vec, T predicate, SelectionVector &sel, idx_t approved_tuple_count,
|
|
222
220
|
ValidityMask &mask, SelectionVector &result_sel) {
|
|
223
221
|
idx_t result_count = 0;
|
|
224
222
|
for (idx_t i = 0; i < approved_tuple_count; i++) {
|
|
225
223
|
auto idx = sel.get_index(i);
|
|
226
|
-
if ((!HAS_NULL || mask.RowIsValid(idx)) && OP::Operation(vec[idx],
|
|
224
|
+
if ((!HAS_NULL || mask.RowIsValid(idx)) && OP::Operation(vec[idx], predicate)) {
|
|
227
225
|
result_sel.set_index(result_count++, idx);
|
|
228
226
|
}
|
|
229
227
|
}
|
|
@@ -231,7 +229,7 @@ static idx_t TemplatedFilterSelection(T *vec, T *predicate, SelectionVector &sel
|
|
|
231
229
|
}
|
|
232
230
|
|
|
233
231
|
template <class T>
|
|
234
|
-
static void FilterSelectionSwitch(T *vec, T
|
|
232
|
+
static void FilterSelectionSwitch(T *vec, T predicate, SelectionVector &sel, idx_t &approved_tuple_count,
|
|
235
233
|
ExpressionType comparison_type, ValidityMask &mask) {
|
|
236
234
|
SelectionVector new_sel(approved_tuple_count);
|
|
237
235
|
// the inplace loops take the result as the last parameter
|
|
@@ -372,104 +370,91 @@ idx_t ColumnSegment::FilterSelection(SelectionVector &sel, Vector &result, const
|
|
|
372
370
|
switch (result.GetType().InternalType()) {
|
|
373
371
|
case PhysicalType::UINT8: {
|
|
374
372
|
auto result_flat = FlatVector::GetData<uint8_t>(result);
|
|
375
|
-
|
|
376
|
-
auto predicate = FlatVector::GetData<uint8_t>(predicate_vector);
|
|
373
|
+
auto predicate = UTinyIntValue::Get(constant_filter.constant);
|
|
377
374
|
FilterSelectionSwitch<uint8_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
378
375
|
constant_filter.comparison_type, mask);
|
|
379
376
|
break;
|
|
380
377
|
}
|
|
381
378
|
case PhysicalType::UINT16: {
|
|
382
379
|
auto result_flat = FlatVector::GetData<uint16_t>(result);
|
|
383
|
-
|
|
384
|
-
auto predicate = FlatVector::GetData<uint16_t>(predicate_vector);
|
|
380
|
+
auto predicate = USmallIntValue::Get(constant_filter.constant);
|
|
385
381
|
FilterSelectionSwitch<uint16_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
386
382
|
constant_filter.comparison_type, mask);
|
|
387
383
|
break;
|
|
388
384
|
}
|
|
389
385
|
case PhysicalType::UINT32: {
|
|
390
386
|
auto result_flat = FlatVector::GetData<uint32_t>(result);
|
|
391
|
-
|
|
392
|
-
auto predicate = FlatVector::GetData<uint32_t>(predicate_vector);
|
|
387
|
+
auto predicate = UIntegerValue::Get(constant_filter.constant);
|
|
393
388
|
FilterSelectionSwitch<uint32_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
394
389
|
constant_filter.comparison_type, mask);
|
|
395
390
|
break;
|
|
396
391
|
}
|
|
397
392
|
case PhysicalType::UINT64: {
|
|
398
393
|
auto result_flat = FlatVector::GetData<uint64_t>(result);
|
|
399
|
-
|
|
400
|
-
auto predicate = FlatVector::GetData<uint64_t>(predicate_vector);
|
|
394
|
+
auto predicate = UBigIntValue::Get(constant_filter.constant);
|
|
401
395
|
FilterSelectionSwitch<uint64_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
402
396
|
constant_filter.comparison_type, mask);
|
|
403
397
|
break;
|
|
404
398
|
}
|
|
405
399
|
case PhysicalType::INT8: {
|
|
406
400
|
auto result_flat = FlatVector::GetData<int8_t>(result);
|
|
407
|
-
|
|
408
|
-
auto predicate = FlatVector::GetData<int8_t>(predicate_vector);
|
|
401
|
+
auto predicate = TinyIntValue::Get(constant_filter.constant);
|
|
409
402
|
FilterSelectionSwitch<int8_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
410
403
|
constant_filter.comparison_type, mask);
|
|
411
404
|
break;
|
|
412
405
|
}
|
|
413
406
|
case PhysicalType::INT16: {
|
|
414
407
|
auto result_flat = FlatVector::GetData<int16_t>(result);
|
|
415
|
-
|
|
416
|
-
auto predicate = FlatVector::GetData<int16_t>(predicate_vector);
|
|
408
|
+
auto predicate = SmallIntValue::Get(constant_filter.constant);
|
|
417
409
|
FilterSelectionSwitch<int16_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
418
410
|
constant_filter.comparison_type, mask);
|
|
419
411
|
break;
|
|
420
412
|
}
|
|
421
413
|
case PhysicalType::INT32: {
|
|
422
414
|
auto result_flat = FlatVector::GetData<int32_t>(result);
|
|
423
|
-
|
|
424
|
-
auto predicate = FlatVector::GetData<int32_t>(predicate_vector);
|
|
415
|
+
auto predicate = IntegerValue::Get(constant_filter.constant);
|
|
425
416
|
FilterSelectionSwitch<int32_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
426
417
|
constant_filter.comparison_type, mask);
|
|
427
418
|
break;
|
|
428
419
|
}
|
|
429
420
|
case PhysicalType::INT64: {
|
|
430
421
|
auto result_flat = FlatVector::GetData<int64_t>(result);
|
|
431
|
-
|
|
432
|
-
auto predicate = FlatVector::GetData<int64_t>(predicate_vector);
|
|
422
|
+
auto predicate = BigIntValue::Get(constant_filter.constant);
|
|
433
423
|
FilterSelectionSwitch<int64_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
434
424
|
constant_filter.comparison_type, mask);
|
|
435
425
|
break;
|
|
436
426
|
}
|
|
437
427
|
case PhysicalType::INT128: {
|
|
438
428
|
auto result_flat = FlatVector::GetData<hugeint_t>(result);
|
|
439
|
-
|
|
440
|
-
auto predicate = FlatVector::GetData<hugeint_t>(predicate_vector);
|
|
429
|
+
auto predicate = HugeIntValue::Get(constant_filter.constant);
|
|
441
430
|
FilterSelectionSwitch<hugeint_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
442
431
|
constant_filter.comparison_type, mask);
|
|
443
432
|
break;
|
|
444
433
|
}
|
|
445
434
|
case PhysicalType::FLOAT: {
|
|
446
435
|
auto result_flat = FlatVector::GetData<float>(result);
|
|
447
|
-
|
|
448
|
-
auto predicate = FlatVector::GetData<float>(predicate_vector);
|
|
436
|
+
auto predicate = FloatValue::Get(constant_filter.constant);
|
|
449
437
|
FilterSelectionSwitch<float>(result_flat, predicate, sel, approved_tuple_count,
|
|
450
438
|
constant_filter.comparison_type, mask);
|
|
451
439
|
break;
|
|
452
440
|
}
|
|
453
441
|
case PhysicalType::DOUBLE: {
|
|
454
442
|
auto result_flat = FlatVector::GetData<double>(result);
|
|
455
|
-
|
|
456
|
-
auto predicate = FlatVector::GetData<double>(predicate_vector);
|
|
443
|
+
auto predicate = DoubleValue::Get(constant_filter.constant);
|
|
457
444
|
FilterSelectionSwitch<double>(result_flat, predicate, sel, approved_tuple_count,
|
|
458
445
|
constant_filter.comparison_type, mask);
|
|
459
446
|
break;
|
|
460
447
|
}
|
|
461
448
|
case PhysicalType::VARCHAR: {
|
|
462
449
|
auto result_flat = FlatVector::GetData<string_t>(result);
|
|
463
|
-
|
|
464
|
-
auto predicate = FlatVector::GetData<string_t>(predicate_vector);
|
|
450
|
+
auto predicate = string_t(StringValue::Get(constant_filter.constant));
|
|
465
451
|
FilterSelectionSwitch<string_t>(result_flat, predicate, sel, approved_tuple_count,
|
|
466
452
|
constant_filter.comparison_type, mask);
|
|
467
453
|
break;
|
|
468
454
|
}
|
|
469
455
|
case PhysicalType::BOOL: {
|
|
470
456
|
auto result_flat = FlatVector::GetData<bool>(result);
|
|
471
|
-
|
|
472
|
-
auto predicate = FlatVector::GetData<bool>(predicate_vector);
|
|
457
|
+
auto predicate = BooleanValue::Get(constant_filter.constant);
|
|
473
458
|
FilterSelectionSwitch<bool>(result_flat, predicate, sel, approved_tuple_count,
|
|
474
459
|
constant_filter.comparison_type, mask);
|
|
475
460
|
break;
|