duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/local_file_system.cpp +64 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/comparators.cpp +14 -5
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +18 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +60 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +9 -12
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/main/settings/settings.cpp +20 -8
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
#include "duckdb/common/operator/comparison_operators.hpp"
|
|
14
14
|
#include "duckdb/common/enums/expression_type.hpp"
|
|
15
15
|
#include "duckdb/common/types/value.hpp"
|
|
16
|
+
#include "duckdb/storage/statistics/numeric_stats.hpp"
|
|
17
|
+
#include "duckdb/storage/statistics/string_stats.hpp"
|
|
16
18
|
|
|
17
19
|
namespace duckdb {
|
|
18
20
|
struct SelectionVector;
|
|
@@ -22,59 +24,121 @@ class Deserializer;
|
|
|
22
24
|
class FieldWriter;
|
|
23
25
|
class FieldReader;
|
|
24
26
|
class Vector;
|
|
25
|
-
class ValidityStatistics;
|
|
26
|
-
class DistinctStatistics;
|
|
27
27
|
struct UnifiedVectorFormat;
|
|
28
28
|
|
|
29
|
-
enum
|
|
29
|
+
enum class StatsInfo : uint8_t {
|
|
30
|
+
CAN_HAVE_NULL_VALUES = 0,
|
|
31
|
+
CANNOT_HAVE_NULL_VALUES = 1,
|
|
32
|
+
CAN_HAVE_VALID_VALUES = 2,
|
|
33
|
+
CANNOT_HAVE_VALID_VALUES = 3,
|
|
34
|
+
CAN_HAVE_NULL_AND_VALID_VALUES = 4
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
enum class StatisticsType : uint8_t { NUMERIC_STATS, STRING_STATS, LIST_STATS, STRUCT_STATS, BASE_STATS };
|
|
30
38
|
|
|
31
39
|
class BaseStatistics {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
40
|
+
friend struct NumericStats;
|
|
41
|
+
friend struct StringStats;
|
|
42
|
+
friend struct StructStats;
|
|
43
|
+
friend struct ListStats;
|
|
35
44
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
StatisticsType stats_type;
|
|
45
|
+
public:
|
|
46
|
+
DUCKDB_API ~BaseStatistics();
|
|
47
|
+
// disable copy constructors
|
|
48
|
+
BaseStatistics(const BaseStatistics &other) = delete;
|
|
49
|
+
BaseStatistics &operator=(const BaseStatistics &) = delete;
|
|
50
|
+
//! enable move constructors
|
|
51
|
+
DUCKDB_API BaseStatistics(BaseStatistics &&other) noexcept;
|
|
52
|
+
DUCKDB_API BaseStatistics &operator=(BaseStatistics &&) noexcept;
|
|
45
53
|
|
|
46
54
|
public:
|
|
47
|
-
|
|
55
|
+
//! Creates a set of statistics for data that is unknown, i.e. "has_null" is true, "has_no_null" is true, etc
|
|
56
|
+
//! This can be used in case nothing is known about the data - or can be used as a baseline when only a few things
|
|
57
|
+
//! are known
|
|
58
|
+
static BaseStatistics CreateUnknown(LogicalType type);
|
|
59
|
+
//! Creates statistics for an empty database, i.e. "has_null" is false, "has_no_null" is false, etc
|
|
60
|
+
//! This is used when incrementally constructing statistics by constantly adding new values
|
|
61
|
+
static BaseStatistics CreateEmpty(LogicalType type);
|
|
62
|
+
|
|
63
|
+
DUCKDB_API StatisticsType GetStatsType() const;
|
|
64
|
+
DUCKDB_API static StatisticsType GetStatsType(const LogicalType &type);
|
|
48
65
|
|
|
49
66
|
DUCKDB_API bool CanHaveNull() const;
|
|
50
67
|
DUCKDB_API bool CanHaveNoNull() const;
|
|
51
68
|
|
|
52
|
-
void
|
|
69
|
+
void SetDistinctCount(idx_t distinct_count);
|
|
70
|
+
|
|
71
|
+
bool IsConstant() const;
|
|
53
72
|
|
|
54
|
-
|
|
55
|
-
return
|
|
73
|
+
const LogicalType &GetType() const {
|
|
74
|
+
return type;
|
|
56
75
|
}
|
|
57
76
|
|
|
58
|
-
|
|
77
|
+
void Set(StatsInfo info);
|
|
78
|
+
void CombineValidity(BaseStatistics &left, BaseStatistics &right);
|
|
79
|
+
void CopyValidity(BaseStatistics &stats);
|
|
80
|
+
inline void SetHasNull() {
|
|
81
|
+
has_null = true;
|
|
82
|
+
}
|
|
83
|
+
inline void SetHasNoNull() {
|
|
84
|
+
has_no_null = true;
|
|
85
|
+
}
|
|
59
86
|
|
|
60
|
-
|
|
87
|
+
void Merge(const BaseStatistics &other);
|
|
88
|
+
|
|
89
|
+
void Copy(const BaseStatistics &other);
|
|
90
|
+
|
|
91
|
+
BaseStatistics Copy() const;
|
|
92
|
+
unique_ptr<BaseStatistics> ToUnique() const;
|
|
61
93
|
void CopyBase(const BaseStatistics &orig);
|
|
62
94
|
|
|
63
|
-
|
|
64
|
-
|
|
95
|
+
void Serialize(Serializer &serializer) const;
|
|
96
|
+
void Serialize(FieldWriter &writer) const;
|
|
65
97
|
|
|
66
|
-
|
|
98
|
+
idx_t GetDistinctCount();
|
|
67
99
|
|
|
68
|
-
static
|
|
100
|
+
static BaseStatistics Deserialize(Deserializer &source, LogicalType type);
|
|
69
101
|
|
|
70
102
|
//! Verify that a vector does not violate the statistics
|
|
71
|
-
|
|
103
|
+
void Verify(Vector &vector, const SelectionVector &sel, idx_t count) const;
|
|
72
104
|
void Verify(Vector &vector, idx_t count) const;
|
|
73
105
|
|
|
74
|
-
|
|
106
|
+
string ToString() const;
|
|
107
|
+
|
|
108
|
+
static BaseStatistics FromConstant(const Value &input);
|
|
109
|
+
|
|
110
|
+
private:
|
|
111
|
+
BaseStatistics();
|
|
112
|
+
explicit BaseStatistics(LogicalType type);
|
|
113
|
+
|
|
114
|
+
static void Construct(BaseStatistics &stats, LogicalType type);
|
|
75
115
|
|
|
76
|
-
|
|
77
|
-
void
|
|
116
|
+
void InitializeUnknown();
|
|
117
|
+
void InitializeEmpty();
|
|
118
|
+
|
|
119
|
+
static BaseStatistics CreateUnknownType(LogicalType type);
|
|
120
|
+
static BaseStatistics CreateEmptyType(LogicalType type);
|
|
121
|
+
static BaseStatistics DeserializeType(FieldReader &reader, LogicalType type);
|
|
122
|
+
static BaseStatistics FromConstantType(const Value &input);
|
|
123
|
+
|
|
124
|
+
private:
|
|
125
|
+
//! The type of the logical segment
|
|
126
|
+
LogicalType type;
|
|
127
|
+
//! Whether or not the segment can contain NULL values
|
|
128
|
+
bool has_null;
|
|
129
|
+
//! Whether or not the segment can contain values that are not null
|
|
130
|
+
bool has_no_null;
|
|
131
|
+
// estimate that one may have even if distinct_stats==nullptr
|
|
132
|
+
idx_t distinct_count;
|
|
133
|
+
//! Numeric and String stats
|
|
134
|
+
union {
|
|
135
|
+
//! Numeric stats data, for numeric stats
|
|
136
|
+
NumericStatsData numeric_data;
|
|
137
|
+
//! String stats data, for string stats
|
|
138
|
+
StringStatsData string_data;
|
|
139
|
+
} stats_union;
|
|
140
|
+
//! Child stats (for LIST and STRUCT)
|
|
141
|
+
unique_ptr<BaseStatistics[]> child_stats;
|
|
78
142
|
};
|
|
79
143
|
|
|
80
144
|
} // namespace duckdb
|
|
@@ -9,17 +9,36 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/statistics/base_statistics.hpp"
|
|
12
|
+
#include "duckdb/storage/statistics/distinct_statistics.hpp"
|
|
12
13
|
|
|
13
14
|
namespace duckdb {
|
|
14
15
|
|
|
15
16
|
class ColumnStatistics {
|
|
16
17
|
public:
|
|
17
|
-
explicit ColumnStatistics(
|
|
18
|
-
|
|
19
|
-
unique_ptr<BaseStatistics> stats;
|
|
18
|
+
explicit ColumnStatistics(BaseStatistics stats_p);
|
|
19
|
+
ColumnStatistics(BaseStatistics stats_p, unique_ptr<DistinctStatistics> distinct_stats_p);
|
|
20
20
|
|
|
21
21
|
public:
|
|
22
22
|
static shared_ptr<ColumnStatistics> CreateEmptyStats(const LogicalType &type);
|
|
23
|
+
|
|
24
|
+
void Merge(ColumnStatistics &other);
|
|
25
|
+
|
|
26
|
+
void UpdateDistinctStatistics(Vector &v, idx_t count);
|
|
27
|
+
|
|
28
|
+
BaseStatistics &Statistics();
|
|
29
|
+
|
|
30
|
+
bool HasDistinctStats();
|
|
31
|
+
DistinctStatistics &DistinctStats();
|
|
32
|
+
void SetDistinct(unique_ptr<DistinctStatistics> distinct_stats);
|
|
33
|
+
|
|
34
|
+
shared_ptr<ColumnStatistics> Copy() const;
|
|
35
|
+
void Serialize(Serializer &serializer) const;
|
|
36
|
+
static shared_ptr<ColumnStatistics> Deserialize(Deserializer &source, const LogicalType &type);
|
|
37
|
+
|
|
38
|
+
private:
|
|
39
|
+
BaseStatistics stats;
|
|
40
|
+
//! The approximate count distinct stats of the column
|
|
41
|
+
unique_ptr<DistinctStatistics> distinct_stats;
|
|
23
42
|
};
|
|
24
43
|
|
|
25
44
|
} // namespace duckdb
|
|
@@ -17,7 +17,7 @@ class Serializer;
|
|
|
17
17
|
class Deserializer;
|
|
18
18
|
class Vector;
|
|
19
19
|
|
|
20
|
-
class DistinctStatistics
|
|
20
|
+
class DistinctStatistics {
|
|
21
21
|
public:
|
|
22
22
|
DistinctStatistics();
|
|
23
23
|
explicit DistinctStatistics(unique_ptr<HyperLogLog> log, idx_t sample_count, idx_t total_count);
|
|
@@ -30,12 +30,12 @@ public:
|
|
|
30
30
|
atomic<idx_t> total_count;
|
|
31
31
|
|
|
32
32
|
public:
|
|
33
|
-
void Merge(const
|
|
33
|
+
void Merge(const DistinctStatistics &other);
|
|
34
34
|
|
|
35
|
-
unique_ptr<
|
|
35
|
+
unique_ptr<DistinctStatistics> Copy() const;
|
|
36
36
|
|
|
37
|
-
void Serialize(Serializer &serializer) const
|
|
38
|
-
void Serialize(FieldWriter &writer) const
|
|
37
|
+
void Serialize(Serializer &serializer) const;
|
|
38
|
+
void Serialize(FieldWriter &writer) const;
|
|
39
39
|
|
|
40
40
|
static unique_ptr<DistinctStatistics> Deserialize(Deserializer &source);
|
|
41
41
|
static unique_ptr<DistinctStatistics> Deserialize(FieldReader &reader);
|
|
@@ -43,9 +43,11 @@ public:
|
|
|
43
43
|
void Update(Vector &update, idx_t count, bool sample = true);
|
|
44
44
|
void Update(UnifiedVectorFormat &update_data, const LogicalType &ptype, idx_t count, bool sample = true);
|
|
45
45
|
|
|
46
|
-
string ToString() const
|
|
46
|
+
string ToString() const;
|
|
47
47
|
idx_t GetCount() const;
|
|
48
48
|
|
|
49
|
+
static bool TypeIsSupported(const LogicalType &type);
|
|
50
|
+
|
|
49
51
|
private:
|
|
50
52
|
//! For distinct statistics we sample the input to speed up insertions
|
|
51
53
|
static constexpr const double SAMPLE_RATE = 0.1;
|
|
@@ -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
|
-
#include "duckdb/storage/
|
|
12
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
13
13
|
#include "duckdb/storage/string_uncompressed.hpp"
|
|
14
14
|
#include "duckdb/storage/table/append_state.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
@@ -173,8 +173,7 @@ public:
|
|
|
173
173
|
|
|
174
174
|
public:
|
|
175
175
|
static inline void UpdateStringStats(SegmentStatistics &stats, const string_t &new_value) {
|
|
176
|
-
|
|
177
|
-
sstats.Update(new_value);
|
|
176
|
+
StringStats::Update(stats.statistics, new_value);
|
|
178
177
|
}
|
|
179
178
|
|
|
180
179
|
static void SetDictionary(ColumnSegment &segment, BufferHandle &handle, StringDictionaryContainer dict);
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
#include "duckdb/storage/data_pointer.hpp"
|
|
14
14
|
#include "duckdb/storage/statistics/segment_statistics.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
16
|
+
#include "duckdb/storage/table/column_data.hpp"
|
|
16
17
|
#include "duckdb/common/unordered_set.hpp"
|
|
17
18
|
|
|
18
19
|
namespace duckdb {
|
|
@@ -28,7 +29,7 @@ struct ColumnCheckpointState {
|
|
|
28
29
|
|
|
29
30
|
RowGroup &row_group;
|
|
30
31
|
ColumnData &column_data;
|
|
31
|
-
|
|
32
|
+
ColumnSegmentTree new_tree;
|
|
32
33
|
vector<DataPointer> data_pointers;
|
|
33
34
|
unique_ptr<BaseStatistics> global_stats;
|
|
34
35
|
|