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
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
#include "duckdb/storage/table/row_group.hpp"
|
|
3
3
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
4
4
|
#include "duckdb/transaction/duck_transaction.hpp"
|
|
5
|
+
#include "duckdb/storage/table/column_data.hpp"
|
|
6
|
+
#include "duckdb/storage/table/row_group_collection.hpp"
|
|
7
|
+
#include "duckdb/storage/table/row_group_segment_tree.hpp"
|
|
5
8
|
|
|
6
9
|
namespace duckdb {
|
|
7
10
|
|
|
@@ -35,7 +38,7 @@ void ColumnScanState::NextInternal(idx_t count) {
|
|
|
35
38
|
}
|
|
36
39
|
row_index += count;
|
|
37
40
|
while (row_index >= current->start + current->count) {
|
|
38
|
-
current = (
|
|
41
|
+
current = segment_tree->GetNextSegment(current);
|
|
39
42
|
initialized = false;
|
|
40
43
|
segment_checked = false;
|
|
41
44
|
if (!current) {
|
|
@@ -92,7 +95,7 @@ bool CollectionScanState::Scan(DuckTransaction &transaction, DataChunk &result)
|
|
|
92
95
|
return true;
|
|
93
96
|
} else {
|
|
94
97
|
do {
|
|
95
|
-
current_row_group = row_group_state.row_group = (
|
|
98
|
+
current_row_group = row_group_state.row_group = row_groups->GetNextSegment(current_row_group);
|
|
96
99
|
if (current_row_group) {
|
|
97
100
|
bool scan_row_group = current_row_group->InitializeScan(row_group_state);
|
|
98
101
|
if (scan_row_group) {
|
|
@@ -106,6 +109,22 @@ bool CollectionScanState::Scan(DuckTransaction &transaction, DataChunk &result)
|
|
|
106
109
|
return false;
|
|
107
110
|
}
|
|
108
111
|
|
|
112
|
+
bool CollectionScanState::ScanCommitted(DataChunk &result, SegmentLock &l, TableScanType type) {
|
|
113
|
+
auto current_row_group = row_group_state.row_group;
|
|
114
|
+
while (current_row_group) {
|
|
115
|
+
current_row_group->ScanCommitted(row_group_state, result, type);
|
|
116
|
+
if (result.size() > 0) {
|
|
117
|
+
return true;
|
|
118
|
+
} else {
|
|
119
|
+
current_row_group = row_group_state.row_group = row_groups->GetNextSegment(l, current_row_group);
|
|
120
|
+
if (current_row_group) {
|
|
121
|
+
current_row_group->InitializeScan(row_group_state);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
109
128
|
bool CollectionScanState::ScanCommitted(DataChunk &result, TableScanType type) {
|
|
110
129
|
auto current_row_group = row_group_state.row_group;
|
|
111
130
|
while (current_row_group) {
|
|
@@ -113,7 +132,7 @@ bool CollectionScanState::ScanCommitted(DataChunk &result, TableScanType type) {
|
|
|
113
132
|
if (result.size() > 0) {
|
|
114
133
|
return true;
|
|
115
134
|
} else {
|
|
116
|
-
current_row_group = row_group_state.row_group = (
|
|
135
|
+
current_row_group = row_group_state.row_group = row_groups->GetNextSegment(current_row_group);
|
|
117
136
|
if (current_row_group) {
|
|
118
137
|
current_row_group->InitializeScan(row_group_state);
|
|
119
138
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#include "duckdb/storage/data_table.hpp"
|
|
6
6
|
#include "duckdb/planner/table_filter.hpp"
|
|
7
7
|
#include "duckdb/transaction/transaction.hpp"
|
|
8
|
+
#include "duckdb/storage/table/column_checkpoint_state.hpp"
|
|
8
9
|
|
|
9
10
|
namespace duckdb {
|
|
10
11
|
|
|
@@ -24,7 +25,7 @@ bool StandardColumnData::CheckZonemap(ColumnScanState &state, TableFilter &filte
|
|
|
24
25
|
return true;
|
|
25
26
|
}
|
|
26
27
|
state.segment_checked = true;
|
|
27
|
-
auto prune_result = filter.CheckStatistics(
|
|
28
|
+
auto prune_result = filter.CheckStatistics(state.current->stats.statistics);
|
|
28
29
|
if (prune_result != FilterPropagateResult::FILTER_ALWAYS_FALSE) {
|
|
29
30
|
return true;
|
|
30
31
|
}
|
|
@@ -91,8 +92,7 @@ void StandardColumnData::InitializeAppend(ColumnAppendState &state) {
|
|
|
91
92
|
void StandardColumnData::AppendData(BaseStatistics &stats, ColumnAppendState &state, UnifiedVectorFormat &vdata,
|
|
92
93
|
idx_t count) {
|
|
93
94
|
ColumnData::AppendData(stats, state, vdata, count);
|
|
94
|
-
|
|
95
|
-
validity.AppendData(*stats.validity_stats, state.child_appends[0], vdata, count);
|
|
95
|
+
validity.AppendData(stats, state.child_appends[0], vdata, count);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
void StandardColumnData::RevertAppend(row_t start_row) {
|
|
@@ -136,9 +136,11 @@ unique_ptr<BaseStatistics> StandardColumnData::GetUpdateStatistics() {
|
|
|
136
136
|
return nullptr;
|
|
137
137
|
}
|
|
138
138
|
if (!stats) {
|
|
139
|
-
stats = BaseStatistics::CreateEmpty(type
|
|
139
|
+
stats = BaseStatistics::CreateEmpty(type).ToUnique();
|
|
140
|
+
}
|
|
141
|
+
if (validity_stats) {
|
|
142
|
+
stats->Merge(*validity_stats);
|
|
140
143
|
}
|
|
141
|
-
stats->validity_stats = std::move(validity_stats);
|
|
142
144
|
return stats;
|
|
143
145
|
}
|
|
144
146
|
|
|
@@ -169,7 +171,6 @@ struct StandardColumnCheckpointState : public ColumnCheckpointState {
|
|
|
169
171
|
public:
|
|
170
172
|
unique_ptr<BaseStatistics> GetStatistics() override {
|
|
171
173
|
D_ASSERT(global_stats);
|
|
172
|
-
global_stats->validity_stats = validity_state->GetStatistics();
|
|
173
174
|
return std::move(global_stats);
|
|
174
175
|
}
|
|
175
176
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#include "duckdb/storage/table/struct_column_data.hpp"
|
|
2
|
-
#include "duckdb/storage/statistics/
|
|
2
|
+
#include "duckdb/storage/statistics/struct_stats.hpp"
|
|
3
3
|
#include "duckdb/transaction/transaction.hpp"
|
|
4
|
+
#include "duckdb/storage/table/column_checkpoint_state.hpp"
|
|
4
5
|
|
|
5
6
|
namespace duckdb {
|
|
6
7
|
|
|
@@ -127,12 +128,12 @@ void StructColumnData::Append(BaseStatistics &stats, ColumnAppendState &state, V
|
|
|
127
128
|
vector.Flatten(count);
|
|
128
129
|
|
|
129
130
|
// append the null values
|
|
130
|
-
validity.Append(
|
|
131
|
+
validity.Append(stats, state.child_appends[0], vector, count);
|
|
131
132
|
|
|
132
|
-
auto &struct_stats = (StructStatistics &)stats;
|
|
133
133
|
auto &child_entries = StructVector::GetEntries(vector);
|
|
134
134
|
for (idx_t i = 0; i < child_entries.size(); i++) {
|
|
135
|
-
sub_columns[i]->Append(
|
|
135
|
+
sub_columns[i]->Append(StructStats::GetChildStats(stats, i), state.child_appends[i + 1], *child_entries[i],
|
|
136
|
+
count);
|
|
136
137
|
}
|
|
137
138
|
}
|
|
138
139
|
|
|
@@ -190,16 +191,18 @@ void StructColumnData::UpdateColumn(TransactionData transaction, const vector<co
|
|
|
190
191
|
|
|
191
192
|
unique_ptr<BaseStatistics> StructColumnData::GetUpdateStatistics() {
|
|
192
193
|
// check if any child column has updates
|
|
193
|
-
auto stats = BaseStatistics::CreateEmpty(type
|
|
194
|
-
auto
|
|
195
|
-
|
|
194
|
+
auto stats = BaseStatistics::CreateEmpty(type);
|
|
195
|
+
auto validity_stats = validity.GetUpdateStatistics();
|
|
196
|
+
if (validity_stats) {
|
|
197
|
+
stats.Merge(*validity_stats);
|
|
198
|
+
}
|
|
196
199
|
for (idx_t i = 0; i < sub_columns.size(); i++) {
|
|
197
200
|
auto child_stats = sub_columns[i]->GetUpdateStatistics();
|
|
198
201
|
if (child_stats) {
|
|
199
|
-
|
|
202
|
+
StructStats::SetChildStats(stats, i, std::move(child_stats));
|
|
200
203
|
}
|
|
201
204
|
}
|
|
202
|
-
return stats;
|
|
205
|
+
return stats.ToUnique();
|
|
203
206
|
}
|
|
204
207
|
|
|
205
208
|
void StructColumnData::FetchRow(TransactionData transaction, ColumnFetchState &state, row_t row_id, Vector &result,
|
|
@@ -230,7 +233,7 @@ struct StructColumnCheckpointState : public ColumnCheckpointState {
|
|
|
230
233
|
StructColumnCheckpointState(RowGroup &row_group, ColumnData &column_data,
|
|
231
234
|
PartialBlockManager &partial_block_manager)
|
|
232
235
|
: ColumnCheckpointState(row_group, column_data, partial_block_manager) {
|
|
233
|
-
global_stats =
|
|
236
|
+
global_stats = StructStats::CreateEmpty(column_data.type).ToUnique();
|
|
234
237
|
}
|
|
235
238
|
|
|
236
239
|
unique_ptr<ColumnCheckpointState> validity_state;
|
|
@@ -238,14 +241,11 @@ struct StructColumnCheckpointState : public ColumnCheckpointState {
|
|
|
238
241
|
|
|
239
242
|
public:
|
|
240
243
|
unique_ptr<BaseStatistics> GetStatistics() override {
|
|
241
|
-
auto stats =
|
|
242
|
-
D_ASSERT(stats->child_stats.size() == child_states.size());
|
|
243
|
-
stats->validity_stats = validity_state->GetStatistics();
|
|
244
|
+
auto stats = StructStats::CreateEmpty(column_data.type);
|
|
244
245
|
for (idx_t i = 0; i < child_states.size(); i++) {
|
|
245
|
-
stats
|
|
246
|
-
D_ASSERT(stats->child_stats[i]);
|
|
246
|
+
StructStats::SetChildStats(stats, i, child_states[i]->GetStatistics());
|
|
247
247
|
}
|
|
248
|
-
return
|
|
248
|
+
return stats.ToUnique();
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
void WriteDataPointers(RowGroupWriter &writer) override {
|
|
@@ -6,10 +6,7 @@ namespace duckdb {
|
|
|
6
6
|
void TableStatistics::Initialize(const vector<LogicalType> &types, PersistentTableData &data) {
|
|
7
7
|
D_ASSERT(Empty());
|
|
8
8
|
|
|
9
|
-
column_stats
|
|
10
|
-
for (auto &stats : data.column_stats) {
|
|
11
|
-
column_stats.push_back(make_shared<ColumnStatistics>(std::move(stats)));
|
|
12
|
-
}
|
|
9
|
+
column_stats = std::move(data.table_stats.column_stats);
|
|
13
10
|
if (column_stats.size() != types.size()) { // LCOV_EXCL_START
|
|
14
11
|
throw IOException("Table statistics column count is not aligned with table column count. Corrupt file?");
|
|
15
12
|
} // LCOV_EXCL_STOP
|
|
@@ -70,7 +67,7 @@ void TableStatistics::MergeStats(TableStatistics &other) {
|
|
|
70
67
|
auto l = GetLock();
|
|
71
68
|
D_ASSERT(column_stats.size() == other.column_stats.size());
|
|
72
69
|
for (idx_t i = 0; i < column_stats.size(); i++) {
|
|
73
|
-
column_stats[i]->
|
|
70
|
+
column_stats[i]->Merge(*other.column_stats[i]);
|
|
74
71
|
}
|
|
75
72
|
}
|
|
76
73
|
|
|
@@ -80,7 +77,7 @@ void TableStatistics::MergeStats(idx_t i, BaseStatistics &stats) {
|
|
|
80
77
|
}
|
|
81
78
|
|
|
82
79
|
void TableStatistics::MergeStats(TableStatisticsLock &lock, idx_t i, BaseStatistics &stats) {
|
|
83
|
-
column_stats[i]->
|
|
80
|
+
column_stats[i]->Statistics().Merge(stats);
|
|
84
81
|
}
|
|
85
82
|
|
|
86
83
|
ColumnStatistics &TableStatistics::GetStats(idx_t i) {
|
|
@@ -89,7 +86,30 @@ ColumnStatistics &TableStatistics::GetStats(idx_t i) {
|
|
|
89
86
|
|
|
90
87
|
unique_ptr<BaseStatistics> TableStatistics::CopyStats(idx_t i) {
|
|
91
88
|
lock_guard<mutex> l(stats_lock);
|
|
92
|
-
|
|
89
|
+
auto result = column_stats[i]->Statistics().Copy();
|
|
90
|
+
if (column_stats[i]->HasDistinctStats()) {
|
|
91
|
+
result.SetDistinctCount(column_stats[i]->DistinctStats().GetCount());
|
|
92
|
+
}
|
|
93
|
+
return result.ToUnique();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
void TableStatistics::CopyStats(TableStatistics &other) {
|
|
97
|
+
for (auto &stats : column_stats) {
|
|
98
|
+
other.column_stats.push_back(stats->Copy());
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
void TableStatistics::Serialize(Serializer &serializer) {
|
|
103
|
+
for (auto &stats : column_stats) {
|
|
104
|
+
stats->Serialize(serializer);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
void TableStatistics::Deserialize(Deserializer &source, ColumnList &columns) {
|
|
109
|
+
for (auto &col : columns.Physical()) {
|
|
110
|
+
auto stats = ColumnStatistics::Deserialize(source, col.GetType());
|
|
111
|
+
column_stats.push_back(std::move(stats));
|
|
112
|
+
}
|
|
93
113
|
}
|
|
94
114
|
|
|
95
115
|
unique_ptr<TableStatisticsLock> TableStatistics::GetLock() {
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
#include "duckdb/storage/table/update_segment.hpp"
|
|
2
2
|
|
|
3
3
|
#include "duckdb/storage/statistics/distinct_statistics.hpp"
|
|
4
|
-
|
|
5
|
-
#include "duckdb/storage/statistics/string_statistics.hpp"
|
|
6
|
-
#include "duckdb/storage/statistics/validity_statistics.hpp"
|
|
4
|
+
|
|
7
5
|
#include "duckdb/storage/table/column_data.hpp"
|
|
8
6
|
#include "duckdb/transaction/duck_transaction.hpp"
|
|
9
7
|
#include "duckdb/transaction/update_info.hpp"
|
|
@@ -40,7 +38,17 @@ UpdateSegment::UpdateSegment(UpdateSegment &other, ColumnData &owner)
|
|
|
40
38
|
: column_data(owner), root(std::move(other.root)), stats(std::move(other.stats)), type_size(other.type_size) {
|
|
41
39
|
|
|
42
40
|
this->heap.Move(other.heap);
|
|
43
|
-
|
|
41
|
+
// update the segment links
|
|
42
|
+
if (root) {
|
|
43
|
+
for (idx_t i = 0; i < RowGroup::ROW_GROUP_VECTOR_COUNT; i++) {
|
|
44
|
+
if (!root->info[i]) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
for (auto info = root->info[i]->info.get(); info; info = info->next) {
|
|
48
|
+
info->segment = this;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
44
52
|
initialize_update_function = other.initialize_update_function;
|
|
45
53
|
merge_update_function = other.merge_update_function;
|
|
46
54
|
fetch_update_function = other.fetch_update_function;
|
|
@@ -54,12 +62,6 @@ UpdateSegment::UpdateSegment(UpdateSegment &other, ColumnData &owner)
|
|
|
54
62
|
UpdateSegment::~UpdateSegment() {
|
|
55
63
|
}
|
|
56
64
|
|
|
57
|
-
void UpdateSegment::ClearUpdates() {
|
|
58
|
-
stats.Reset();
|
|
59
|
-
root.reset();
|
|
60
|
-
heap.Destroy();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
65
|
//===--------------------------------------------------------------------===//
|
|
64
66
|
// Update Info Helpers
|
|
65
67
|
//===--------------------------------------------------------------------===//
|
|
@@ -905,17 +907,17 @@ static UpdateSegment::merge_update_function_t GetMergeUpdateFunction(PhysicalTyp
|
|
|
905
907
|
//===--------------------------------------------------------------------===//
|
|
906
908
|
unique_ptr<BaseStatistics> UpdateSegment::GetStatistics() {
|
|
907
909
|
lock_guard<mutex> stats_guard(stats_lock);
|
|
908
|
-
return stats.statistics
|
|
910
|
+
return stats.statistics.ToUnique();
|
|
909
911
|
}
|
|
910
912
|
|
|
911
913
|
idx_t UpdateValidityStatistics(UpdateSegment *segment, SegmentStatistics &stats, Vector &update, idx_t count,
|
|
912
914
|
SelectionVector &sel) {
|
|
913
915
|
auto &mask = FlatVector::Validity(update);
|
|
914
|
-
auto &validity =
|
|
915
|
-
if (!mask.AllValid() && !validity.
|
|
916
|
+
auto &validity = stats.statistics;
|
|
917
|
+
if (!mask.AllValid() && !validity.CanHaveNull()) {
|
|
916
918
|
for (idx_t i = 0; i < count; i++) {
|
|
917
919
|
if (!mask.RowIsValid(i)) {
|
|
918
|
-
validity.
|
|
920
|
+
validity.SetHasNull();
|
|
919
921
|
break;
|
|
920
922
|
}
|
|
921
923
|
}
|
|
@@ -932,7 +934,7 @@ idx_t TemplatedUpdateNumericStatistics(UpdateSegment *segment, SegmentStatistics
|
|
|
932
934
|
|
|
933
935
|
if (mask.AllValid()) {
|
|
934
936
|
for (idx_t i = 0; i < count; i++) {
|
|
935
|
-
|
|
937
|
+
NumericStats::Update<T>(stats.statistics, update_data[i]);
|
|
936
938
|
}
|
|
937
939
|
sel.Initialize(nullptr);
|
|
938
940
|
return count;
|
|
@@ -942,7 +944,7 @@ idx_t TemplatedUpdateNumericStatistics(UpdateSegment *segment, SegmentStatistics
|
|
|
942
944
|
for (idx_t i = 0; i < count; i++) {
|
|
943
945
|
if (mask.RowIsValid(i)) {
|
|
944
946
|
sel.set_index(not_null_count++, i);
|
|
945
|
-
|
|
947
|
+
NumericStats::Update<T>(stats.statistics, update_data[i]);
|
|
946
948
|
}
|
|
947
949
|
}
|
|
948
950
|
return not_null_count;
|
|
@@ -955,7 +957,7 @@ idx_t UpdateStringStatistics(UpdateSegment *segment, SegmentStatistics &stats, V
|
|
|
955
957
|
auto &mask = FlatVector::Validity(update);
|
|
956
958
|
if (mask.AllValid()) {
|
|
957
959
|
for (idx_t i = 0; i < count; i++) {
|
|
958
|
-
(
|
|
960
|
+
StringStats::Update(stats.statistics, update_data[i]);
|
|
959
961
|
if (!update_data[i].IsInlined()) {
|
|
960
962
|
update_data[i] = segment->GetStringHeap().AddBlob(update_data[i]);
|
|
961
963
|
}
|
|
@@ -968,7 +970,7 @@ idx_t UpdateStringStatistics(UpdateSegment *segment, SegmentStatistics &stats, V
|
|
|
968
970
|
for (idx_t i = 0; i < count; i++) {
|
|
969
971
|
if (mask.RowIsValid(i)) {
|
|
970
972
|
sel.set_index(not_null_count++, i);
|
|
971
|
-
(
|
|
973
|
+
StringStats::Update(stats.statistics, update_data[i]);
|
|
972
974
|
if (!update_data[i].IsInlined()) {
|
|
973
975
|
update_data[i] = segment->GetStringHeap().AddBlob(update_data[i]);
|
|
974
976
|
}
|
|
@@ -24,17 +24,19 @@
|
|
|
24
24
|
namespace duckdb {
|
|
25
25
|
|
|
26
26
|
bool WriteAheadLog::Replay(AttachedDatabase &database, string &path) {
|
|
27
|
-
|
|
27
|
+
Connection con(database.GetDatabase());
|
|
28
|
+
auto initial_reader = make_unique<BufferedFileReader>(FileSystem::Get(database), path.c_str(), con.context.get());
|
|
28
29
|
if (initial_reader->Finished()) {
|
|
29
30
|
// WAL is empty
|
|
30
31
|
return false;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
|
|
33
34
|
con.BeginTransaction();
|
|
34
35
|
|
|
35
36
|
// first deserialize the WAL to look for a checkpoint flag
|
|
36
37
|
// if there is a checkpoint flag, we might have already flushed the contents of the WAL to disk
|
|
37
38
|
ReplayState checkpoint_state(database, *con.context, *initial_reader);
|
|
39
|
+
initial_reader->catalog = &checkpoint_state.catalog;
|
|
38
40
|
checkpoint_state.deserialize_only = true;
|
|
39
41
|
try {
|
|
40
42
|
while (true) {
|
|
@@ -70,7 +72,8 @@ bool WriteAheadLog::Replay(AttachedDatabase &database, string &path) {
|
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
// we need to recover from the WAL: actually set up the replay state
|
|
73
|
-
BufferedFileReader reader(FileSystem::Get(database), path.c_str());
|
|
75
|
+
BufferedFileReader reader(FileSystem::Get(database), path.c_str(), con.context.get());
|
|
76
|
+
reader.catalog = &checkpoint_state.catalog;
|
|
74
77
|
ReplayState state(database, *con.context, reader);
|
|
75
78
|
|
|
76
79
|
// replay the WAL
|
|
@@ -192,6 +195,7 @@ void ReplayState::ReplayEntry(WALType entry_type) {
|
|
|
192
195
|
// Replay Table
|
|
193
196
|
//===--------------------------------------------------------------------===//
|
|
194
197
|
void ReplayState::ReplayCreateTable() {
|
|
198
|
+
|
|
195
199
|
auto info = TableCatalogEntry::Deserialize(source, context);
|
|
196
200
|
if (deserialize_only) {
|
|
197
201
|
return;
|
|
@@ -278,10 +282,9 @@ void ReplayState::ReplayDropSchema() {
|
|
|
278
282
|
//===--------------------------------------------------------------------===//
|
|
279
283
|
void ReplayState::ReplayCreateType() {
|
|
280
284
|
auto info = TypeCatalogEntry::Deserialize(source);
|
|
281
|
-
if (
|
|
285
|
+
if (Catalog::TypeExists(context, info->catalog, info->schema, info->name)) {
|
|
282
286
|
return;
|
|
283
287
|
}
|
|
284
|
-
|
|
285
288
|
catalog.CreateType(context, info.get());
|
|
286
289
|
}
|
|
287
290
|
|
|
@@ -281,12 +281,12 @@ void WriteAheadLog::WriteUpdate(DataChunk &chunk, const vector<column_t> &column
|
|
|
281
281
|
//===--------------------------------------------------------------------===//
|
|
282
282
|
// Write ALTER Statement
|
|
283
283
|
//===--------------------------------------------------------------------===//
|
|
284
|
-
void WriteAheadLog::WriteAlter(
|
|
284
|
+
void WriteAheadLog::WriteAlter(data_ptr_t ptr, idx_t data_size) {
|
|
285
285
|
if (skip_writing) {
|
|
286
286
|
return;
|
|
287
287
|
}
|
|
288
288
|
writer->Write<WALType>(WALType::ALTER_INFO);
|
|
289
|
-
|
|
289
|
+
writer->WriteData(ptr, data_size);
|
|
290
290
|
}
|
|
291
291
|
|
|
292
292
|
//===--------------------------------------------------------------------===//
|
|
@@ -46,12 +46,16 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
|
|
|
46
46
|
// ALTER TABLE statement, read the extra data after the entry
|
|
47
47
|
auto extra_data_size = Load<idx_t>(dataptr);
|
|
48
48
|
auto extra_data = (data_ptr_t)(dataptr + sizeof(idx_t));
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
BufferedDeserializer source(extra_data, extra_data_size);
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
string column_name = source.Read<string>();
|
|
52
|
+
|
|
53
|
+
if (!column_name.empty()) {
|
|
54
|
+
// write the alter table in the log
|
|
55
|
+
table_entry->CommitAlter(column_name);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
log->WriteAlter(source.ptr, source.endptr - source.ptr);
|
|
55
59
|
} else {
|
|
56
60
|
// CREATE TABLE statement
|
|
57
61
|
log->WriteCreateTable((TableCatalogEntry *)parent);
|
|
@@ -71,9 +75,9 @@ void CommitState::WriteCatalogEntry(CatalogEntry *entry, data_ptr_t dataptr) {
|
|
|
71
75
|
auto extra_data = (data_ptr_t)(dataptr + sizeof(idx_t));
|
|
72
76
|
// deserialize it
|
|
73
77
|
BufferedDeserializer source(extra_data, extra_data_size);
|
|
74
|
-
|
|
78
|
+
string column_name = source.Read<string>();
|
|
75
79
|
// write the alter table in the log
|
|
76
|
-
log->WriteAlter(
|
|
80
|
+
log->WriteAlter(source.ptr, source.endptr - source.ptr);
|
|
77
81
|
} else {
|
|
78
82
|
log->WriteCreateView((ViewCatalogEntry *)parent);
|
|
79
83
|
}
|
|
@@ -194,6 +194,9 @@ typedef enum PGNodeTag {
|
|
|
194
194
|
T_PGOnConflictExpr,
|
|
195
195
|
T_PGIntoClause,
|
|
196
196
|
T_PGLambdaFunction,
|
|
197
|
+
T_PGPivotExpr,
|
|
198
|
+
T_PGPivot,
|
|
199
|
+
T_PGPivotStmt,
|
|
197
200
|
|
|
198
201
|
/*
|
|
199
202
|
* TAGS FOR EXPRESSION STATE NODES (execnodes.h)
|
|
@@ -678,6 +681,38 @@ typedef enum PGJoinType {
|
|
|
678
681
|
*/
|
|
679
682
|
} PGJoinType;
|
|
680
683
|
|
|
684
|
+
/*
|
|
685
|
+
* PGJoinRefType -
|
|
686
|
+
* enums for the types of implied conditions
|
|
687
|
+
*
|
|
688
|
+
* PGJoinRefType specifies the semantics of interpreting the join conditions.
|
|
689
|
+
* These can be explicit (e.g., REGULAR) implied (e.g., NATURAL)
|
|
690
|
+
* or interpreted in a particular manner (e.g., ASOF)
|
|
691
|
+
*
|
|
692
|
+
* This is a generalisation of the old Postgres isNatural flag.
|
|
693
|
+
*/
|
|
694
|
+
typedef enum PGJoinRefType {
|
|
695
|
+
PG_JOIN_REGULAR, /* Join conditions are interpreted as is */
|
|
696
|
+
PG_JOIN_NATURAL, /* Join conditions are inferred from the column names */
|
|
697
|
+
|
|
698
|
+
/*
|
|
699
|
+
* ASOF joins are joins with a single inequality predicate
|
|
700
|
+
* and optional equality predicates.
|
|
701
|
+
* The semantics are equivalent to the following window join:
|
|
702
|
+
* times t
|
|
703
|
+
* <jointype> JOIN (
|
|
704
|
+
* SELECT *,
|
|
705
|
+
* LEAD(begin, 1, 'infinity') OVER ([PARTITION BY key] ORDER BY begin) AS end)
|
|
706
|
+
* FROM events) e
|
|
707
|
+
* ON t.ts >= e.begin AND t.ts < e.end [AND t.key = e.key]
|
|
708
|
+
*/
|
|
709
|
+
PG_JOIN_ASOF
|
|
710
|
+
|
|
711
|
+
/*
|
|
712
|
+
* Positional join is a candidate to move here
|
|
713
|
+
*/
|
|
714
|
+
} PGJoinRefType;
|
|
715
|
+
|
|
681
716
|
/*
|
|
682
717
|
* OUTER joins are those for which pushed-down quals must behave differently
|
|
683
718
|
* from the join's own quals. This is in fact everything except INNER and
|
|
@@ -307,7 +307,7 @@ typedef struct PGFuncCall {
|
|
|
307
307
|
typedef struct PGAStar {
|
|
308
308
|
PGNodeTag type;
|
|
309
309
|
char *relation; /* relation name (optional) */
|
|
310
|
-
|
|
310
|
+
PGNode *expr; /* optional: the expression (regex or list) to select columns */
|
|
311
311
|
PGList *except_list; /* optional: EXCLUDE list */
|
|
312
312
|
PGList *replace_list; /* optional: REPLACE list */
|
|
313
313
|
bool columns; /* whether or not this is a columns list */
|
|
@@ -1162,6 +1162,38 @@ typedef struct PGUpdateStmt {
|
|
|
1162
1162
|
PGWithClause *withClause; /* WITH clause */
|
|
1163
1163
|
} PGUpdateStmt;
|
|
1164
1164
|
|
|
1165
|
+
/* ----------------------
|
|
1166
|
+
* Pivot Expression
|
|
1167
|
+
* ----------------------
|
|
1168
|
+
*/
|
|
1169
|
+
typedef struct PGPivot {
|
|
1170
|
+
PGNodeTag type;
|
|
1171
|
+
PGList *pivot_columns; /* The column names to pivot on */
|
|
1172
|
+
PGList *unpivot_columns;/* The column names to unpivot */
|
|
1173
|
+
PGList *pivot_value; /* The set of pivot values */
|
|
1174
|
+
char *pivot_enum; /* The enum to fetch the unique values from */
|
|
1175
|
+
} PGPivot;
|
|
1176
|
+
|
|
1177
|
+
typedef struct PGPivotExpr {
|
|
1178
|
+
PGNodeTag type;
|
|
1179
|
+
PGNode *source; /* the source subtree */
|
|
1180
|
+
PGList *aggrs; /* The aggregations to pivot over (PIVOT only) */
|
|
1181
|
+
PGList *unpivots; /* The names to unpivot over (UNPIVOT only) */
|
|
1182
|
+
PGList *pivots; /* The set of pivot values */
|
|
1183
|
+
PGList *groups; /* The set of groups to pivot over (if any) */
|
|
1184
|
+
PGAlias *alias; /* table alias & optional column aliases */
|
|
1185
|
+
bool include_nulls; /* Whether or not to include NULL values (UNPIVOT only */
|
|
1186
|
+
} PGPivotExpr;
|
|
1187
|
+
|
|
1188
|
+
typedef struct PGPivotStmt {
|
|
1189
|
+
PGNodeTag type;
|
|
1190
|
+
PGNode *source; /* The source to pivot */
|
|
1191
|
+
PGList *aggrs; /* The aggregations to pivot over (PIVOT only) */
|
|
1192
|
+
PGList *unpivots; /* The names to unpivot over (UNPIVOT only) */
|
|
1193
|
+
PGList *columns; /* The set of columns to pivot over */
|
|
1194
|
+
PGList *groups; /* The set of groups to pivot over (if any) */
|
|
1195
|
+
} PGPivotStmt;
|
|
1196
|
+
|
|
1165
1197
|
/* ----------------------
|
|
1166
1198
|
* Select Statement
|
|
1167
1199
|
*
|
|
@@ -1204,6 +1236,9 @@ typedef struct PGSelectStmt {
|
|
|
1204
1236
|
*/
|
|
1205
1237
|
PGList *valuesLists; /* untransformed list of expression lists */
|
|
1206
1238
|
|
|
1239
|
+
/* When representing a pivot statement, all values are NULL besides the pivot field */
|
|
1240
|
+
PGPivotStmt *pivot; /* PIVOT statement */
|
|
1241
|
+
|
|
1207
1242
|
/*
|
|
1208
1243
|
* These fields are used in both "leaf" SelectStmts and upper-level
|
|
1209
1244
|
* SelectStmts.
|
|
@@ -2107,5 +2142,4 @@ typedef struct PGUseStmt {
|
|
|
2107
2142
|
} PGUseStmt;
|
|
2108
2143
|
|
|
2109
2144
|
|
|
2110
|
-
|
|
2111
2145
|
}
|
|
@@ -1324,7 +1324,7 @@ typedef struct PGRangeTblRef {
|
|
|
1324
1324
|
/*----------
|
|
1325
1325
|
* PGJoinExpr - for SQL JOIN expressions
|
|
1326
1326
|
*
|
|
1327
|
-
*
|
|
1327
|
+
* joinreftype, usingClause, and quals are interdependent. The user can write
|
|
1328
1328
|
* only one of NATURAL, USING(), or ON() (this is enforced by the grammar).
|
|
1329
1329
|
* If he writes NATURAL then parse analysis generates the equivalent USING()
|
|
1330
1330
|
* list, and from that fills in "quals" with the right equality comparisons.
|
|
@@ -1347,7 +1347,7 @@ typedef struct PGRangeTblRef {
|
|
|
1347
1347
|
typedef struct PGJoinExpr {
|
|
1348
1348
|
PGNodeTag type;
|
|
1349
1349
|
PGJoinType jointype; /* type of join */
|
|
1350
|
-
|
|
1350
|
+
PGJoinRefType joinreftype; /* Regular/Natural/AsOf join? Will need to shape table */
|
|
1351
1351
|
PGNode *larg; /* left subtree */
|
|
1352
1352
|
PGNode *rarg; /* right subtree */
|
|
1353
1353
|
PGList *usingClause; /* USING clause, if any (list of String) */
|
|
@@ -1398,4 +1398,4 @@ typedef struct PGOnConflictExpr {
|
|
|
1398
1398
|
PGList *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
|
|
1399
1399
|
} PGOnConflictExpr;
|
|
1400
1400
|
|
|
1401
|
-
}
|
|
1401
|
+
}
|