duckdb 0.7.2-dev12.0 → 0.7.2-dev1238.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/local_file_system.cpp +64 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/comparators.cpp +14 -5
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +18 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +60 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +9 -12
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/main/settings/settings.cpp +20 -8
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -5,10 +5,11 @@
|
|
|
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"
|
|
12
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
12
13
|
|
|
13
14
|
namespace duckdb {
|
|
14
15
|
|
|
@@ -64,7 +65,7 @@ void UncompressedCompressState::CreateEmptySegment(idx_t row_start) {
|
|
|
64
65
|
auto compressed_segment = ColumnSegment::CreateTransientSegment(db, type, row_start);
|
|
65
66
|
if (type.InternalType() == PhysicalType::VARCHAR) {
|
|
66
67
|
auto &state = (UncompressedStringSegmentState &)*compressed_segment->GetSegmentState();
|
|
67
|
-
state.overflow_writer = make_unique<WriteOverflowStringsToDisk>(checkpointer.GetColumnData().
|
|
68
|
+
state.overflow_writer = make_unique<WriteOverflowStringsToDisk>(checkpointer.GetColumnData().GetBlockManager());
|
|
68
69
|
}
|
|
69
70
|
current_segment = std::move(compressed_segment);
|
|
70
71
|
current_segment->InitializeAppend(append_state);
|
|
@@ -153,13 +154,7 @@ void FixedSizeScan(ColumnSegment &segment, ColumnScanState &state, idx_t scan_co
|
|
|
153
154
|
auto source_data = data + start * sizeof(T);
|
|
154
155
|
|
|
155
156
|
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
|
-
}
|
|
157
|
+
FlatVector::SetData(result, source_data);
|
|
163
158
|
}
|
|
164
159
|
|
|
165
160
|
//===--------------------------------------------------------------------===//
|
|
@@ -186,48 +181,52 @@ static unique_ptr<CompressionAppendState> FixedSizeInitAppend(ColumnSegment &seg
|
|
|
186
181
|
return make_unique<CompressionAppendState>(std::move(handle));
|
|
187
182
|
}
|
|
188
183
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
184
|
+
struct StandardFixedSizeAppend {
|
|
185
|
+
template <class T>
|
|
186
|
+
static void Append(SegmentStatistics &stats, data_ptr_t target, idx_t target_offset, UnifiedVectorFormat &adata,
|
|
187
|
+
idx_t offset, idx_t count) {
|
|
188
|
+
auto sdata = (T *)adata.data;
|
|
189
|
+
auto tdata = (T *)target;
|
|
190
|
+
if (!adata.validity.AllValid()) {
|
|
191
|
+
for (idx_t i = 0; i < count; i++) {
|
|
192
|
+
auto source_idx = adata.sel->get_index(offset + i);
|
|
193
|
+
auto target_idx = target_offset + i;
|
|
194
|
+
bool is_null = !adata.validity.RowIsValid(source_idx);
|
|
195
|
+
if (!is_null) {
|
|
196
|
+
NumericStats::Update<T>(stats.statistics, sdata[source_idx]);
|
|
197
|
+
tdata[target_idx] = sdata[source_idx];
|
|
198
|
+
} else {
|
|
199
|
+
// we insert a NullValue<T> in the null gap for debuggability
|
|
200
|
+
// this value should never be used or read anywhere
|
|
201
|
+
tdata[target_idx] = NullValue<T>();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
for (idx_t i = 0; i < count; i++) {
|
|
206
|
+
auto source_idx = adata.sel->get_index(offset + i);
|
|
207
|
+
auto target_idx = target_offset + i;
|
|
208
|
+
NumericStats::Update<T>(stats.statistics, sdata[source_idx]);
|
|
201
209
|
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
210
|
}
|
|
207
211
|
}
|
|
208
|
-
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
struct ListFixedSizeAppend {
|
|
216
|
+
template <class T>
|
|
217
|
+
static void Append(SegmentStatistics &stats, data_ptr_t target, idx_t target_offset, UnifiedVectorFormat &adata,
|
|
218
|
+
idx_t offset, idx_t count) {
|
|
219
|
+
auto sdata = (uint64_t *)adata.data;
|
|
220
|
+
auto tdata = (uint64_t *)target;
|
|
209
221
|
for (idx_t i = 0; i < count; i++) {
|
|
210
222
|
auto source_idx = adata.sel->get_index(offset + i);
|
|
211
223
|
auto target_idx = target_offset + i;
|
|
212
|
-
NumericStatistics::Update<T>(stats, sdata[source_idx]);
|
|
213
224
|
tdata[target_idx] = sdata[source_idx];
|
|
214
225
|
}
|
|
215
226
|
}
|
|
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
|
-
}
|
|
227
|
+
};
|
|
229
228
|
|
|
230
|
-
template <class T>
|
|
229
|
+
template <class T, class OP>
|
|
231
230
|
idx_t FixedSizeAppend(CompressionAppendState &append_state, ColumnSegment &segment, SegmentStatistics &stats,
|
|
232
231
|
UnifiedVectorFormat &data, idx_t offset, idx_t count) {
|
|
233
232
|
D_ASSERT(segment.GetBlockOffset() == 0);
|
|
@@ -236,7 +235,7 @@ idx_t FixedSizeAppend(CompressionAppendState &append_state, ColumnSegment &segme
|
|
|
236
235
|
idx_t max_tuple_count = segment.SegmentSize() / sizeof(T);
|
|
237
236
|
idx_t copy_count = MinValue<idx_t>(count, max_tuple_count - segment.count);
|
|
238
237
|
|
|
239
|
-
|
|
238
|
+
OP::template Append<T>(stats, target_ptr, segment.count, data, offset, copy_count);
|
|
240
239
|
segment.count += copy_count;
|
|
241
240
|
return copy_count;
|
|
242
241
|
}
|
|
@@ -249,14 +248,14 @@ idx_t FixedSizeFinalizeAppend(ColumnSegment &segment, SegmentStatistics &stats)
|
|
|
249
248
|
//===--------------------------------------------------------------------===//
|
|
250
249
|
// Get Function
|
|
251
250
|
//===--------------------------------------------------------------------===//
|
|
252
|
-
template <class T>
|
|
251
|
+
template <class T, class APPENDER = StandardFixedSizeAppend>
|
|
253
252
|
CompressionFunction FixedSizeGetFunction(PhysicalType data_type) {
|
|
254
253
|
return CompressionFunction(CompressionType::COMPRESSION_UNCOMPRESSED, data_type, FixedSizeInitAnalyze,
|
|
255
254
|
FixedSizeAnalyze, FixedSizeFinalAnalyze<T>, UncompressedFunctions::InitCompression,
|
|
256
255
|
UncompressedFunctions::Compress, UncompressedFunctions::FinalizeCompress,
|
|
257
256
|
FixedSizeInitScan, FixedSizeScan<T>, FixedSizeScanPartial<T>, FixedSizeFetchRow<T>,
|
|
258
|
-
UncompressedFunctions::EmptySkip, nullptr, FixedSizeInitAppend,
|
|
259
|
-
FixedSizeFinalizeAppend<T>, nullptr);
|
|
257
|
+
UncompressedFunctions::EmptySkip, nullptr, FixedSizeInitAppend,
|
|
258
|
+
FixedSizeAppend<T, APPENDER>, FixedSizeFinalizeAppend<T>, nullptr);
|
|
260
259
|
}
|
|
261
260
|
|
|
262
261
|
CompressionFunction FixedSizeUncompressed::GetFunction(PhysicalType data_type) {
|
|
@@ -287,7 +286,7 @@ CompressionFunction FixedSizeUncompressed::GetFunction(PhysicalType data_type) {
|
|
|
287
286
|
case PhysicalType::INTERVAL:
|
|
288
287
|
return FixedSizeGetFunction<interval_t>(data_type);
|
|
289
288
|
case PhysicalType::LIST:
|
|
290
|
-
return FixedSizeGetFunction<
|
|
289
|
+
return FixedSizeGetFunction<uint64_t, ListFixedSizeAppend>(data_type);
|
|
291
290
|
default:
|
|
292
291
|
throw InternalException("Unsupported type for FixedSizeUncompressed::GetFunction");
|
|
293
292
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
#include "duckdb/function/compression/compression.hpp"
|
|
2
|
-
#include "duckdb/storage/buffer_manager.hpp"
|
|
3
2
|
#include "duckdb/common/types/vector.hpp"
|
|
4
|
-
|
|
5
|
-
#include "duckdb/storage/statistics/validity_statistics.hpp"
|
|
3
|
+
|
|
6
4
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
7
5
|
#include "duckdb/function/compression_function.hpp"
|
|
8
6
|
#include "duckdb/storage/segment/uncompressed.hpp"
|
|
7
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
9
8
|
|
|
10
9
|
namespace duckdb {
|
|
11
10
|
|
|
@@ -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,11 +1,12 @@
|
|
|
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"
|
|
6
6
|
#include "duckdb/storage/table/column_data_checkpointer.hpp"
|
|
7
7
|
#include "duckdb/storage/buffer_manager.hpp"
|
|
8
8
|
#include "duckdb/common/types/null_value.hpp"
|
|
9
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
9
10
|
#include <functional>
|
|
10
11
|
|
|
11
12
|
namespace duckdb {
|
|
@@ -118,12 +119,12 @@ struct RLEConstants {
|
|
|
118
119
|
static constexpr const idx_t RLE_HEADER_SIZE = sizeof(uint64_t);
|
|
119
120
|
};
|
|
120
121
|
|
|
121
|
-
template <class T>
|
|
122
|
+
template <class T, bool WRITE_STATISTICS>
|
|
122
123
|
struct RLECompressState : public CompressionState {
|
|
123
124
|
struct RLEWriter {
|
|
124
125
|
template <class VALUE_TYPE>
|
|
125
126
|
static void Operation(VALUE_TYPE value, rle_count_t count, void *dataptr, bool is_null) {
|
|
126
|
-
auto state = (RLECompressState<T> *)dataptr;
|
|
127
|
+
auto state = (RLECompressState<T, WRITE_STATISTICS> *)dataptr;
|
|
127
128
|
state->WriteValue(value, count, is_null);
|
|
128
129
|
}
|
|
129
130
|
};
|
|
@@ -160,7 +161,7 @@ struct RLECompressState : public CompressionState {
|
|
|
160
161
|
auto data = (T *)vdata.data;
|
|
161
162
|
for (idx_t i = 0; i < count; i++) {
|
|
162
163
|
auto idx = vdata.sel->get_index(i);
|
|
163
|
-
state.template Update<RLECompressState<T>::RLEWriter>(data, vdata.validity, idx);
|
|
164
|
+
state.template Update<RLECompressState<T, WRITE_STATISTICS>::RLEWriter>(data, vdata.validity, idx);
|
|
164
165
|
}
|
|
165
166
|
}
|
|
166
167
|
|
|
@@ -174,8 +175,8 @@ struct RLECompressState : public CompressionState {
|
|
|
174
175
|
entry_count++;
|
|
175
176
|
|
|
176
177
|
// update meta data
|
|
177
|
-
if (!is_null) {
|
|
178
|
-
|
|
178
|
+
if (WRITE_STATISTICS && !is_null) {
|
|
179
|
+
NumericStats::Update<T>(current_segment->stats.statistics, value);
|
|
179
180
|
}
|
|
180
181
|
current_segment->count += count;
|
|
181
182
|
|
|
@@ -206,7 +207,7 @@ struct RLECompressState : public CompressionState {
|
|
|
206
207
|
}
|
|
207
208
|
|
|
208
209
|
void Finalize() {
|
|
209
|
-
state.template Flush<RLECompressState<T>::RLEWriter>();
|
|
210
|
+
state.template Flush<RLECompressState<T, WRITE_STATISTICS>::RLEWriter>();
|
|
210
211
|
|
|
211
212
|
FlushSegment();
|
|
212
213
|
current_segment.reset();
|
|
@@ -222,23 +223,23 @@ struct RLECompressState : public CompressionState {
|
|
|
222
223
|
idx_t max_rle_count;
|
|
223
224
|
};
|
|
224
225
|
|
|
225
|
-
template <class T>
|
|
226
|
+
template <class T, bool WRITE_STATISTICS>
|
|
226
227
|
unique_ptr<CompressionState> RLEInitCompression(ColumnDataCheckpointer &checkpointer, unique_ptr<AnalyzeState> state) {
|
|
227
|
-
return make_unique<RLECompressState<T>>(checkpointer);
|
|
228
|
+
return make_unique<RLECompressState<T, WRITE_STATISTICS>>(checkpointer);
|
|
228
229
|
}
|
|
229
230
|
|
|
230
|
-
template <class T>
|
|
231
|
+
template <class T, bool WRITE_STATISTICS>
|
|
231
232
|
void RLECompress(CompressionState &state_p, Vector &scan_vector, idx_t count) {
|
|
232
|
-
auto &state = (RLECompressState<T> &)state_p;
|
|
233
|
+
auto &state = (RLECompressState<T, WRITE_STATISTICS> &)state_p;
|
|
233
234
|
UnifiedVectorFormat vdata;
|
|
234
235
|
scan_vector.ToUnifiedFormat(count, vdata);
|
|
235
236
|
|
|
236
237
|
state.Append(vdata, count);
|
|
237
238
|
}
|
|
238
239
|
|
|
239
|
-
template <class T>
|
|
240
|
+
template <class T, bool WRITE_STATISTICS>
|
|
240
241
|
void RLEFinalizeCompress(CompressionState &state_p) {
|
|
241
|
-
auto &state = (RLECompressState<T> &)state_p;
|
|
242
|
+
auto &state = (RLECompressState<T, WRITE_STATISTICS> &)state_p;
|
|
242
243
|
state.Finalize();
|
|
243
244
|
}
|
|
244
245
|
|
|
@@ -341,10 +342,11 @@ void RLEFetchRow(ColumnSegment &segment, ColumnFetchState &state, row_t row_id,
|
|
|
341
342
|
//===--------------------------------------------------------------------===//
|
|
342
343
|
// Get Function
|
|
343
344
|
//===--------------------------------------------------------------------===//
|
|
344
|
-
template <class T>
|
|
345
|
+
template <class T, bool WRITE_STATISTICS = true>
|
|
345
346
|
CompressionFunction GetRLEFunction(PhysicalType data_type) {
|
|
346
347
|
return CompressionFunction(CompressionType::COMPRESSION_RLE, data_type, RLEInitAnalyze<T>, RLEAnalyze<T>,
|
|
347
|
-
RLEFinalAnalyze<T>, RLEInitCompression<T
|
|
348
|
+
RLEFinalAnalyze<T>, RLEInitCompression<T, WRITE_STATISTICS>,
|
|
349
|
+
RLECompress<T, WRITE_STATISTICS>, RLEFinalizeCompress<T, WRITE_STATISTICS>,
|
|
348
350
|
RLEInitScan<T>, RLEScan<T>, RLEScanPartial<T>, RLEFetchRow<T>, RLESkip<T>);
|
|
349
351
|
}
|
|
350
352
|
|
|
@@ -373,6 +375,8 @@ CompressionFunction RLEFun::GetFunction(PhysicalType type) {
|
|
|
373
375
|
return GetRLEFunction<float>(type);
|
|
374
376
|
case PhysicalType::DOUBLE:
|
|
375
377
|
return GetRLEFunction<double>(type);
|
|
378
|
+
case PhysicalType::LIST:
|
|
379
|
+
return GetRLEFunction<uint64_t, false>(type);
|
|
376
380
|
default:
|
|
377
381
|
throw InternalException("Unsupported type for RLE");
|
|
378
382
|
}
|
|
@@ -392,6 +396,7 @@ bool RLEFun::TypeIsSupported(PhysicalType type) {
|
|
|
392
396
|
case PhysicalType::UINT64:
|
|
393
397
|
case PhysicalType::FLOAT:
|
|
394
398
|
case PhysicalType::DOUBLE:
|
|
399
|
+
case PhysicalType::LIST:
|
|
395
400
|
return true;
|
|
396
401
|
default:
|
|
397
402
|
return false;
|
|
@@ -2,11 +2,11 @@
|
|
|
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"
|
|
9
|
-
#include "duckdb/
|
|
9
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
10
10
|
|
|
11
11
|
namespace duckdb {
|
|
12
12
|
|
|
@@ -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;
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
#include "duckdb/common/exception.hpp"
|
|
6
6
|
#include "duckdb/common/helper.hpp"
|
|
7
7
|
#include "duckdb/common/vector_operations/vector_operations.hpp"
|
|
8
|
-
#include "duckdb/common/sort/sort.hpp"
|
|
9
8
|
#include "duckdb/execution/expression_executor.hpp"
|
|
10
9
|
#include "duckdb/main/client_context.hpp"
|
|
11
10
|
#include "duckdb/parser/constraints/list.hpp"
|
|
@@ -23,6 +22,8 @@
|
|
|
23
22
|
#include "duckdb/main/attached_database.hpp"
|
|
24
23
|
#include "duckdb/common/types/conflict_manager.hpp"
|
|
25
24
|
#include "duckdb/common/types/constraint_conflict_info.hpp"
|
|
25
|
+
#include "duckdb/storage/table/append_state.hpp"
|
|
26
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
26
27
|
|
|
27
28
|
namespace duckdb {
|
|
28
29
|
|
|
@@ -45,7 +46,7 @@ DataTable::DataTable(AttachedDatabase &db, shared_ptr<TableIOManager> table_io_m
|
|
|
45
46
|
auto types = GetTypes();
|
|
46
47
|
this->row_groups =
|
|
47
48
|
make_shared<RowGroupCollection>(info, TableIOManager::Get(*this).GetBlockManagerForRowData(), types, 0);
|
|
48
|
-
if (data &&
|
|
49
|
+
if (data && data->row_group_count > 0) {
|
|
49
50
|
this->row_groups->Initialize(*data);
|
|
50
51
|
} else {
|
|
51
52
|
this->row_groups->InitializeEmpty();
|
|
@@ -728,8 +729,7 @@ void DataTable::ScanTableSegment(idx_t row_start, idx_t count, const std::functi
|
|
|
728
729
|
CreateIndexScanState state;
|
|
729
730
|
|
|
730
731
|
InitializeScanWithOffset(state, column_ids, row_start, row_start + count);
|
|
731
|
-
auto row_start_aligned = state.table_state.
|
|
732
|
-
state.table_state.row_group_state.vector_index * STANDARD_VECTOR_SIZE;
|
|
732
|
+
auto row_start_aligned = state.table_state.row_group->start + state.table_state.vector_index * STANDARD_VECTOR_SIZE;
|
|
733
733
|
|
|
734
734
|
idx_t current_row = row_start_aligned;
|
|
735
735
|
while (current_row < end) {
|
|
@@ -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
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
#include "duckdb/storage/table/column_checkpoint_state.hpp"
|
|
12
12
|
#include "duckdb/storage/table/column_segment.hpp"
|
|
13
13
|
#include "duckdb/storage/table_io_manager.hpp"
|
|
14
|
+
#include "duckdb/storage/table/scan_state.hpp"
|
|
14
15
|
|
|
15
16
|
namespace duckdb {
|
|
16
17
|
|
|
@@ -197,16 +198,16 @@ void LocalTableStorage::FlushToDisk() {
|
|
|
197
198
|
optimistic_writer.FinalFlush();
|
|
198
199
|
}
|
|
199
200
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
201
|
+
PreservedError LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, RowGroupCollection &source,
|
|
202
|
+
TableIndexList &index_list, const vector<LogicalType> &table_types,
|
|
203
|
+
row_t &start_row) {
|
|
203
204
|
// only need to scan for index append
|
|
204
205
|
// figure out which columns we need to scan for the set of indexes
|
|
205
206
|
auto columns = index_list.GetRequiredColumns();
|
|
206
207
|
// create an empty mock chunk that contains all the correct types for the table
|
|
207
208
|
DataChunk mock_chunk;
|
|
208
209
|
mock_chunk.InitializeEmpty(table_types);
|
|
209
|
-
|
|
210
|
+
PreservedError error;
|
|
210
211
|
source.Scan(transaction, columns, [&](DataChunk &chunk) -> bool {
|
|
211
212
|
// construct the mock chunk by referencing the required columns
|
|
212
213
|
for (idx_t i = 0; i < columns.size(); i++) {
|
|
@@ -214,28 +215,28 @@ bool LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, RowGroupCo
|
|
|
214
215
|
}
|
|
215
216
|
mock_chunk.SetCardinality(chunk);
|
|
216
217
|
// append this chunk to the indexes of the table
|
|
217
|
-
|
|
218
|
-
|
|
218
|
+
error = DataTable::AppendToIndexes(index_list, mock_chunk, start_row);
|
|
219
|
+
if (error) {
|
|
219
220
|
return false;
|
|
220
221
|
}
|
|
221
222
|
start_row += chunk.size();
|
|
222
223
|
return true;
|
|
223
224
|
});
|
|
224
|
-
return
|
|
225
|
+
return error;
|
|
225
226
|
}
|
|
226
227
|
|
|
227
228
|
void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppendState &append_state,
|
|
228
229
|
idx_t append_count, bool append_to_table) {
|
|
229
|
-
bool constraint_violated = false;
|
|
230
230
|
if (append_to_table) {
|
|
231
231
|
table->InitializeAppend(transaction, append_state, append_count);
|
|
232
232
|
}
|
|
233
|
+
PreservedError error;
|
|
233
234
|
if (append_to_table) {
|
|
234
235
|
// appending: need to scan entire
|
|
235
236
|
row_groups->Scan(transaction, [&](DataChunk &chunk) -> bool {
|
|
236
237
|
// append this chunk to the indexes of the table
|
|
237
|
-
|
|
238
|
-
|
|
238
|
+
error = table->AppendToIndexes(chunk, append_state.current_row);
|
|
239
|
+
if (error) {
|
|
239
240
|
return false;
|
|
240
241
|
}
|
|
241
242
|
// append to base table
|
|
@@ -243,11 +244,10 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen
|
|
|
243
244
|
return true;
|
|
244
245
|
});
|
|
245
246
|
} else {
|
|
246
|
-
|
|
247
|
-
|
|
247
|
+
error = AppendToIndexes(transaction, *row_groups, table->info->indexes, table->GetTypes(),
|
|
248
|
+
append_state.current_row);
|
|
248
249
|
}
|
|
249
|
-
if (
|
|
250
|
-
PreservedError error;
|
|
250
|
+
if (error) {
|
|
251
251
|
// need to revert the append
|
|
252
252
|
row_t current_row = append_state.row_start;
|
|
253
253
|
// remove the data from the indexes, if there are any indexes
|
|
@@ -273,10 +273,7 @@ void LocalTableStorage::AppendToIndexes(DuckTransaction &transaction, TableAppen
|
|
|
273
273
|
if (append_to_table) {
|
|
274
274
|
table->RevertAppendInternal(append_state.row_start, append_count);
|
|
275
275
|
}
|
|
276
|
-
|
|
277
|
-
error.Throw();
|
|
278
|
-
}
|
|
279
|
-
throw ConstraintException("PRIMARY KEY or UNIQUE constraint violated: duplicated key");
|
|
276
|
+
error.Throw();
|
|
280
277
|
}
|
|
281
278
|
}
|
|
282
279
|
|
|
@@ -359,6 +356,12 @@ LocalStorage::LocalStorage(ClientContext &context, DuckTransaction &transaction)
|
|
|
359
356
|
: context(context), transaction(transaction) {
|
|
360
357
|
}
|
|
361
358
|
|
|
359
|
+
LocalStorage::CommitState::CommitState() {
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
LocalStorage::CommitState::~CommitState() {
|
|
363
|
+
}
|
|
364
|
+
|
|
362
365
|
LocalStorage &LocalStorage::Get(DuckTransaction &transaction) {
|
|
363
366
|
return transaction.GetLocalStorage();
|
|
364
367
|
}
|
|
@@ -412,8 +415,9 @@ void LocalStorage::Append(LocalAppendState &state, DataChunk &chunk) {
|
|
|
412
415
|
// append to unique indices (if any)
|
|
413
416
|
auto storage = state.storage;
|
|
414
417
|
idx_t base_id = MAX_ROW_ID + storage->row_groups->GetTotalRows() + state.append_state.total_append_count;
|
|
415
|
-
|
|
416
|
-
|
|
418
|
+
auto error = DataTable::AppendToIndexes(storage->indexes, chunk, base_id);
|
|
419
|
+
if (error) {
|
|
420
|
+
error.Throw();
|
|
417
421
|
}
|
|
418
422
|
|
|
419
423
|
//! Append the chunk to the local storage
|
|
@@ -434,9 +438,9 @@ void LocalStorage::LocalMerge(DataTable *table, RowGroupCollection &collection)
|
|
|
434
438
|
if (!storage->indexes.Empty()) {
|
|
435
439
|
// append data to indexes if required
|
|
436
440
|
row_t base_id = MAX_ROW_ID + storage->row_groups->GetTotalRows();
|
|
437
|
-
|
|
438
|
-
if (
|
|
439
|
-
|
|
441
|
+
auto error = storage->AppendToIndexes(transaction, collection, storage->indexes, table->GetTypes(), base_id);
|
|
442
|
+
if (error) {
|
|
443
|
+
error.Throw();
|
|
440
444
|
}
|
|
441
445
|
}
|
|
442
446
|
storage->row_groups->MergeStorage(collection);
|