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
|
@@ -25,10 +25,12 @@ class RowGroupCollection;
|
|
|
25
25
|
class UpdateSegment;
|
|
26
26
|
class TableScanState;
|
|
27
27
|
class ColumnSegment;
|
|
28
|
+
class ColumnSegmentTree;
|
|
28
29
|
class ValiditySegment;
|
|
29
30
|
class TableFilterSet;
|
|
30
31
|
class ColumnData;
|
|
31
32
|
class DuckTransaction;
|
|
33
|
+
class RowGroupSegmentTree;
|
|
32
34
|
|
|
33
35
|
struct SegmentScanState {
|
|
34
36
|
virtual ~SegmentScanState() {
|
|
@@ -45,6 +47,8 @@ typedef unordered_map<block_id_t, BufferHandle> buffer_handle_set_t;
|
|
|
45
47
|
struct ColumnScanState {
|
|
46
48
|
//! The column segment that is currently being scanned
|
|
47
49
|
ColumnSegment *current = nullptr;
|
|
50
|
+
//! Column segment tree
|
|
51
|
+
ColumnSegmentTree *segment_tree = nullptr;
|
|
48
52
|
//! The current row index of the scan
|
|
49
53
|
idx_t row_index = 0;
|
|
50
54
|
//! The internal row index (i.e. the position of the SegmentScanState)
|
|
@@ -64,14 +68,15 @@ struct ColumnScanState {
|
|
|
64
68
|
//! We initialize one SegmentScanState per segment, however, if scanning a DataChunk requires us to scan over more
|
|
65
69
|
//! than one Segment, we need to keep the scan states of the previous segments around
|
|
66
70
|
vector<unique_ptr<SegmentScanState>> previous_states;
|
|
71
|
+
//! The last read offset in the child state (used for LIST columns only)
|
|
72
|
+
idx_t last_offset = 0;
|
|
67
73
|
|
|
68
74
|
public:
|
|
75
|
+
void Initialize(const LogicalType &type);
|
|
69
76
|
//! Move the scan state forward by "count" rows (including all child states)
|
|
70
77
|
void Next(idx_t count);
|
|
71
78
|
//! Move ONLY this state forward by "count" rows (i.e. not the child states)
|
|
72
79
|
void NextInternal(idx_t count);
|
|
73
|
-
//! Move the scan state forward by STANDARD_VECTOR_SIZE rows
|
|
74
|
-
void NextVector();
|
|
75
80
|
};
|
|
76
81
|
|
|
77
82
|
struct ColumnFetchState {
|
|
@@ -83,50 +88,33 @@ struct ColumnFetchState {
|
|
|
83
88
|
BufferHandle &GetOrInsertHandle(ColumnSegment &segment);
|
|
84
89
|
};
|
|
85
90
|
|
|
86
|
-
class
|
|
91
|
+
class CollectionScanState {
|
|
87
92
|
public:
|
|
88
|
-
|
|
89
|
-
: row_group(nullptr), vector_index(0), max_row(0), parent(parent_p) {
|
|
90
|
-
}
|
|
93
|
+
CollectionScanState(TableScanState &parent_p);
|
|
91
94
|
|
|
92
95
|
//! The current row_group we are scanning
|
|
93
|
-
RowGroup *row_group
|
|
96
|
+
RowGroup *row_group;
|
|
94
97
|
//! The vector index within the row_group
|
|
95
|
-
idx_t vector_index
|
|
96
|
-
//! The maximum row
|
|
97
|
-
idx_t
|
|
98
|
+
idx_t vector_index;
|
|
99
|
+
//! The maximum row within the row group
|
|
100
|
+
idx_t max_row_group_row;
|
|
98
101
|
//! Child column scans
|
|
99
102
|
unique_ptr<ColumnScanState[]> column_scans;
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
const vector<column_t> &GetColumnIds();
|
|
103
|
-
TableFilterSet *GetFilters();
|
|
104
|
-
AdaptiveFilter *GetAdaptiveFilter();
|
|
105
|
-
idx_t GetParentMaxRow();
|
|
106
|
-
|
|
107
|
-
private:
|
|
108
|
-
//! The parent scan state
|
|
109
|
-
CollectionScanState &parent;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
class CollectionScanState {
|
|
113
|
-
public:
|
|
114
|
-
CollectionScanState(TableScanState &parent_p)
|
|
115
|
-
: row_group_state(*this), max_row(0), batch_index(0), parent(parent_p) {};
|
|
116
|
-
|
|
117
|
-
//! The row_group scan state
|
|
118
|
-
RowGroupScanState row_group_state;
|
|
103
|
+
//! Row group segment tree
|
|
104
|
+
RowGroupSegmentTree *row_groups;
|
|
119
105
|
//! The total maximum row index
|
|
120
106
|
idx_t max_row;
|
|
121
107
|
//! The current batch index
|
|
122
108
|
idx_t batch_index;
|
|
123
109
|
|
|
124
110
|
public:
|
|
111
|
+
void Initialize(const vector<LogicalType> &types);
|
|
125
112
|
const vector<column_t> &GetColumnIds();
|
|
126
113
|
TableFilterSet *GetFilters();
|
|
127
114
|
AdaptiveFilter *GetAdaptiveFilter();
|
|
128
115
|
bool Scan(DuckTransaction &transaction, DataChunk &result);
|
|
129
116
|
bool ScanCommitted(DataChunk &result, TableScanType type);
|
|
117
|
+
bool ScanCommitted(DataChunk &result, SegmentLock &l, TableScanType type);
|
|
130
118
|
|
|
131
119
|
private:
|
|
132
120
|
TableScanState &parent;
|
|
@@ -158,12 +146,16 @@ private:
|
|
|
158
146
|
};
|
|
159
147
|
|
|
160
148
|
struct ParallelCollectionScanState {
|
|
149
|
+
ParallelCollectionScanState();
|
|
150
|
+
|
|
161
151
|
//! The row group collection we are scanning
|
|
162
152
|
RowGroupCollection *collection;
|
|
163
153
|
RowGroup *current_row_group;
|
|
164
154
|
idx_t vector_index;
|
|
165
155
|
idx_t max_row;
|
|
166
156
|
idx_t batch_index;
|
|
157
|
+
atomic<idx_t> processed_rows;
|
|
158
|
+
mutex lock;
|
|
167
159
|
};
|
|
168
160
|
|
|
169
161
|
struct ParallelTableScanState {
|
|
@@ -13,13 +13,12 @@
|
|
|
13
13
|
|
|
14
14
|
namespace duckdb {
|
|
15
15
|
|
|
16
|
+
template <class T>
|
|
16
17
|
class SegmentBase {
|
|
17
18
|
public:
|
|
18
19
|
SegmentBase(idx_t start, idx_t count) : start(start), count(count), next(nullptr) {
|
|
19
20
|
}
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
SegmentBase *Next() {
|
|
21
|
+
T *Next() {
|
|
23
22
|
#ifndef DUCKDB_R_BUILD
|
|
24
23
|
return next.load();
|
|
25
24
|
#else
|
|
@@ -32,12 +31,13 @@ public:
|
|
|
32
31
|
//! The amount of entries in this storage chunk
|
|
33
32
|
atomic<idx_t> count;
|
|
34
33
|
//! The next segment after this one
|
|
35
|
-
|
|
36
34
|
#ifndef DUCKDB_R_BUILD
|
|
37
|
-
atomic<
|
|
35
|
+
atomic<T *> next;
|
|
38
36
|
#else
|
|
39
|
-
|
|
37
|
+
T *next;
|
|
40
38
|
#endif
|
|
39
|
+
//! The index within the segment tree
|
|
40
|
+
idx_t index;
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
} // namespace duckdb
|
|
@@ -10,71 +10,326 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/constants.hpp"
|
|
12
12
|
#include "duckdb/storage/storage_lock.hpp"
|
|
13
|
-
#include "duckdb/storage/table/segment_base.hpp"
|
|
14
13
|
#include "duckdb/storage/table/segment_lock.hpp"
|
|
15
14
|
#include "duckdb/common/vector.hpp"
|
|
16
15
|
#include "duckdb/common/mutex.hpp"
|
|
16
|
+
#include "duckdb/common/string_util.hpp"
|
|
17
17
|
|
|
18
18
|
namespace duckdb {
|
|
19
19
|
|
|
20
|
+
template <class T>
|
|
20
21
|
struct SegmentNode {
|
|
21
22
|
idx_t row_start;
|
|
22
|
-
unique_ptr<
|
|
23
|
+
unique_ptr<T> node;
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
//! The SegmentTree maintains a list of all segments of a specific column in a table, and allows searching for a segment
|
|
26
27
|
//! by row number
|
|
28
|
+
template <class T, bool SUPPORTS_LAZY_LOADING = false>
|
|
27
29
|
class SegmentTree {
|
|
30
|
+
private:
|
|
31
|
+
class SegmentIterationHelper;
|
|
32
|
+
|
|
28
33
|
public:
|
|
34
|
+
explicit SegmentTree() : finished_loading(true) {
|
|
35
|
+
}
|
|
36
|
+
virtual ~SegmentTree() {
|
|
37
|
+
}
|
|
38
|
+
|
|
29
39
|
//! Locks the segment tree. All methods to the segment tree either lock the segment tree, or take an already
|
|
30
40
|
//! obtained lock.
|
|
31
|
-
SegmentLock Lock()
|
|
41
|
+
SegmentLock Lock() {
|
|
42
|
+
return SegmentLock(node_lock);
|
|
43
|
+
}
|
|
32
44
|
|
|
33
|
-
bool IsEmpty(SegmentLock &)
|
|
45
|
+
bool IsEmpty(SegmentLock &l) {
|
|
46
|
+
return GetRootSegment(l) == nullptr;
|
|
47
|
+
}
|
|
34
48
|
|
|
35
49
|
//! Gets a pointer to the first segment. Useful for scans.
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
T *GetRootSegment() {
|
|
51
|
+
auto l = Lock();
|
|
52
|
+
return GetRootSegment(l);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
T *GetRootSegment(SegmentLock &l) {
|
|
56
|
+
if (nodes.empty()) {
|
|
57
|
+
LoadNextSegment(l);
|
|
58
|
+
}
|
|
59
|
+
return GetRootSegmentInternal();
|
|
60
|
+
}
|
|
38
61
|
//! Obtains ownership of the data of the segment tree
|
|
39
|
-
vector<SegmentNode
|
|
62
|
+
vector<SegmentNode<T>> MoveSegments(SegmentLock &l) {
|
|
63
|
+
LoadAllSegments(l);
|
|
64
|
+
return std::move(nodes);
|
|
65
|
+
}
|
|
40
66
|
//! Gets a pointer to the nth segment. Negative numbers start from the back.
|
|
41
|
-
|
|
42
|
-
|
|
67
|
+
T *GetSegmentByIndex(int64_t index) {
|
|
68
|
+
auto l = Lock();
|
|
69
|
+
return GetSegmentByIndex(l, index);
|
|
70
|
+
}
|
|
71
|
+
T *GetSegmentByIndex(SegmentLock &l, int64_t index) {
|
|
72
|
+
if (index < 0) {
|
|
73
|
+
// load all segments
|
|
74
|
+
LoadAllSegments(l);
|
|
75
|
+
index = nodes.size() + index;
|
|
76
|
+
if (index < 0) {
|
|
77
|
+
return nullptr;
|
|
78
|
+
}
|
|
79
|
+
return nodes[index].node.get();
|
|
80
|
+
} else {
|
|
81
|
+
// lazily load segments until we reach the specific segment
|
|
82
|
+
while (idx_t(index) >= nodes.size() && LoadNextSegment(l)) {
|
|
83
|
+
}
|
|
84
|
+
if (idx_t(index) >= nodes.size()) {
|
|
85
|
+
return nullptr;
|
|
86
|
+
}
|
|
87
|
+
return nodes[index].node.get();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//! Gets the next segment
|
|
91
|
+
T *GetNextSegment(T *segment) {
|
|
92
|
+
if (!SUPPORTS_LAZY_LOADING) {
|
|
93
|
+
return segment->Next();
|
|
94
|
+
}
|
|
95
|
+
if (finished_loading) {
|
|
96
|
+
return segment->Next();
|
|
97
|
+
}
|
|
98
|
+
auto l = Lock();
|
|
99
|
+
return GetNextSegment(l, segment);
|
|
100
|
+
}
|
|
101
|
+
T *GetNextSegment(SegmentLock &l, T *segment) {
|
|
102
|
+
if (!segment) {
|
|
103
|
+
return nullptr;
|
|
104
|
+
}
|
|
105
|
+
#ifdef DEBUG
|
|
106
|
+
D_ASSERT(nodes[segment->index].node.get() == segment);
|
|
107
|
+
#endif
|
|
108
|
+
return GetSegmentByIndex(l, segment->index + 1);
|
|
109
|
+
}
|
|
43
110
|
|
|
44
111
|
//! Gets a pointer to the last segment. Useful for appends.
|
|
45
|
-
|
|
46
|
-
|
|
112
|
+
T *GetLastSegment(SegmentLock &l) {
|
|
113
|
+
LoadAllSegments(l);
|
|
114
|
+
if (nodes.empty()) {
|
|
115
|
+
return nullptr;
|
|
116
|
+
}
|
|
117
|
+
return nodes.back().node.get();
|
|
118
|
+
}
|
|
47
119
|
//! Gets a pointer to a specific column segment for the given row
|
|
48
|
-
|
|
49
|
-
|
|
120
|
+
T *GetSegment(idx_t row_number) {
|
|
121
|
+
auto l = Lock();
|
|
122
|
+
return GetSegment(l, row_number);
|
|
123
|
+
}
|
|
124
|
+
T *GetSegment(SegmentLock &l, idx_t row_number) {
|
|
125
|
+
return nodes[GetSegmentIndex(l, row_number)].node.get();
|
|
126
|
+
}
|
|
50
127
|
|
|
51
128
|
//! Append a column segment to the tree
|
|
52
|
-
void
|
|
53
|
-
|
|
129
|
+
void AppendSegmentInternal(SegmentLock &l, unique_ptr<T> segment) {
|
|
130
|
+
D_ASSERT(segment);
|
|
131
|
+
// add the node to the list of nodes
|
|
132
|
+
if (!nodes.empty()) {
|
|
133
|
+
nodes.back().node->next = segment.get();
|
|
134
|
+
}
|
|
135
|
+
SegmentNode<T> node;
|
|
136
|
+
segment->index = nodes.size();
|
|
137
|
+
node.row_start = segment->start;
|
|
138
|
+
node.node = std::move(segment);
|
|
139
|
+
nodes.push_back(std::move(node));
|
|
140
|
+
}
|
|
141
|
+
void AppendSegment(unique_ptr<T> segment) {
|
|
142
|
+
auto l = Lock();
|
|
143
|
+
AppendSegment(l, std::move(segment));
|
|
144
|
+
}
|
|
145
|
+
void AppendSegment(SegmentLock &l, unique_ptr<T> segment) {
|
|
146
|
+
LoadAllSegments(l);
|
|
147
|
+
AppendSegmentInternal(l, std::move(segment));
|
|
148
|
+
}
|
|
54
149
|
//! Debug method, check whether the segment is in the segment tree
|
|
55
|
-
bool HasSegment(
|
|
56
|
-
|
|
150
|
+
bool HasSegment(T *segment) {
|
|
151
|
+
auto l = Lock();
|
|
152
|
+
return HasSegment(l, segment);
|
|
153
|
+
}
|
|
154
|
+
bool HasSegment(SegmentLock &, T *segment) {
|
|
155
|
+
return segment->index < nodes.size() && nodes[segment->index].node.get() == segment;
|
|
156
|
+
}
|
|
57
157
|
|
|
58
158
|
//! Replace this tree with another tree, taking over its nodes in-place
|
|
59
|
-
void Replace(SegmentTree &other)
|
|
60
|
-
|
|
159
|
+
void Replace(SegmentTree<T> &other) {
|
|
160
|
+
auto l = Lock();
|
|
161
|
+
Replace(l, other);
|
|
162
|
+
}
|
|
163
|
+
void Replace(SegmentLock &l, SegmentTree<T> &other) {
|
|
164
|
+
other.LoadAllSegments(l);
|
|
165
|
+
nodes = std::move(other.nodes);
|
|
166
|
+
}
|
|
61
167
|
|
|
62
168
|
//! Erase all segments after a specific segment
|
|
63
|
-
void EraseSegments(SegmentLock
|
|
169
|
+
void EraseSegments(SegmentLock &l, idx_t segment_start) {
|
|
170
|
+
LoadAllSegments(l);
|
|
171
|
+
if (segment_start >= nodes.size() - 1) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
nodes.erase(nodes.begin() + segment_start + 1, nodes.end());
|
|
175
|
+
}
|
|
64
176
|
|
|
65
177
|
//! Get the segment index of the column segment for the given row
|
|
66
|
-
idx_t GetSegmentIndex(idx_t row_number)
|
|
67
|
-
|
|
68
|
-
|
|
178
|
+
idx_t GetSegmentIndex(SegmentLock &l, idx_t row_number) {
|
|
179
|
+
idx_t segment_index;
|
|
180
|
+
if (TryGetSegmentIndex(l, row_number, segment_index)) {
|
|
181
|
+
return segment_index;
|
|
182
|
+
}
|
|
183
|
+
string error;
|
|
184
|
+
error = StringUtil::Format("Attempting to find row number \"%lld\" in %lld nodes\n", row_number, nodes.size());
|
|
185
|
+
for (idx_t i = 0; i < nodes.size(); i++) {
|
|
186
|
+
error += StringUtil::Format("Node %lld: Start %lld, Count %lld", i, nodes[i].row_start,
|
|
187
|
+
nodes[i].node->count.load());
|
|
188
|
+
}
|
|
189
|
+
throw InternalException("Could not find node in column segment tree!\n%s%s", error, Exception::GetStackTrace());
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
bool TryGetSegmentIndex(SegmentLock &l, idx_t row_number, idx_t &result) {
|
|
193
|
+
// load segments until the row number is within bounds
|
|
194
|
+
while (nodes.empty() || (row_number >= (nodes.back().row_start + nodes.back().node->count))) {
|
|
195
|
+
if (!LoadNextSegment(l)) {
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (nodes.empty()) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
D_ASSERT(!nodes.empty());
|
|
203
|
+
D_ASSERT(row_number >= nodes[0].row_start);
|
|
204
|
+
D_ASSERT(row_number < nodes.back().row_start + nodes.back().node->count);
|
|
205
|
+
idx_t lower = 0;
|
|
206
|
+
idx_t upper = nodes.size() - 1;
|
|
207
|
+
// binary search to find the node
|
|
208
|
+
while (lower <= upper) {
|
|
209
|
+
idx_t index = (lower + upper) / 2;
|
|
210
|
+
D_ASSERT(index < nodes.size());
|
|
211
|
+
auto &entry = nodes[index];
|
|
212
|
+
D_ASSERT(entry.row_start == entry.node->start);
|
|
213
|
+
if (row_number < entry.row_start) {
|
|
214
|
+
upper = index - 1;
|
|
215
|
+
} else if (row_number >= entry.row_start + entry.node->count) {
|
|
216
|
+
lower = index + 1;
|
|
217
|
+
} else {
|
|
218
|
+
result = index;
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
69
224
|
|
|
70
|
-
void Verify(SegmentLock &)
|
|
71
|
-
|
|
225
|
+
void Verify(SegmentLock &) {
|
|
226
|
+
#ifdef DEBUG
|
|
227
|
+
idx_t base_start = nodes.empty() ? 0 : nodes[0].node->start;
|
|
228
|
+
for (idx_t i = 0; i < nodes.size(); i++) {
|
|
229
|
+
D_ASSERT(nodes[i].row_start == nodes[i].node->start);
|
|
230
|
+
D_ASSERT(nodes[i].node->start == base_start);
|
|
231
|
+
base_start += nodes[i].node->count;
|
|
232
|
+
}
|
|
233
|
+
#endif
|
|
234
|
+
}
|
|
235
|
+
void Verify() {
|
|
236
|
+
#ifdef DEBUG
|
|
237
|
+
auto l = Lock();
|
|
238
|
+
Verify(l);
|
|
239
|
+
#endif
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
SegmentIterationHelper Segments() {
|
|
243
|
+
return SegmentIterationHelper(*this);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
protected:
|
|
247
|
+
atomic<bool> finished_loading;
|
|
248
|
+
|
|
249
|
+
//! Load the next segment - only used when lazily loading
|
|
250
|
+
virtual unique_ptr<T> LoadSegment() {
|
|
251
|
+
return nullptr;
|
|
252
|
+
}
|
|
72
253
|
|
|
73
254
|
private:
|
|
74
255
|
//! The nodes in the tree, can be binary searched
|
|
75
|
-
vector<SegmentNode
|
|
256
|
+
vector<SegmentNode<T>> nodes;
|
|
76
257
|
//! Lock to access or modify the nodes
|
|
77
258
|
mutex node_lock;
|
|
259
|
+
|
|
260
|
+
private:
|
|
261
|
+
T *GetRootSegmentInternal() {
|
|
262
|
+
return nodes.empty() ? nullptr : nodes[0].node.get();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
class SegmentIterationHelper {
|
|
266
|
+
public:
|
|
267
|
+
explicit SegmentIterationHelper(SegmentTree &tree) : tree(tree) {
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private:
|
|
271
|
+
SegmentTree &tree;
|
|
272
|
+
|
|
273
|
+
private:
|
|
274
|
+
class SegmentIterator {
|
|
275
|
+
public:
|
|
276
|
+
SegmentIterator(SegmentTree &tree_p, T *current_p) : tree(tree_p), current(current_p) {
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
SegmentTree &tree;
|
|
280
|
+
T *current;
|
|
281
|
+
|
|
282
|
+
public:
|
|
283
|
+
void Next() {
|
|
284
|
+
current = tree.GetNextSegment(current);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
SegmentIterator &operator++() {
|
|
288
|
+
Next();
|
|
289
|
+
return *this;
|
|
290
|
+
}
|
|
291
|
+
bool operator!=(const SegmentIterator &other) const {
|
|
292
|
+
return current != other.current;
|
|
293
|
+
}
|
|
294
|
+
T &operator*() const {
|
|
295
|
+
D_ASSERT(current);
|
|
296
|
+
return *current;
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
public:
|
|
301
|
+
SegmentIterator begin() {
|
|
302
|
+
return SegmentIterator(tree, tree.GetRootSegment());
|
|
303
|
+
}
|
|
304
|
+
SegmentIterator end() {
|
|
305
|
+
return SegmentIterator(tree, nullptr);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
//! Load the next segment, if there are any left to load
|
|
310
|
+
bool LoadNextSegment(SegmentLock &l) {
|
|
311
|
+
if (!SUPPORTS_LAZY_LOADING) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
if (finished_loading) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
auto result = LoadSegment();
|
|
318
|
+
if (result) {
|
|
319
|
+
AppendSegmentInternal(l, std::move(result));
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
//! Load all segments, if there are any left to load
|
|
326
|
+
void LoadAllSegments(SegmentLock &l) {
|
|
327
|
+
if (!SUPPORTS_LAZY_LOADING) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
while (LoadNextSegment(l))
|
|
331
|
+
;
|
|
332
|
+
}
|
|
78
333
|
};
|
|
79
334
|
|
|
80
335
|
} // namespace duckdb
|
|
@@ -59,10 +59,6 @@ public:
|
|
|
59
59
|
void GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, TableStorageInfo &result) override;
|
|
60
60
|
|
|
61
61
|
void Verify(RowGroup &parent) override;
|
|
62
|
-
|
|
63
|
-
private:
|
|
64
|
-
template <bool SCAN_COMMITTED, bool ALLOW_UPDATES>
|
|
65
|
-
void TemplatedScan(Transaction *transaction, ColumnScanState &state, Vector &result);
|
|
66
62
|
};
|
|
67
63
|
|
|
68
64
|
} // namespace duckdb
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#include "duckdb/storage/statistics/column_statistics.hpp"
|
|
15
15
|
|
|
16
16
|
namespace duckdb {
|
|
17
|
+
class ColumnList;
|
|
17
18
|
class PersistentTableData;
|
|
18
19
|
|
|
19
20
|
class TableStatisticsLock {
|
|
@@ -38,6 +39,7 @@ public:
|
|
|
38
39
|
void MergeStats(idx_t i, BaseStatistics &stats);
|
|
39
40
|
void MergeStats(TableStatisticsLock &lock, idx_t i, BaseStatistics &stats);
|
|
40
41
|
|
|
42
|
+
void CopyStats(TableStatistics &other);
|
|
41
43
|
unique_ptr<BaseStatistics> CopyStats(idx_t i);
|
|
42
44
|
ColumnStatistics &GetStats(idx_t i);
|
|
43
45
|
|
|
@@ -45,6 +47,9 @@ public:
|
|
|
45
47
|
|
|
46
48
|
unique_ptr<TableStatisticsLock> GetLock();
|
|
47
49
|
|
|
50
|
+
void Serialize(Serializer &serializer);
|
|
51
|
+
void Deserialize(Deserializer &source, ColumnList &columns);
|
|
52
|
+
|
|
48
53
|
private:
|
|
49
54
|
//! The statistics lock
|
|
50
55
|
mutex stats_lock;
|
|
@@ -34,7 +34,6 @@ public:
|
|
|
34
34
|
bool HasUncommittedUpdates(idx_t vector_index);
|
|
35
35
|
bool HasUpdates(idx_t vector_index) const;
|
|
36
36
|
bool HasUpdates(idx_t start_row_idx, idx_t end_row_idx);
|
|
37
|
-
void ClearUpdates();
|
|
38
37
|
|
|
39
38
|
void FetchUpdates(TransactionData transaction, idx_t vector_index, Vector &result);
|
|
40
39
|
void FetchCommitted(idx_t vector_index, Vector &result);
|
|
@@ -137,7 +137,7 @@ public:
|
|
|
137
137
|
//! Sets the table used for subsequent insert/delete/update commands
|
|
138
138
|
void WriteSetTable(string &schema, string &table);
|
|
139
139
|
|
|
140
|
-
void WriteAlter(
|
|
140
|
+
void WriteAlter(data_ptr_t ptr, idx_t data_size);
|
|
141
141
|
|
|
142
142
|
void WriteInsert(DataChunk &chunk);
|
|
143
143
|
void WriteDelete(DataChunk &chunk);
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/table/row_group_collection.hpp"
|
|
12
|
-
#include "duckdb/storage/table/scan_state.hpp"
|
|
13
12
|
#include "duckdb/storage/table/table_index_list.hpp"
|
|
14
13
|
#include "duckdb/storage/table/table_statistics.hpp"
|
|
15
14
|
|
|
@@ -18,6 +17,7 @@ class AttachedDatabase;
|
|
|
18
17
|
class DataTable;
|
|
19
18
|
class Transaction;
|
|
20
19
|
class WriteAheadLog;
|
|
20
|
+
struct LocalAppendState;
|
|
21
21
|
struct TableAppendState;
|
|
22
22
|
|
|
23
23
|
class OptimisticDataWriter {
|
|
@@ -88,8 +88,8 @@ public:
|
|
|
88
88
|
|
|
89
89
|
void AppendToIndexes(DuckTransaction &transaction, TableAppendState &append_state, idx_t append_count,
|
|
90
90
|
bool append_to_table);
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
PreservedError AppendToIndexes(DuckTransaction &transaction, RowGroupCollection &source, TableIndexList &index_list,
|
|
92
|
+
const vector<LogicalType> &table_types, row_t &start_row);
|
|
93
93
|
|
|
94
94
|
//! Creates an optimistic writer for this table
|
|
95
95
|
OptimisticDataWriter *CreateOptimisticWriter();
|
|
@@ -118,6 +118,9 @@ public:
|
|
|
118
118
|
|
|
119
119
|
public:
|
|
120
120
|
struct CommitState {
|
|
121
|
+
CommitState();
|
|
122
|
+
~CommitState();
|
|
123
|
+
|
|
121
124
|
unordered_map<DataTable *, unique_ptr<TableAppendState>> append_states;
|
|
122
125
|
};
|
|
123
126
|
|