duckdb 0.7.2-dev0.0 → 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
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
6
6
|
#include "duckdb/storage/checkpoint/write_overflow_strings_to_disk.hpp"
|
|
7
7
|
#include "duckdb/storage/segment/uncompressed.hpp"
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
#include "duckdb/storage/table/append_state.hpp"
|
|
10
10
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
11
11
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
@@ -153,13 +153,7 @@ void FixedSizeScan(ColumnSegment &segment, ColumnScanState &state, idx_t scan_co
|
|
|
153
153
|
auto source_data = data + start * sizeof(T);
|
|
154
154
|
|
|
155
155
|
result.SetVectorType(VectorType::FLAT_VECTOR);
|
|
156
|
-
|
|
157
|
-
// list columns are modified in-place during the scans to correct the offsets
|
|
158
|
-
// so we can't do a zero-copy there
|
|
159
|
-
memcpy(FlatVector::GetData(result), source_data, scan_count * sizeof(T));
|
|
160
|
-
} else {
|
|
161
|
-
FlatVector::SetData(result, source_data);
|
|
162
|
-
}
|
|
156
|
+
FlatVector::SetData(result, source_data);
|
|
163
157
|
}
|
|
164
158
|
|
|
165
159
|
//===--------------------------------------------------------------------===//
|
|
@@ -186,48 +180,52 @@ static unique_ptr<CompressionAppendState> FixedSizeInitAppend(ColumnSegment &seg
|
|
|
186
180
|
return make_unique<CompressionAppendState>(std::move(handle));
|
|
187
181
|
}
|
|
188
182
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
183
|
+
struct StandardFixedSizeAppend {
|
|
184
|
+
template <class T>
|
|
185
|
+
static void Append(SegmentStatistics &stats, data_ptr_t target, idx_t target_offset, UnifiedVectorFormat &adata,
|
|
186
|
+
idx_t offset, idx_t count) {
|
|
187
|
+
auto sdata = (T *)adata.data;
|
|
188
|
+
auto tdata = (T *)target;
|
|
189
|
+
if (!adata.validity.AllValid()) {
|
|
190
|
+
for (idx_t i = 0; i < count; i++) {
|
|
191
|
+
auto source_idx = adata.sel->get_index(offset + i);
|
|
192
|
+
auto target_idx = target_offset + i;
|
|
193
|
+
bool is_null = !adata.validity.RowIsValid(source_idx);
|
|
194
|
+
if (!is_null) {
|
|
195
|
+
NumericStats::Update<T>(stats.statistics, sdata[source_idx]);
|
|
196
|
+
tdata[target_idx] = sdata[source_idx];
|
|
197
|
+
} else {
|
|
198
|
+
// we insert a NullValue<T> in the null gap for debuggability
|
|
199
|
+
// this value should never be used or read anywhere
|
|
200
|
+
tdata[target_idx] = NullValue<T>();
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
} else {
|
|
204
|
+
for (idx_t i = 0; i < count; i++) {
|
|
205
|
+
auto source_idx = adata.sel->get_index(offset + i);
|
|
206
|
+
auto target_idx = target_offset + i;
|
|
207
|
+
NumericStats::Update<T>(stats.statistics, sdata[source_idx]);
|
|
201
208
|
tdata[target_idx] = sdata[source_idx];
|
|
202
|
-
} else {
|
|
203
|
-
// we insert a NullValue<T> in the null gap for debuggability
|
|
204
|
-
// this value should never be used or read anywhere
|
|
205
|
-
tdata[target_idx] = NullValue<T>();
|
|
206
209
|
}
|
|
207
210
|
}
|
|
208
|
-
}
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
struct ListFixedSizeAppend {
|
|
215
|
+
template <class T>
|
|
216
|
+
static void Append(SegmentStatistics &stats, data_ptr_t target, idx_t target_offset, UnifiedVectorFormat &adata,
|
|
217
|
+
idx_t offset, idx_t count) {
|
|
218
|
+
auto sdata = (uint64_t *)adata.data;
|
|
219
|
+
auto tdata = (uint64_t *)target;
|
|
209
220
|
for (idx_t i = 0; i < count; i++) {
|
|
210
221
|
auto source_idx = adata.sel->get_index(offset + i);
|
|
211
222
|
auto target_idx = target_offset + i;
|
|
212
|
-
NumericStatistics::Update<T>(stats, sdata[source_idx]);
|
|
213
223
|
tdata[target_idx] = sdata[source_idx];
|
|
214
224
|
}
|
|
215
225
|
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
template <>
|
|
219
|
-
void AppendLoop<list_entry_t>(SegmentStatistics &stats, data_ptr_t target, idx_t target_offset,
|
|
220
|
-
UnifiedVectorFormat &adata, idx_t offset, idx_t count) {
|
|
221
|
-
auto sdata = (list_entry_t *)adata.data;
|
|
222
|
-
auto tdata = (list_entry_t *)target;
|
|
223
|
-
for (idx_t i = 0; i < count; i++) {
|
|
224
|
-
auto source_idx = adata.sel->get_index(offset + i);
|
|
225
|
-
auto target_idx = target_offset + i;
|
|
226
|
-
tdata[target_idx] = sdata[source_idx];
|
|
227
|
-
}
|
|
228
|
-
}
|
|
226
|
+
};
|
|
229
227
|
|
|
230
|
-
template <class T>
|
|
228
|
+
template <class T, class OP>
|
|
231
229
|
idx_t FixedSizeAppend(CompressionAppendState &append_state, ColumnSegment &segment, SegmentStatistics &stats,
|
|
232
230
|
UnifiedVectorFormat &data, idx_t offset, idx_t count) {
|
|
233
231
|
D_ASSERT(segment.GetBlockOffset() == 0);
|
|
@@ -236,7 +234,7 @@ idx_t FixedSizeAppend(CompressionAppendState &append_state, ColumnSegment &segme
|
|
|
236
234
|
idx_t max_tuple_count = segment.SegmentSize() / sizeof(T);
|
|
237
235
|
idx_t copy_count = MinValue<idx_t>(count, max_tuple_count - segment.count);
|
|
238
236
|
|
|
239
|
-
|
|
237
|
+
OP::template Append<T>(stats, target_ptr, segment.count, data, offset, copy_count);
|
|
240
238
|
segment.count += copy_count;
|
|
241
239
|
return copy_count;
|
|
242
240
|
}
|
|
@@ -249,14 +247,14 @@ idx_t FixedSizeFinalizeAppend(ColumnSegment &segment, SegmentStatistics &stats)
|
|
|
249
247
|
//===--------------------------------------------------------------------===//
|
|
250
248
|
// Get Function
|
|
251
249
|
//===--------------------------------------------------------------------===//
|
|
252
|
-
template <class T>
|
|
250
|
+
template <class T, class APPENDER = StandardFixedSizeAppend>
|
|
253
251
|
CompressionFunction FixedSizeGetFunction(PhysicalType data_type) {
|
|
254
252
|
return CompressionFunction(CompressionType::COMPRESSION_UNCOMPRESSED, data_type, FixedSizeInitAnalyze,
|
|
255
253
|
FixedSizeAnalyze, FixedSizeFinalAnalyze<T>, UncompressedFunctions::InitCompression,
|
|
256
254
|
UncompressedFunctions::Compress, UncompressedFunctions::FinalizeCompress,
|
|
257
255
|
FixedSizeInitScan, FixedSizeScan<T>, FixedSizeScanPartial<T>, FixedSizeFetchRow<T>,
|
|
258
|
-
UncompressedFunctions::EmptySkip, nullptr, FixedSizeInitAppend,
|
|
259
|
-
FixedSizeFinalizeAppend<T>, nullptr);
|
|
256
|
+
UncompressedFunctions::EmptySkip, nullptr, FixedSizeInitAppend,
|
|
257
|
+
FixedSizeAppend<T, APPENDER>, FixedSizeFinalizeAppend<T>, nullptr);
|
|
260
258
|
}
|
|
261
259
|
|
|
262
260
|
CompressionFunction FixedSizeUncompressed::GetFunction(PhysicalType data_type) {
|
|
@@ -287,7 +285,7 @@ CompressionFunction FixedSizeUncompressed::GetFunction(PhysicalType data_type) {
|
|
|
287
285
|
case PhysicalType::INTERVAL:
|
|
288
286
|
return FixedSizeGetFunction<interval_t>(data_type);
|
|
289
287
|
case PhysicalType::LIST:
|
|
290
|
-
return FixedSizeGetFunction<
|
|
288
|
+
return FixedSizeGetFunction<uint64_t, ListFixedSizeAppend>(data_type);
|
|
291
289
|
default:
|
|
292
290
|
throw InternalException("Unsupported type for FixedSizeUncompressed::GetFunction");
|
|
293
291
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#include "duckdb/function/compression/compression.hpp"
|
|
2
2
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
3
3
|
#include "duckdb/common/types/vector.hpp"
|
|
4
|
-
|
|
5
|
-
#include "duckdb/storage/statistics/validity_statistics.hpp"
|
|
4
|
+
|
|
6
5
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
7
6
|
#include "duckdb/function/compression_function.hpp"
|
|
8
7
|
#include "duckdb/storage/segment/uncompressed.hpp"
|
|
@@ -20,8 +19,8 @@ unique_ptr<SegmentScanState> ConstantInitScan(ColumnSegment &segment) {
|
|
|
20
19
|
// Scan Partial
|
|
21
20
|
//===--------------------------------------------------------------------===//
|
|
22
21
|
void ConstantFillFunctionValidity(ColumnSegment &segment, Vector &result, idx_t start_idx, idx_t count) {
|
|
23
|
-
auto &
|
|
24
|
-
if (
|
|
22
|
+
auto &stats = segment.stats.statistics;
|
|
23
|
+
if (stats.CanHaveNull()) {
|
|
25
24
|
auto &mask = FlatVector::Validity(result);
|
|
26
25
|
for (idx_t i = 0; i < count; i++) {
|
|
27
26
|
mask.SetInvalid(start_idx + i);
|
|
@@ -31,10 +30,10 @@ void ConstantFillFunctionValidity(ColumnSegment &segment, Vector &result, idx_t
|
|
|
31
30
|
|
|
32
31
|
template <class T>
|
|
33
32
|
void ConstantFillFunction(ColumnSegment &segment, Vector &result, idx_t start_idx, idx_t count) {
|
|
34
|
-
auto &nstats =
|
|
33
|
+
auto &nstats = segment.stats.statistics;
|
|
35
34
|
|
|
36
35
|
auto data = FlatVector::GetData<T>(result);
|
|
37
|
-
auto constant_value =
|
|
36
|
+
auto constant_value = NumericStats::GetMin<T>(nstats);
|
|
38
37
|
for (idx_t i = 0; i < count; i++) {
|
|
39
38
|
data[start_idx + i] = constant_value;
|
|
40
39
|
}
|
|
@@ -55,8 +54,8 @@ void ConstantScanPartial(ColumnSegment &segment, ColumnScanState &state, idx_t s
|
|
|
55
54
|
// Scan base data
|
|
56
55
|
//===--------------------------------------------------------------------===//
|
|
57
56
|
void ConstantScanFunctionValidity(ColumnSegment &segment, ColumnScanState &state, idx_t scan_count, Vector &result) {
|
|
58
|
-
auto &
|
|
59
|
-
if (
|
|
57
|
+
auto &stats = segment.stats.statistics;
|
|
58
|
+
if (stats.CanHaveNull()) {
|
|
60
59
|
if (result.GetVectorType() == VectorType::CONSTANT_VECTOR) {
|
|
61
60
|
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
|
62
61
|
ConstantVector::SetNull(result, true);
|
|
@@ -69,10 +68,10 @@ void ConstantScanFunctionValidity(ColumnSegment &segment, ColumnScanState &state
|
|
|
69
68
|
|
|
70
69
|
template <class T>
|
|
71
70
|
void ConstantScanFunction(ColumnSegment &segment, ColumnScanState &state, idx_t scan_count, Vector &result) {
|
|
72
|
-
auto &nstats =
|
|
71
|
+
auto &nstats = segment.stats.statistics;
|
|
73
72
|
|
|
74
73
|
auto data = FlatVector::GetData<T>(result);
|
|
75
|
-
data[0] =
|
|
74
|
+
data[0] = NumericStats::GetMin<T>(nstats);
|
|
76
75
|
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
|
77
76
|
}
|
|
78
77
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
#include "duckdb/function/compression_function.hpp"
|
|
11
11
|
#include "duckdb/main/config.hpp"
|
|
12
12
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
15
15
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
16
16
|
#include "duckdb/common/operator/subtract.hpp"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#include "duckdb/function/compression/compression.hpp"
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
4
4
|
#include "duckdb/function/compression_function.hpp"
|
|
5
5
|
#include "duckdb/main/config.hpp"
|
|
@@ -118,12 +118,12 @@ struct RLEConstants {
|
|
|
118
118
|
static constexpr const idx_t RLE_HEADER_SIZE = sizeof(uint64_t);
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
-
template <class T>
|
|
121
|
+
template <class T, bool WRITE_STATISTICS>
|
|
122
122
|
struct RLECompressState : public CompressionState {
|
|
123
123
|
struct RLEWriter {
|
|
124
124
|
template <class VALUE_TYPE>
|
|
125
125
|
static void Operation(VALUE_TYPE value, rle_count_t count, void *dataptr, bool is_null) {
|
|
126
|
-
auto state = (RLECompressState<T> *)dataptr;
|
|
126
|
+
auto state = (RLECompressState<T, WRITE_STATISTICS> *)dataptr;
|
|
127
127
|
state->WriteValue(value, count, is_null);
|
|
128
128
|
}
|
|
129
129
|
};
|
|
@@ -160,7 +160,7 @@ struct RLECompressState : public CompressionState {
|
|
|
160
160
|
auto data = (T *)vdata.data;
|
|
161
161
|
for (idx_t i = 0; i < count; i++) {
|
|
162
162
|
auto idx = vdata.sel->get_index(i);
|
|
163
|
-
state.template Update<RLECompressState<T>::RLEWriter>(data, vdata.validity, idx);
|
|
163
|
+
state.template Update<RLECompressState<T, WRITE_STATISTICS>::RLEWriter>(data, vdata.validity, idx);
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
|
|
@@ -174,8 +174,8 @@ struct RLECompressState : public CompressionState {
|
|
|
174
174
|
entry_count++;
|
|
175
175
|
|
|
176
176
|
// update meta data
|
|
177
|
-
if (!is_null) {
|
|
178
|
-
|
|
177
|
+
if (WRITE_STATISTICS && !is_null) {
|
|
178
|
+
NumericStats::Update<T>(current_segment->stats.statistics, value);
|
|
179
179
|
}
|
|
180
180
|
current_segment->count += count;
|
|
181
181
|
|
|
@@ -206,7 +206,7 @@ struct RLECompressState : public CompressionState {
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
void Finalize() {
|
|
209
|
-
state.template Flush<RLECompressState<T>::RLEWriter>();
|
|
209
|
+
state.template Flush<RLECompressState<T, WRITE_STATISTICS>::RLEWriter>();
|
|
210
210
|
|
|
211
211
|
FlushSegment();
|
|
212
212
|
current_segment.reset();
|
|
@@ -222,23 +222,23 @@ struct RLECompressState : public CompressionState {
|
|
|
222
222
|
idx_t max_rle_count;
|
|
223
223
|
};
|
|
224
224
|
|
|
225
|
-
template <class T>
|
|
225
|
+
template <class T, bool WRITE_STATISTICS>
|
|
226
226
|
unique_ptr<CompressionState> RLEInitCompression(ColumnDataCheckpointer &checkpointer, unique_ptr<AnalyzeState> state) {
|
|
227
|
-
return make_unique<RLECompressState<T>>(checkpointer);
|
|
227
|
+
return make_unique<RLECompressState<T, WRITE_STATISTICS>>(checkpointer);
|
|
228
228
|
}
|
|
229
229
|
|
|
230
|
-
template <class T>
|
|
230
|
+
template <class T, bool WRITE_STATISTICS>
|
|
231
231
|
void RLECompress(CompressionState &state_p, Vector &scan_vector, idx_t count) {
|
|
232
|
-
auto &state = (RLECompressState<T> &)state_p;
|
|
232
|
+
auto &state = (RLECompressState<T, WRITE_STATISTICS> &)state_p;
|
|
233
233
|
UnifiedVectorFormat vdata;
|
|
234
234
|
scan_vector.ToUnifiedFormat(count, vdata);
|
|
235
235
|
|
|
236
236
|
state.Append(vdata, count);
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
-
template <class T>
|
|
239
|
+
template <class T, bool WRITE_STATISTICS>
|
|
240
240
|
void RLEFinalizeCompress(CompressionState &state_p) {
|
|
241
|
-
auto &state = (RLECompressState<T> &)state_p;
|
|
241
|
+
auto &state = (RLECompressState<T, WRITE_STATISTICS> &)state_p;
|
|
242
242
|
state.Finalize();
|
|
243
243
|
}
|
|
244
244
|
|
|
@@ -341,10 +341,11 @@ void RLEFetchRow(ColumnSegment &segment, ColumnFetchState &state, row_t row_id,
|
|
|
341
341
|
//===--------------------------------------------------------------------===//
|
|
342
342
|
// Get Function
|
|
343
343
|
//===--------------------------------------------------------------------===//
|
|
344
|
-
template <class T>
|
|
344
|
+
template <class T, bool WRITE_STATISTICS = true>
|
|
345
345
|
CompressionFunction GetRLEFunction(PhysicalType data_type) {
|
|
346
346
|
return CompressionFunction(CompressionType::COMPRESSION_RLE, data_type, RLEInitAnalyze<T>, RLEAnalyze<T>,
|
|
347
|
-
RLEFinalAnalyze<T>, RLEInitCompression<T
|
|
347
|
+
RLEFinalAnalyze<T>, RLEInitCompression<T, WRITE_STATISTICS>,
|
|
348
|
+
RLECompress<T, WRITE_STATISTICS>, RLEFinalizeCompress<T, WRITE_STATISTICS>,
|
|
348
349
|
RLEInitScan<T>, RLEScan<T>, RLEScanPartial<T>, RLEFetchRow<T>, RLESkip<T>);
|
|
349
350
|
}
|
|
350
351
|
|
|
@@ -373,6 +374,8 @@ CompressionFunction RLEFun::GetFunction(PhysicalType type) {
|
|
|
373
374
|
return GetRLEFunction<float>(type);
|
|
374
375
|
case PhysicalType::DOUBLE:
|
|
375
376
|
return GetRLEFunction<double>(type);
|
|
377
|
+
case PhysicalType::LIST:
|
|
378
|
+
return GetRLEFunction<uint64_t, false>(type);
|
|
376
379
|
default:
|
|
377
380
|
throw InternalException("Unsupported type for RLE");
|
|
378
381
|
}
|
|
@@ -392,6 +395,7 @@ bool RLEFun::TypeIsSupported(PhysicalType type) {
|
|
|
392
395
|
case PhysicalType::UINT64:
|
|
393
396
|
case PhysicalType::FLOAT:
|
|
394
397
|
case PhysicalType::DOUBLE:
|
|
398
|
+
case PhysicalType::LIST:
|
|
395
399
|
return true;
|
|
396
400
|
default:
|
|
397
401
|
return false;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
3
3
|
#include "duckdb/common/types/vector.hpp"
|
|
4
4
|
#include "duckdb/storage/table/append_state.hpp"
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
#include "duckdb/common/types/null_value.hpp"
|
|
7
7
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
8
8
|
#include "duckdb/function/compression_function.hpp"
|
|
@@ -410,14 +410,14 @@ unique_ptr<CompressedSegmentState> ValidityInitSegment(ColumnSegment &segment, b
|
|
|
410
410
|
idx_t ValidityAppend(CompressionAppendState &append_state, ColumnSegment &segment, SegmentStatistics &stats,
|
|
411
411
|
UnifiedVectorFormat &data, idx_t offset, idx_t vcount) {
|
|
412
412
|
D_ASSERT(segment.GetBlockOffset() == 0);
|
|
413
|
-
auto &validity_stats =
|
|
413
|
+
auto &validity_stats = stats.statistics;
|
|
414
414
|
|
|
415
415
|
auto max_tuples = segment.SegmentSize() / ValidityMask::STANDARD_MASK_SIZE * STANDARD_VECTOR_SIZE;
|
|
416
416
|
idx_t append_count = MinValue<idx_t>(vcount, max_tuples - segment.count);
|
|
417
417
|
if (data.validity.AllValid()) {
|
|
418
418
|
// no null values: skip append
|
|
419
419
|
segment.count += append_count;
|
|
420
|
-
validity_stats.
|
|
420
|
+
validity_stats.SetHasNoNull();
|
|
421
421
|
return append_count;
|
|
422
422
|
}
|
|
423
423
|
|
|
@@ -426,9 +426,9 @@ idx_t ValidityAppend(CompressionAppendState &append_state, ColumnSegment &segmen
|
|
|
426
426
|
auto idx = data.sel->get_index(offset + i);
|
|
427
427
|
if (!data.validity.RowIsValidUnsafe(idx)) {
|
|
428
428
|
mask.SetInvalidUnsafe(segment.count + i);
|
|
429
|
-
validity_stats.
|
|
429
|
+
validity_stats.SetHasNull();
|
|
430
430
|
} else {
|
|
431
|
-
validity_stats.
|
|
431
|
+
validity_stats.SetHasNoNull();
|
|
432
432
|
}
|
|
433
433
|
}
|
|
434
434
|
segment.count += append_count;
|
|
@@ -45,7 +45,7 @@ DataTable::DataTable(AttachedDatabase &db, shared_ptr<TableIOManager> table_io_m
|
|
|
45
45
|
auto types = GetTypes();
|
|
46
46
|
this->row_groups =
|
|
47
47
|
make_shared<RowGroupCollection>(info, TableIOManager::Get(*this).GetBlockManagerForRowData(), types, 0);
|
|
48
|
-
if (data &&
|
|
48
|
+
if (data && data->row_group_count > 0) {
|
|
49
49
|
this->row_groups->Initialize(*data);
|
|
50
50
|
} else {
|
|
51
51
|
this->row_groups->InitializeEmpty();
|
|
@@ -819,9 +819,10 @@ void DataTable::RevertAppend(idx_t start_row, idx_t count) {
|
|
|
819
819
|
//===--------------------------------------------------------------------===//
|
|
820
820
|
// Indexes
|
|
821
821
|
//===--------------------------------------------------------------------===//
|
|
822
|
-
|
|
822
|
+
PreservedError DataTable::AppendToIndexes(TableIndexList &indexes, DataChunk &chunk, row_t row_start) {
|
|
823
|
+
PreservedError error;
|
|
823
824
|
if (indexes.Empty()) {
|
|
824
|
-
return
|
|
825
|
+
return error;
|
|
825
826
|
}
|
|
826
827
|
// first generate the vector of row identifiers
|
|
827
828
|
Vector row_identifiers(LogicalType::ROW_TYPE);
|
|
@@ -832,11 +833,13 @@ bool DataTable::AppendToIndexes(TableIndexList &indexes, DataChunk &chunk, row_t
|
|
|
832
833
|
// now append the entries to the indices
|
|
833
834
|
indexes.Scan([&](Index &index) {
|
|
834
835
|
try {
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
836
|
+
error = index.Append(chunk, row_identifiers);
|
|
837
|
+
} catch (Exception &ex) {
|
|
838
|
+
error = PreservedError(ex);
|
|
839
|
+
} catch (std::exception &ex) {
|
|
840
|
+
error = PreservedError(ex);
|
|
841
|
+
}
|
|
842
|
+
if (error) {
|
|
840
843
|
append_failed = true;
|
|
841
844
|
return true;
|
|
842
845
|
}
|
|
@@ -850,12 +853,11 @@ bool DataTable::AppendToIndexes(TableIndexList &indexes, DataChunk &chunk, row_t
|
|
|
850
853
|
for (auto *index : already_appended) {
|
|
851
854
|
index->Delete(chunk, row_identifiers);
|
|
852
855
|
}
|
|
853
|
-
return false;
|
|
854
856
|
}
|
|
855
|
-
return
|
|
857
|
+
return error;
|
|
856
858
|
}
|
|
857
859
|
|
|
858
|
-
|
|
860
|
+
PreservedError DataTable::AppendToIndexes(DataChunk &chunk, row_t row_start) {
|
|
859
861
|
D_ASSERT(is_root);
|
|
860
862
|
return AppendToIndexes(info->indexes, chunk, row_start);
|
|
861
863
|
}
|
|
@@ -1204,9 +1206,9 @@ void DataTable::WALAddIndex(ClientContext &context, unique_ptr<Index> index,
|
|
|
1204
1206
|
index->ExecuteExpressions(intermediate, result);
|
|
1205
1207
|
|
|
1206
1208
|
// insert into the index
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1209
|
+
auto error = index->Insert(lock, result, intermediate.data[intermediate.ColumnCount() - 1]);
|
|
1210
|
+
if (error) {
|
|
1211
|
+
throw InternalException("Error during WAL replay: %s", error.Message());
|
|
1210
1212
|
}
|
|
1211
1213
|
}
|
|
1212
1214
|
}
|
|
@@ -1223,9 +1225,9 @@ unique_ptr<BaseStatistics> DataTable::GetStatistics(ClientContext &context, colu
|
|
|
1223
1225
|
return row_groups->CopyStats(column_id);
|
|
1224
1226
|
}
|
|
1225
1227
|
|
|
1226
|
-
void DataTable::
|
|
1228
|
+
void DataTable::SetDistinct(column_t column_id, unique_ptr<DistinctStatistics> distinct_stats) {
|
|
1227
1229
|
D_ASSERT(column_id != COLUMN_IDENTIFIER_ROW_ID);
|
|
1228
|
-
row_groups->
|
|
1230
|
+
row_groups->SetDistinct(column_id, std::move(distinct_stats));
|
|
1229
1231
|
}
|
|
1230
1232
|
|
|
1231
1233
|
//===--------------------------------------------------------------------===//
|
|
@@ -1234,10 +1236,8 @@ void DataTable::SetStatistics(column_t column_id, const std::function<void(BaseS
|
|
|
1234
1236
|
void DataTable::Checkpoint(TableDataWriter &writer) {
|
|
1235
1237
|
// checkpoint each individual row group
|
|
1236
1238
|
// FIXME: we might want to combine adjacent row groups in case they have had deletions...
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
global_stats.push_back(row_groups->CopyStats(i));
|
|
1240
|
-
}
|
|
1239
|
+
TableStatistics global_stats;
|
|
1240
|
+
row_groups->CopyStats(global_stats);
|
|
1241
1241
|
|
|
1242
1242
|
row_groups->Checkpoint(writer, global_stats);
|
|
1243
1243
|
|
|
@@ -36,7 +36,7 @@ void Index::InitializeLock(IndexLock &state) {
|
|
|
36
36
|
state.index_lock = unique_lock<mutex>(lock);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
PreservedError Index::Append(DataChunk &entries, Vector &row_identifiers) {
|
|
40
40
|
IndexLock state;
|
|
41
41
|
InitializeLock(state);
|
|
42
42
|
return Append(state, entries, row_identifiers);
|
|
@@ -90,4 +90,15 @@ BlockPointer Index::Serialize(MetaBlockWriter &writer) {
|
|
|
90
90
|
throw NotImplementedException("The implementation of this index serialization does not exist.");
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
string Index::AppendRowError(DataChunk &input, idx_t index) {
|
|
94
|
+
string error;
|
|
95
|
+
for (idx_t c = 0; c < input.ColumnCount(); c++) {
|
|
96
|
+
if (c > 0) {
|
|
97
|
+
error += ", ";
|
|
98
|
+
}
|
|
99
|
+
error += input.GetValue(c, index).ToString();
|
|
100
|
+
}
|
|
101
|
+
return error;
|
|
102
|
+
}
|
|
103
|
+
|
|
93
104
|
} // namespace duckdb
|
|
@@ -197,16 +197,16 @@ void LocalTableStorage::FlushToDisk() {
|
|
|
197
197
|
optimistic_writer.FinalFlush();
|
|
198
198
|
}
|
|
199
199
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
200
|
+
PreservedError LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, RowGroupCollection &source,
|
|
201
|
+
TableIndexList &index_list, const vector<LogicalType> &table_types,
|
|
202
|
+
row_t &start_row) {
|
|
203
203
|
// only need to scan for index append
|
|
204
204
|
// figure out which columns we need to scan for the set of indexes
|
|
205
205
|
auto columns = index_list.GetRequiredColumns();
|
|
206
206
|
// create an empty mock chunk that contains all the correct types for the table
|
|
207
207
|
DataChunk mock_chunk;
|
|
208
208
|
mock_chunk.InitializeEmpty(table_types);
|
|
209
|
-
|
|
209
|
+
PreservedError error;
|
|
210
210
|
source.Scan(transaction, columns, [&](DataChunk &chunk) -> bool {
|
|
211
211
|
// construct the mock chunk by referencing the required columns
|
|
212
212
|
for (idx_t i = 0; i < columns.size(); i++) {
|
|
@@ -214,28 +214,28 @@ bool LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, RowGroupCo
|
|
|
214
214
|
}
|
|
215
215
|
mock_chunk.SetCardinality(chunk);
|
|
216
216
|
// append this chunk to the indexes of the table
|
|
217
|
-
|
|
218
|
-
|
|
217
|
+
error = DataTable::AppendToIndexes(index_list, mock_chunk, start_row);
|
|
218
|
+
if (error) {
|
|
219
219
|
return false;
|
|
220
220
|
}
|
|
221
221
|
start_row += chunk.size();
|
|
222
222
|
return true;
|
|
223
223
|
});
|
|
224
|
-
return
|
|
224
|
+
return error;
|
|
225
225
|
}
|
|
226
226
|
|
|
227
227
|
void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppendState &append_state,
|
|
228
228
|
idx_t append_count, bool append_to_table) {
|
|
229
|
-
bool constraint_violated = false;
|
|
230
229
|
if (append_to_table) {
|
|
231
230
|
table->InitializeAppend(transaction, append_state, append_count);
|
|
232
231
|
}
|
|
232
|
+
PreservedError error;
|
|
233
233
|
if (append_to_table) {
|
|
234
234
|
// appending: need to scan entire
|
|
235
235
|
row_groups->Scan(transaction, [&](DataChunk &chunk) -> bool {
|
|
236
236
|
// append this chunk to the indexes of the table
|
|
237
|
-
|
|
238
|
-
|
|
237
|
+
error = table->AppendToIndexes(chunk, append_state.current_row);
|
|
238
|
+
if (error) {
|
|
239
239
|
return false;
|
|
240
240
|
}
|
|
241
241
|
// append to base table
|
|
@@ -243,11 +243,10 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen
|
|
|
243
243
|
return true;
|
|
244
244
|
});
|
|
245
245
|
} else {
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
error = AppendToIndexes(transaction, *row_groups, table->info->indexes, table->GetTypes(),
|
|
247
|
+
append_state.current_row);
|
|
248
248
|
}
|
|
249
|
-
if (
|
|
250
|
-
PreservedError error;
|
|
249
|
+
if (error) {
|
|
251
250
|
// need to revert the append
|
|
252
251
|
row_t current_row = append_state.row_start;
|
|
253
252
|
// remove the data from the indexes, if there are any indexes
|
|
@@ -273,10 +272,7 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen
|
|
|
273
272
|
if (append_to_table) {
|
|
274
273
|
table->RevertAppendInternal(append_state.row_start, append_count);
|
|
275
274
|
}
|
|
276
|
-
|
|
277
|
-
error.Throw();
|
|
278
|
-
}
|
|
279
|
-
throw ConstraintException("PRIMARY KEY or UNIQUE constraint violated: duplicated key");
|
|
275
|
+
error.Throw();
|
|
280
276
|
}
|
|
281
277
|
}
|
|
282
278
|
|
|
@@ -412,8 +408,9 @@ void LocalStorage::Append(LocalAppendState &state, DataChunk &chunk) {
|
|
|
412
408
|
// append to unique indices (if any)
|
|
413
409
|
auto storage = state.storage;
|
|
414
410
|
idx_t base_id = MAX_ROW_ID + storage->row_groups->GetTotalRows() + state.append_state.total_append_count;
|
|
415
|
-
|
|
416
|
-
|
|
411
|
+
auto error = DataTable::AppendToIndexes(storage->indexes, chunk, base_id);
|
|
412
|
+
if (error) {
|
|
413
|
+
error.Throw();
|
|
417
414
|
}
|
|
418
415
|
|
|
419
416
|
//! Append the chunk to the local storage
|
|
@@ -434,9 +431,9 @@ void LocalStorage::LocalMerge(DataTable *table, RowGroupCollection &collection)
|
|
|
434
431
|
if (!storage->indexes.Empty()) {
|
|
435
432
|
// append data to indexes if required
|
|
436
433
|
row_t base_id = MAX_ROW_ID + storage->row_groups->GetTotalRows();
|
|
437
|
-
|
|
438
|
-
if (
|
|
439
|
-
|
|
434
|
+
auto error = storage->AppendToIndexes(transaction, collection, storage->indexes, table->GetTypes(), base_id);
|
|
435
|
+
if (error) {
|
|
436
|
+
error.Throw();
|
|
440
437
|
}
|
|
441
438
|
}
|
|
442
439
|
storage->row_groups->MergeStorage(collection);
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
#include "duckdb/storage/meta_block_reader.hpp"
|
|
2
2
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
3
|
+
#include "duckdb/main/connection_manager.hpp"
|
|
4
|
+
#include "duckdb/main/database.hpp"
|
|
3
5
|
|
|
4
6
|
#include <cstring>
|
|
5
7
|
|
|
@@ -34,6 +36,16 @@ void MetaBlockReader::ReadData(data_ptr_t buffer, idx_t read_size) {
|
|
|
34
36
|
offset += read_size;
|
|
35
37
|
}
|
|
36
38
|
|
|
39
|
+
ClientContext &MetaBlockReader::GetContext() {
|
|
40
|
+
if (!context) {
|
|
41
|
+
throw InternalException("Meta Block Reader is missing context");
|
|
42
|
+
}
|
|
43
|
+
return *context;
|
|
44
|
+
}
|
|
45
|
+
Catalog *MetaBlockReader::GetCatalog() {
|
|
46
|
+
return catalog;
|
|
47
|
+
}
|
|
48
|
+
|
|
37
49
|
void MetaBlockReader::ReadNewBlock(block_id_t id) {
|
|
38
50
|
auto &buffer_manager = block_manager.buffer_manager;
|
|
39
51
|
|
|
@@ -52,4 +64,14 @@ void MetaBlockReader::ReadNewBlock(block_id_t id) {
|
|
|
52
64
|
offset = sizeof(block_id_t);
|
|
53
65
|
}
|
|
54
66
|
|
|
67
|
+
void MetaBlockReader::SetCatalog(Catalog *catalog_p) {
|
|
68
|
+
D_ASSERT(!catalog);
|
|
69
|
+
catalog = catalog_p;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
void MetaBlockReader::SetContext(ClientContext *context_p) {
|
|
73
|
+
D_ASSERT(!context);
|
|
74
|
+
context = context_p;
|
|
75
|
+
}
|
|
76
|
+
|
|
55
77
|
} // namespace duckdb
|