duckdb 0.7.1 → 0.7.2-dev1034.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/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/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- 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/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/time.cpp +13 -0
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +155 -127
- package/src/duckdb/src/common/types.cpp +313 -153
- 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/index/art/art.cpp +6 -5
- 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_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +12 -4
- 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 +6 -3
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +6 -14
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- 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/partitionable_hashtable.cpp +14 -2
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +21 -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_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/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 +8 -8
- 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_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 +55 -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 +1 -1
- 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/{http_stats.hpp → http_state.hpp} +18 -4
- 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/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/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 +2 -2
- 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 +6 -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_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 +1 -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 +1 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
- 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 +6 -3
- 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 +7 -5
- 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 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +10 -6
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +8 -5
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +10 -1
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
- 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 +2 -2
- package/src/duckdb/src/include/duckdb.h +50 -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/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/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
- 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 +105 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +31 -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 -4
- 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 +63 -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 +9 -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 +28 -24
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +19 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
- package/src/duckdb/src/storage/data_table.cpp +20 -20
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +20 -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 +45 -46
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +7 -8
- package/src/duckdb/src/storage/table/column_segment.cpp +13 -14
- package/src/duckdb/src/storage/table/list_column_data.cpp +41 -59
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +38 -32
- package/src/duckdb/src/storage/table/row_group_collection.cpp +94 -78
- package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
- package/src/duckdb/src/storage/table/standard_column_data.cpp +7 -6
- package/src/duckdb/src/storage/table/struct_column_data.cpp +16 -16
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +20 -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_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/list_stats.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/exception.hpp"
|
|
13
|
+
#include "duckdb/common/types/hugeint.hpp"
|
|
14
|
+
|
|
15
|
+
namespace duckdb {
|
|
16
|
+
class BaseStatistics;
|
|
17
|
+
class FieldWriter;
|
|
18
|
+
class FieldReader;
|
|
19
|
+
struct SelectionVector;
|
|
20
|
+
class Vector;
|
|
21
|
+
|
|
22
|
+
struct ListStats {
|
|
23
|
+
DUCKDB_API static void Construct(BaseStatistics &stats);
|
|
24
|
+
DUCKDB_API static BaseStatistics CreateUnknown(LogicalType type);
|
|
25
|
+
DUCKDB_API static BaseStatistics CreateEmpty(LogicalType type);
|
|
26
|
+
|
|
27
|
+
DUCKDB_API static const BaseStatistics &GetChildStats(const BaseStatistics &stats);
|
|
28
|
+
DUCKDB_API static BaseStatistics &GetChildStats(BaseStatistics &stats);
|
|
29
|
+
DUCKDB_API static void SetChildStats(BaseStatistics &stats, unique_ptr<BaseStatistics> new_stats);
|
|
30
|
+
|
|
31
|
+
DUCKDB_API static void Serialize(const BaseStatistics &stats, FieldWriter &writer);
|
|
32
|
+
DUCKDB_API static BaseStatistics Deserialize(FieldReader &reader, LogicalType type);
|
|
33
|
+
|
|
34
|
+
DUCKDB_API static string ToString(const BaseStatistics &stats);
|
|
35
|
+
|
|
36
|
+
DUCKDB_API static void Merge(BaseStatistics &stats, const BaseStatistics &other);
|
|
37
|
+
DUCKDB_API static void Copy(BaseStatistics &stats, const BaseStatistics &other);
|
|
38
|
+
DUCKDB_API static void Verify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
} // namespace duckdb
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/serializer.hpp"
|
|
12
13
|
|
|
13
14
|
namespace duckdb {
|
|
14
15
|
|
|
@@ -23,6 +24,31 @@ public:
|
|
|
23
24
|
: has_estimated_cardinality(true), estimated_cardinality(estimated_cardinality), has_max_cardinality(true),
|
|
24
25
|
max_cardinality(max_cardinality) {
|
|
25
26
|
}
|
|
27
|
+
void Serialize(Serializer &serializer) const {
|
|
28
|
+
serializer.Write(has_estimated_cardinality);
|
|
29
|
+
if (has_estimated_cardinality) {
|
|
30
|
+
serializer.Write(estimated_cardinality);
|
|
31
|
+
serializer.Write(has_max_cardinality);
|
|
32
|
+
if (has_max_cardinality) {
|
|
33
|
+
serializer.Write(max_cardinality);
|
|
34
|
+
}
|
|
35
|
+
} else {
|
|
36
|
+
D_ASSERT(!has_max_cardinality);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
static unique_ptr<NodeStatistics> Deserialize(Deserializer &source) {
|
|
40
|
+
bool has_estimated_cardinality = source.Read<bool>();
|
|
41
|
+
if (!has_estimated_cardinality) {
|
|
42
|
+
return make_unique<NodeStatistics>();
|
|
43
|
+
}
|
|
44
|
+
idx_t estimated_cardinality = source.Read<idx_t>();
|
|
45
|
+
bool has_max_cardinality = source.Read<bool>();
|
|
46
|
+
if (!has_max_cardinality) {
|
|
47
|
+
return make_unique<NodeStatistics>(estimated_cardinality);
|
|
48
|
+
}
|
|
49
|
+
idx_t max_cardinality = source.Read<idx_t>();
|
|
50
|
+
return make_unique<NodeStatistics>(estimated_cardinality, max_cardinality);
|
|
51
|
+
}
|
|
26
52
|
|
|
27
53
|
//! Whether or not the node has an estimated cardinality specified
|
|
28
54
|
bool has_estimated_cardinality;
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/numeric_stats.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/storage/statistics/numeric_stats_union.hpp"
|
|
12
|
+
#include "duckdb/common/enums/filter_propagate_result.hpp"
|
|
13
|
+
#include "duckdb/common/enums/expression_type.hpp"
|
|
14
|
+
#include "duckdb/common/operator/comparison_operators.hpp"
|
|
15
|
+
#include "duckdb/common/types/value.hpp"
|
|
16
|
+
|
|
17
|
+
namespace duckdb {
|
|
18
|
+
class BaseStatistics;
|
|
19
|
+
class FieldWriter;
|
|
20
|
+
class FieldReader;
|
|
21
|
+
struct SelectionVector;
|
|
22
|
+
class Vector;
|
|
23
|
+
|
|
24
|
+
struct NumericStatsData {
|
|
25
|
+
//! Whether or not the value has a max value
|
|
26
|
+
bool has_min;
|
|
27
|
+
//! Whether or not the segment has a min value
|
|
28
|
+
bool has_max;
|
|
29
|
+
//! The minimum value of the segment
|
|
30
|
+
NumericValueUnion min;
|
|
31
|
+
//! The maximum value of the segment
|
|
32
|
+
NumericValueUnion max;
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
struct NumericStats {
|
|
36
|
+
//! Unknown statistics - i.e. "has_min" is false, "has_max" is false
|
|
37
|
+
DUCKDB_API static BaseStatistics CreateUnknown(LogicalType type);
|
|
38
|
+
//! Empty statistics - i.e. "min = MaxValue<type>, max = MinValue<type>"
|
|
39
|
+
DUCKDB_API static BaseStatistics CreateEmpty(LogicalType type);
|
|
40
|
+
|
|
41
|
+
//! Returns true if the stats has a constant value
|
|
42
|
+
DUCKDB_API static bool IsConstant(const BaseStatistics &stats);
|
|
43
|
+
//! Returns true if the stats has both a min and max value defined
|
|
44
|
+
DUCKDB_API static bool HasMinMax(const BaseStatistics &stats);
|
|
45
|
+
//! Returns true if the stats has a min value defined
|
|
46
|
+
DUCKDB_API static bool HasMin(const BaseStatistics &stats);
|
|
47
|
+
//! Returns true if the stats has a max value defined
|
|
48
|
+
DUCKDB_API static bool HasMax(const BaseStatistics &stats);
|
|
49
|
+
//! Returns the min value - throws an exception if there is no min value
|
|
50
|
+
DUCKDB_API static Value Min(const BaseStatistics &stats);
|
|
51
|
+
//! Returns the max value - throws an exception if there is no max value
|
|
52
|
+
DUCKDB_API static Value Max(const BaseStatistics &stats);
|
|
53
|
+
//! Sets the min value of the statistics
|
|
54
|
+
DUCKDB_API static void SetMin(BaseStatistics &stats, const Value &val);
|
|
55
|
+
//! Sets the max value of the statistics
|
|
56
|
+
DUCKDB_API static void SetMax(BaseStatistics &stats, const Value &val);
|
|
57
|
+
|
|
58
|
+
//! Check whether or not a given comparison with a constant could possibly be satisfied by rows given the statistics
|
|
59
|
+
DUCKDB_API static FilterPropagateResult CheckZonemap(const BaseStatistics &stats, ExpressionType comparison_type,
|
|
60
|
+
const Value &constant);
|
|
61
|
+
|
|
62
|
+
DUCKDB_API static void Merge(BaseStatistics &stats, const BaseStatistics &other_p);
|
|
63
|
+
|
|
64
|
+
DUCKDB_API static void Serialize(const BaseStatistics &stats, FieldWriter &writer);
|
|
65
|
+
DUCKDB_API static BaseStatistics Deserialize(FieldReader &reader, LogicalType type);
|
|
66
|
+
|
|
67
|
+
DUCKDB_API static string ToString(const BaseStatistics &stats);
|
|
68
|
+
|
|
69
|
+
template <class T>
|
|
70
|
+
static inline void UpdateValue(T new_value, T &min, T &max) {
|
|
71
|
+
if (LessThan::Operation(new_value, min)) {
|
|
72
|
+
min = new_value;
|
|
73
|
+
}
|
|
74
|
+
if (GreaterThan::Operation(new_value, max)) {
|
|
75
|
+
max = new_value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
template <class T>
|
|
80
|
+
static inline void Update(BaseStatistics &stats, T new_value) {
|
|
81
|
+
auto &nstats = NumericStats::GetDataUnsafe(stats);
|
|
82
|
+
UpdateValue<T>(new_value, nstats.min.GetReferenceUnsafe<T>(), nstats.max.GetReferenceUnsafe<T>());
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
static void Verify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
86
|
+
|
|
87
|
+
template <class T>
|
|
88
|
+
static T GetMin(const BaseStatistics &stats) {
|
|
89
|
+
return NumericStats::Min(stats).GetValueUnsafe<T>();
|
|
90
|
+
}
|
|
91
|
+
template <class T>
|
|
92
|
+
static T GetMax(const BaseStatistics &stats) {
|
|
93
|
+
return NumericStats::Max(stats).GetValueUnsafe<T>();
|
|
94
|
+
}
|
|
95
|
+
template <class T>
|
|
96
|
+
static T GetMinUnsafe(const BaseStatistics &stats);
|
|
97
|
+
template <class T>
|
|
98
|
+
static T GetMaxUnsafe(const BaseStatistics &stats);
|
|
99
|
+
|
|
100
|
+
private:
|
|
101
|
+
static NumericStatsData &GetDataUnsafe(BaseStatistics &stats);
|
|
102
|
+
static const NumericStatsData &GetDataUnsafe(const BaseStatistics &stats);
|
|
103
|
+
static Value MinOrNull(const BaseStatistics &stats);
|
|
104
|
+
static Value MaxOrNull(const BaseStatistics &stats);
|
|
105
|
+
template <class T>
|
|
106
|
+
static void TemplatedVerify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
template <>
|
|
110
|
+
void NumericStats::Update<interval_t>(BaseStatistics &stats, interval_t new_value);
|
|
111
|
+
template <>
|
|
112
|
+
void NumericStats::Update<list_entry_t>(BaseStatistics &stats, list_entry_t new_value);
|
|
113
|
+
|
|
114
|
+
} // namespace duckdb
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/numeric_stats_union.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/exception.hpp"
|
|
13
|
+
#include "duckdb/common/types/hugeint.hpp"
|
|
14
|
+
|
|
15
|
+
namespace duckdb {
|
|
16
|
+
|
|
17
|
+
struct NumericValueUnion {
|
|
18
|
+
union Val {
|
|
19
|
+
bool boolean;
|
|
20
|
+
int8_t tinyint;
|
|
21
|
+
int16_t smallint;
|
|
22
|
+
int32_t integer;
|
|
23
|
+
int64_t bigint;
|
|
24
|
+
uint8_t utinyint;
|
|
25
|
+
uint16_t usmallint;
|
|
26
|
+
uint32_t uinteger;
|
|
27
|
+
uint64_t ubigint;
|
|
28
|
+
hugeint_t hugeint;
|
|
29
|
+
float float_;
|
|
30
|
+
double double_;
|
|
31
|
+
} value_;
|
|
32
|
+
|
|
33
|
+
template <class T>
|
|
34
|
+
T &GetReferenceUnsafe();
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
template <>
|
|
38
|
+
DUCKDB_API bool &NumericValueUnion::GetReferenceUnsafe();
|
|
39
|
+
template <>
|
|
40
|
+
DUCKDB_API int8_t &NumericValueUnion::GetReferenceUnsafe();
|
|
41
|
+
template <>
|
|
42
|
+
DUCKDB_API int16_t &NumericValueUnion::GetReferenceUnsafe();
|
|
43
|
+
template <>
|
|
44
|
+
DUCKDB_API int32_t &NumericValueUnion::GetReferenceUnsafe();
|
|
45
|
+
template <>
|
|
46
|
+
DUCKDB_API int64_t &NumericValueUnion::GetReferenceUnsafe();
|
|
47
|
+
template <>
|
|
48
|
+
DUCKDB_API hugeint_t &NumericValueUnion::GetReferenceUnsafe();
|
|
49
|
+
template <>
|
|
50
|
+
DUCKDB_API uint8_t &NumericValueUnion::GetReferenceUnsafe();
|
|
51
|
+
template <>
|
|
52
|
+
DUCKDB_API uint16_t &NumericValueUnion::GetReferenceUnsafe();
|
|
53
|
+
template <>
|
|
54
|
+
DUCKDB_API uint32_t &NumericValueUnion::GetReferenceUnsafe();
|
|
55
|
+
template <>
|
|
56
|
+
DUCKDB_API uint64_t &NumericValueUnion::GetReferenceUnsafe();
|
|
57
|
+
template <>
|
|
58
|
+
DUCKDB_API float &NumericValueUnion::GetReferenceUnsafe();
|
|
59
|
+
template <>
|
|
60
|
+
DUCKDB_API double &NumericValueUnion::GetReferenceUnsafe();
|
|
61
|
+
|
|
62
|
+
} // namespace duckdb
|
|
@@ -17,15 +17,10 @@ namespace duckdb {
|
|
|
17
17
|
class SegmentStatistics {
|
|
18
18
|
public:
|
|
19
19
|
SegmentStatistics(LogicalType type);
|
|
20
|
-
SegmentStatistics(
|
|
21
|
-
|
|
22
|
-
LogicalType type;
|
|
20
|
+
SegmentStatistics(BaseStatistics statistics);
|
|
23
21
|
|
|
24
22
|
//! Type-specific statistics of the segment
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
public:
|
|
28
|
-
void Reset();
|
|
23
|
+
BaseStatistics statistics;
|
|
29
24
|
};
|
|
30
25
|
|
|
31
26
|
} // namespace duckdb
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/string_stats.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/exception.hpp"
|
|
13
|
+
#include "duckdb/common/types/hugeint.hpp"
|
|
14
|
+
#include "duckdb/common/enums/filter_propagate_result.hpp"
|
|
15
|
+
#include "duckdb/common/enums/expression_type.hpp"
|
|
16
|
+
#include "duckdb/common/operator/comparison_operators.hpp"
|
|
17
|
+
|
|
18
|
+
namespace duckdb {
|
|
19
|
+
class BaseStatistics;
|
|
20
|
+
class FieldWriter;
|
|
21
|
+
class FieldReader;
|
|
22
|
+
struct SelectionVector;
|
|
23
|
+
class Vector;
|
|
24
|
+
|
|
25
|
+
struct StringStatsData {
|
|
26
|
+
constexpr static uint32_t MAX_STRING_MINMAX_SIZE = 8;
|
|
27
|
+
|
|
28
|
+
//! The minimum value of the segment, potentially truncated
|
|
29
|
+
data_t min[MAX_STRING_MINMAX_SIZE];
|
|
30
|
+
//! The maximum value of the segment, potentially truncated
|
|
31
|
+
data_t max[MAX_STRING_MINMAX_SIZE];
|
|
32
|
+
//! Whether or not the column can contain unicode characters
|
|
33
|
+
bool has_unicode;
|
|
34
|
+
//! Whether or not the maximum string length is known
|
|
35
|
+
bool has_max_string_length;
|
|
36
|
+
//! The maximum string length in bytes
|
|
37
|
+
uint32_t max_string_length;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
struct StringStats {
|
|
41
|
+
//! Unknown statistics - i.e. "has_unicode" is true, "max_string_length" is unknown, "min" is \0, max is \xFF
|
|
42
|
+
DUCKDB_API static BaseStatistics CreateUnknown(LogicalType type);
|
|
43
|
+
//! Empty statistics - i.e. "has_unicode" is false, "max_string_length" is 0, "min" is \xFF, max is \x00
|
|
44
|
+
DUCKDB_API static BaseStatistics CreateEmpty(LogicalType type);
|
|
45
|
+
//! Whether or not the statistics have a maximum string length defined
|
|
46
|
+
DUCKDB_API static bool HasMaxStringLength(const BaseStatistics &stats);
|
|
47
|
+
//! Returns the maximum string length, or throws an exception if !HasMaxStringLength()
|
|
48
|
+
DUCKDB_API static uint32_t MaxStringLength(const BaseStatistics &stats);
|
|
49
|
+
//! Whether or not the strings can contain unicode
|
|
50
|
+
DUCKDB_API static bool CanContainUnicode(const BaseStatistics &stats);
|
|
51
|
+
|
|
52
|
+
//! Resets the max string length so HasMaxStringLength() is false
|
|
53
|
+
DUCKDB_API static void ResetMaxStringLength(BaseStatistics &stats);
|
|
54
|
+
//! FIXME: make this part of Set on statistics
|
|
55
|
+
DUCKDB_API static void SetContainsUnicode(BaseStatistics &stats);
|
|
56
|
+
|
|
57
|
+
DUCKDB_API static void Serialize(const BaseStatistics &stats, FieldWriter &writer);
|
|
58
|
+
DUCKDB_API static BaseStatistics Deserialize(FieldReader &reader, LogicalType type);
|
|
59
|
+
|
|
60
|
+
DUCKDB_API static string ToString(const BaseStatistics &stats);
|
|
61
|
+
|
|
62
|
+
DUCKDB_API static FilterPropagateResult CheckZonemap(const BaseStatistics &stats, ExpressionType comparison_type,
|
|
63
|
+
const string &value);
|
|
64
|
+
|
|
65
|
+
DUCKDB_API static void Update(BaseStatistics &stats, const string_t &value);
|
|
66
|
+
DUCKDB_API static void Merge(BaseStatistics &stats, const BaseStatistics &other);
|
|
67
|
+
DUCKDB_API static void Verify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
68
|
+
|
|
69
|
+
private:
|
|
70
|
+
static StringStatsData &GetDataUnsafe(BaseStatistics &stats);
|
|
71
|
+
static const StringStatsData &GetDataUnsafe(const BaseStatistics &stats);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
} // namespace duckdb
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//===----------------------------------------------------------------------===//
|
|
2
|
+
// DuckDB
|
|
3
|
+
//
|
|
4
|
+
// duckdb/storage/statistics/struct_stats.hpp
|
|
5
|
+
//
|
|
6
|
+
//
|
|
7
|
+
//===----------------------------------------------------------------------===//
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include "duckdb/common/common.hpp"
|
|
12
|
+
#include "duckdb/common/exception.hpp"
|
|
13
|
+
|
|
14
|
+
namespace duckdb {
|
|
15
|
+
class BaseStatistics;
|
|
16
|
+
class FieldWriter;
|
|
17
|
+
class FieldReader;
|
|
18
|
+
struct SelectionVector;
|
|
19
|
+
class Vector;
|
|
20
|
+
|
|
21
|
+
struct StructStats {
|
|
22
|
+
DUCKDB_API static void Construct(BaseStatistics &stats);
|
|
23
|
+
DUCKDB_API static BaseStatistics CreateUnknown(LogicalType type);
|
|
24
|
+
DUCKDB_API static BaseStatistics CreateEmpty(LogicalType type);
|
|
25
|
+
|
|
26
|
+
DUCKDB_API static const BaseStatistics *GetChildStats(const BaseStatistics &stats);
|
|
27
|
+
DUCKDB_API static const BaseStatistics &GetChildStats(const BaseStatistics &stats, idx_t i);
|
|
28
|
+
DUCKDB_API static BaseStatistics &GetChildStats(BaseStatistics &stats, idx_t i);
|
|
29
|
+
DUCKDB_API static void SetChildStats(BaseStatistics &stats, idx_t i, const BaseStatistics &new_stats);
|
|
30
|
+
DUCKDB_API static void SetChildStats(BaseStatistics &stats, idx_t i, unique_ptr<BaseStatistics> new_stats);
|
|
31
|
+
|
|
32
|
+
DUCKDB_API static void Serialize(const BaseStatistics &stats, FieldWriter &writer);
|
|
33
|
+
DUCKDB_API static BaseStatistics Deserialize(FieldReader &reader, LogicalType type);
|
|
34
|
+
|
|
35
|
+
DUCKDB_API static string ToString(const BaseStatistics &stats);
|
|
36
|
+
|
|
37
|
+
DUCKDB_API static void Merge(BaseStatistics &stats, const BaseStatistics &other);
|
|
38
|
+
DUCKDB_API static void Copy(BaseStatistics &stats, const BaseStatistics &other);
|
|
39
|
+
DUCKDB_API static void Verify(const BaseStatistics &stats, Vector &vector, const SelectionVector &sel, idx_t count);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
} // namespace duckdb
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
10
10
|
#include "duckdb/storage/checkpoint/string_checkpoint_state.hpp"
|
|
11
11
|
#include "duckdb/storage/segment/uncompressed.hpp"
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
#include "duckdb/storage/string_uncompressed.hpp"
|
|
14
14
|
#include "duckdb/storage/table/append_state.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
@@ -173,8 +173,7 @@ public:
|
|
|
173
173
|
|
|
174
174
|
public:
|
|
175
175
|
static inline void UpdateStringStats(SegmentStatistics &stats, const string_t &new_value) {
|
|
176
|
-
|
|
177
|
-
sstats.Update(new_value);
|
|
176
|
+
StringStats::Update(stats.statistics, new_value);
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
static void SetDictionary(ColumnSegment &segment, BufferHandle &handle, StringDictionaryContainer dict);
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "duckdb/storage/data_pointer.hpp"
|
|
14
14
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
16
|
+
#include "duckdb/storage/table/column_data.hpp"
|
|
16
17
|
#include "duckdb/common/unordered_set.hpp"
|
|
17
18
|
|
|
18
19
|
namespace duckdb {
|
|
@@ -28,7 +29,7 @@ struct ColumnCheckpointState {
|
|
|
28
29
|
|
|
29
30
|
RowGroup &row_group;
|
|
30
31
|
ColumnData &column_data;
|
|
31
|
-
|
|
32
|
+
ColumnSegmentTree new_tree;
|
|
32
33
|
vector<DataPointer> data_pointers;
|
|
33
34
|
unique_ptr<BaseStatistics> global_stats;
|
|
34
35
|
|
|
@@ -15,7 +15,8 @@
|
|
|
15
15
|
#include "duckdb/storage/data_pointer.hpp"
|
|
16
16
|
#include "duckdb/storage/table/persistent_table_data.hpp"
|
|
17
17
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
18
|
-
#include "duckdb/storage/table/
|
|
18
|
+
#include "duckdb/storage/table/segment_tree.hpp"
|
|
19
|
+
#include "duckdb/storage/table/column_segment.hpp"
|
|
19
20
|
#include "duckdb/common/mutex.hpp"
|
|
20
21
|
|
|
21
22
|
namespace duckdb {
|
|
@@ -31,10 +32,12 @@ struct TransactionData;
|
|
|
31
32
|
struct DataTableInfo;
|
|
32
33
|
|
|
33
34
|
struct ColumnCheckpointInfo {
|
|
34
|
-
ColumnCheckpointInfo(CompressionType compression_type_p) : compression_type(compression_type_p) {};
|
|
35
|
+
explicit ColumnCheckpointInfo(CompressionType compression_type_p) : compression_type(compression_type_p) {};
|
|
35
36
|
CompressionType compression_type;
|
|
36
37
|
};
|
|
37
38
|
|
|
39
|
+
class ColumnSegmentTree : public SegmentTree<ColumnSegment> {};
|
|
40
|
+
|
|
38
41
|
class ColumnData {
|
|
39
42
|
friend class ColumnDataCheckpointer;
|
|
40
43
|
|
|
@@ -148,7 +151,7 @@ protected:
|
|
|
148
151
|
|
|
149
152
|
protected:
|
|
150
153
|
//! The segments holding the data of this column segment
|
|
151
|
-
|
|
154
|
+
ColumnSegmentTree data;
|
|
152
155
|
//! The lock for the updates
|
|
153
156
|
mutex update_lock;
|
|
154
157
|
//! The updates for this column segment
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/table/column_data.hpp"
|
|
12
12
|
#include "duckdb/function/compression_function.hpp"
|
|
13
|
+
#include "duckdb/storage/table/column_checkpoint_state.hpp"
|
|
13
14
|
|
|
14
15
|
namespace duckdb {
|
|
15
16
|
|
|
@@ -25,7 +26,7 @@ public:
|
|
|
25
26
|
RowGroup &GetRowGroup();
|
|
26
27
|
ColumnCheckpointState &GetCheckpointState();
|
|
27
28
|
|
|
28
|
-
void Checkpoint(vector<SegmentNode
|
|
29
|
+
void Checkpoint(vector<SegmentNode<ColumnSegment>> nodes);
|
|
29
30
|
|
|
30
31
|
private:
|
|
31
32
|
void ScanSegments(const std::function<void(Vector &, idx_t)> &callback);
|
|
@@ -40,7 +41,7 @@ private:
|
|
|
40
41
|
ColumnCheckpointState &state;
|
|
41
42
|
bool is_validity;
|
|
42
43
|
Vector intermediate;
|
|
43
|
-
vector<SegmentNode
|
|
44
|
+
vector<SegmentNode<ColumnSegment>> nodes;
|
|
44
45
|
vector<CompressionFunction *> compression_functions;
|
|
45
46
|
ColumnCheckpointInfo &checkpoint_info;
|
|
46
47
|
};
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/block.hpp"
|
|
12
|
-
#include "duckdb/storage/table/segment_tree.hpp"
|
|
13
12
|
#include "duckdb/common/types.hpp"
|
|
14
13
|
#include "duckdb/common/types/vector.hpp"
|
|
15
14
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
@@ -17,6 +16,7 @@
|
|
|
17
16
|
#include "duckdb/storage/storage_lock.hpp"
|
|
18
17
|
#include "duckdb/storage/table/scan_state.hpp"
|
|
19
18
|
#include "duckdb/function/compression_function.hpp"
|
|
19
|
+
#include "duckdb/storage/table/segment_base.hpp"
|
|
20
20
|
|
|
21
21
|
namespace duckdb {
|
|
22
22
|
class ColumnSegment;
|
|
@@ -35,10 +35,12 @@ struct ColumnAppendState;
|
|
|
35
35
|
enum class ColumnSegmentType : uint8_t { TRANSIENT, PERSISTENT };
|
|
36
36
|
//! TableFilter represents a filter pushed down into the table scan.
|
|
37
37
|
|
|
38
|
-
class ColumnSegment : public SegmentBase {
|
|
38
|
+
class ColumnSegment : public SegmentBase<ColumnSegment> {
|
|
39
39
|
public:
|
|
40
|
-
~ColumnSegment()
|
|
40
|
+
~ColumnSegment();
|
|
41
41
|
|
|
42
|
+
//! The index within the segment tree
|
|
43
|
+
idx_t index;
|
|
42
44
|
//! The database instance
|
|
43
45
|
DatabaseInstance &db;
|
|
44
46
|
//! The type stored in the column
|
|
@@ -57,7 +59,7 @@ public:
|
|
|
57
59
|
static unique_ptr<ColumnSegment> CreatePersistentSegment(DatabaseInstance &db, BlockManager &block_manager,
|
|
58
60
|
block_id_t id, idx_t offset, const LogicalType &type_p,
|
|
59
61
|
idx_t start, idx_t count, CompressionType compression_type,
|
|
60
|
-
|
|
62
|
+
BaseStatistics statistics);
|
|
61
63
|
static unique_ptr<ColumnSegment> CreateTransientSegment(DatabaseInstance &db, const LogicalType &type, idx_t start,
|
|
62
64
|
idx_t segment_size = Storage::BLOCK_SIZE);
|
|
63
65
|
static unique_ptr<ColumnSegment> CreateSegment(ColumnSegment &other, idx_t start);
|
|
@@ -124,7 +126,7 @@ public:
|
|
|
124
126
|
|
|
125
127
|
public:
|
|
126
128
|
ColumnSegment(DatabaseInstance &db, shared_ptr<BlockHandle> block, LogicalType type, ColumnSegmentType segment_type,
|
|
127
|
-
idx_t start, idx_t count, CompressionFunction *function,
|
|
129
|
+
idx_t start, idx_t count, CompressionFunction *function, BaseStatistics statistics,
|
|
128
130
|
block_id_t block_id, idx_t offset, idx_t segment_size);
|
|
129
131
|
ColumnSegment(ColumnSegment &other, idx_t start);
|
|
130
132
|
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
#include "duckdb/common/vector.hpp"
|
|
13
13
|
#include "duckdb/storage/table/segment_tree.hpp"
|
|
14
14
|
#include "duckdb/storage/data_pointer.hpp"
|
|
15
|
+
#include "duckdb/storage/table/table_statistics.hpp"
|
|
15
16
|
|
|
16
17
|
namespace duckdb {
|
|
17
18
|
class BaseStatistics;
|
|
@@ -21,8 +22,11 @@ public:
|
|
|
21
22
|
explicit PersistentTableData(idx_t column_count);
|
|
22
23
|
~PersistentTableData();
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
TableStatistics table_stats;
|
|
26
|
+
idx_t total_rows;
|
|
27
|
+
idx_t row_group_count;
|
|
28
|
+
block_id_t block_id;
|
|
29
|
+
idx_t offset;
|
|
26
30
|
};
|
|
27
31
|
|
|
28
32
|
} // namespace duckdb
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/vector_size.hpp"
|
|
12
|
-
#include "duckdb/storage/table/segment_base.hpp"
|
|
13
12
|
#include "duckdb/storage/table/chunk_info.hpp"
|
|
14
13
|
#include "duckdb/storage/table/append_state.hpp"
|
|
15
14
|
#include "duckdb/storage/table/scan_state.hpp"
|
|
@@ -17,6 +16,7 @@
|
|
|
17
16
|
#include "duckdb/common/enums/scan_options.hpp"
|
|
18
17
|
#include "duckdb/common/mutex.hpp"
|
|
19
18
|
#include "duckdb/parser/column_list.hpp"
|
|
19
|
+
#include "duckdb/storage/table/segment_base.hpp"
|
|
20
20
|
|
|
21
21
|
namespace duckdb {
|
|
22
22
|
class AttachedDatabase;
|
|
@@ -29,6 +29,7 @@ struct DataTableInfo;
|
|
|
29
29
|
class ExpressionExecutor;
|
|
30
30
|
class RowGroupWriter;
|
|
31
31
|
class UpdateSegment;
|
|
32
|
+
class TableStatistics;
|
|
32
33
|
class TableStorageInfo;
|
|
33
34
|
class Vector;
|
|
34
35
|
struct ColumnCheckpointState;
|
|
@@ -38,10 +39,10 @@ struct VersionNode;
|
|
|
38
39
|
|
|
39
40
|
struct RowGroupWriteData {
|
|
40
41
|
vector<unique_ptr<ColumnCheckpointState>> states;
|
|
41
|
-
vector<
|
|
42
|
+
vector<BaseStatistics> statistics;
|
|
42
43
|
};
|
|
43
44
|
|
|
44
|
-
class RowGroup : public SegmentBase {
|
|
45
|
+
class RowGroup : public SegmentBase<RowGroup> {
|
|
45
46
|
public:
|
|
46
47
|
friend class ColumnData;
|
|
47
48
|
friend class VersionDeleteState;
|
|
@@ -57,6 +58,9 @@ public:
|
|
|
57
58
|
RowGroup(RowGroup &row_group, idx_t start);
|
|
58
59
|
~RowGroup();
|
|
59
60
|
|
|
61
|
+
//! The index within the segment tree
|
|
62
|
+
idx_t index;
|
|
63
|
+
|
|
60
64
|
private:
|
|
61
65
|
//! The database instance
|
|
62
66
|
AttachedDatabase &db;
|
|
@@ -69,7 +73,7 @@ private:
|
|
|
69
73
|
//! The column data of the row_group
|
|
70
74
|
vector<shared_ptr<ColumnData>> columns;
|
|
71
75
|
//! The segment statistics for each of the columns
|
|
72
|
-
vector<
|
|
76
|
+
vector<SegmentStatistics> stats;
|
|
73
77
|
|
|
74
78
|
public:
|
|
75
79
|
DatabaseInstance &GetDatabase();
|
|
@@ -132,9 +136,9 @@ public:
|
|
|
132
136
|
idx_t Delete(TransactionData transaction, DataTable *table, row_t *row_ids, idx_t count);
|
|
133
137
|
|
|
134
138
|
RowGroupWriteData WriteToDisk(PartialBlockManager &manager, const vector<CompressionType> &compression_types);
|
|
135
|
-
RowGroupPointer Checkpoint(RowGroupWriter &writer,
|
|
139
|
+
RowGroupPointer Checkpoint(RowGroupWriter &writer, TableStatistics &global_stats);
|
|
136
140
|
static void Serialize(RowGroupPointer &pointer, Serializer &serializer);
|
|
137
|
-
static RowGroupPointer Deserialize(Deserializer &source, const
|
|
141
|
+
static RowGroupPointer Deserialize(Deserializer &source, const vector<LogicalType> &columns);
|
|
138
142
|
|
|
139
143
|
void InitializeAppend(RowGroupAppendState &append_state);
|
|
140
144
|
void Append(RowGroupAppendState &append_state, DataChunk &chunk, idx_t append_count);
|