duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/binding.gyp +12 -7
- package/lib/duckdb.d.ts +55 -2
- package/lib/duckdb.js +20 -1
- package/package.json +1 -1
- package/src/connection.cpp +1 -2
- package/src/database.cpp +1 -1
- package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
- package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
- package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
- package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
- package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
- package/src/duckdb/extension/json/json_functions.cpp +12 -4
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
- package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
- package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
- package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
- package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
- package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
- package/src/duckdb/src/catalog/catalog.cpp +34 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
- package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
- package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
- package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
- package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
- package/src/duckdb/src/common/box_renderer.cpp +109 -23
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
- package/src/duckdb/src/common/exception.cpp +15 -1
- package/src/duckdb/src/common/field_writer.cpp +1 -0
- package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
- package/src/duckdb/src/common/local_file_system.cpp +64 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
- package/src/duckdb/src/common/preserved_error.cpp +7 -5
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
- package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
- package/src/duckdb/src/common/sort/comparators.cpp +14 -5
- package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
- package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
- package/src/duckdb/src/common/string_util.cpp +18 -1
- package/src/duckdb/src/common/types/bit.cpp +166 -87
- package/src/duckdb/src/common/types/blob.cpp +1 -1
- package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
- package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
- package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/interval.cpp +0 -41
- package/src/duckdb/src/common/types/list_segment.cpp +658 -0
- package/src/duckdb/src/common/types/string_heap.cpp +1 -1
- package/src/duckdb/src/common/types/string_type.cpp +1 -1
- package/src/duckdb/src/common/types/time.cpp +13 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
- package/src/duckdb/src/common/types/value.cpp +320 -154
- package/src/duckdb/src/common/types/vector.cpp +158 -134
- package/src/duckdb/src/common/types.cpp +313 -153
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
- package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
- package/src/duckdb/src/execution/index/art/art.cpp +19 -5
- package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
- package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
- package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
- package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
- package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
- package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
- package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
- package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
- package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
- package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
- package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
- package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
- package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
- package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
- package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
- package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
- package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
- package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
- package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
- package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
- package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
- package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
- package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
- package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
- package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
- package/src/duckdb/src/function/cast_rules.cpp +9 -4
- package/src/duckdb/src/function/function_binder.cpp +1 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
- package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
- package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
- package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
- package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
- package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
- package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
- package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
- package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
- package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
- package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
- package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
- package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
- package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
- package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
- package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
- package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
- package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
- package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
- package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
- package/src/duckdb/src/function/table/arrow.cpp +5 -2
- package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
- package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
- package/src/duckdb/src/function/table/read_csv.cpp +60 -0
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
- package/src/duckdb/src/function/table/table_scan.cpp +9 -12
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/function/table_function.cpp +30 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
- package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
- package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
- package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
- package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
- package/src/duckdb/src/include/duckdb.h +71 -2
- package/src/duckdb/src/include/duckdb.hpp +0 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
- package/src/duckdb/src/main/capi/result-c.cpp +27 -1
- package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
- package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
- package/src/duckdb/src/main/client_context.cpp +38 -34
- package/src/duckdb/src/main/client_data.cpp +7 -6
- package/src/duckdb/src/main/config.cpp +70 -1
- package/src/duckdb/src/main/database.cpp +19 -2
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/main/prepared_statement.cpp +4 -0
- package/src/duckdb/src/main/query_profiler.cpp +17 -15
- package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
- package/src/duckdb/src/main/relation.cpp +3 -2
- package/src/duckdb/src/main/settings/settings.cpp +20 -8
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
- package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
- package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
- package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
- package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
- package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
- package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
- package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
- package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
- package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +51 -1
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +49 -0
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
- package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
- package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
- package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
- package/src/duckdb/src/parser/transformer.cpp +15 -3
- package/src/duckdb/src/planner/bind_context.cpp +18 -25
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
- package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
- package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
- package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
- package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
- package/src/duckdb/src/planner/binder.cpp +19 -24
- package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
- package/src/duckdb/src/planner/expression_binder.cpp +10 -3
- package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
- package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
- package/src/duckdb/src/planner/logical_operator.cpp +7 -2
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
- package/src/duckdb/src/planner/planner.cpp +2 -1
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
- package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
- package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
- package/src/duckdb/src/storage/compression/patas.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +20 -15
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +23 -23
- package/src/duckdb/src/storage/index.cpp +12 -1
- package/src/duckdb/src/storage/local_storage.cpp +27 -23
- package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
- package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
- package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
- package/src/duckdb/src/storage/storage_info.cpp +2 -2
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
- package/src/duckdb/src/storage/table/column_data.cpp +118 -62
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
- package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
- package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +213 -143
- package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
- package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
- package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
- package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
- package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
- package/src/duckdb/src/storage/wal_replay.cpp +8 -5
- package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
- package/src/duckdb/src/transaction/commit_state.cpp +11 -7
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
- package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_main_capi.cpp +2 -0
- package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
- package/src/duckdb/ub_src_parser_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/duckdb_node.hpp +2 -1
- package/src/statement.cpp +5 -5
- package/src/utils.cpp +27 -2
- package/test/extension.test.ts +44 -26
- package/test/syntax_error.test.ts +3 -1
- package/filelist.cache +0 -0
- package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
- package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
- package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
- package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
- package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
- package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
- package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
- package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
- package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
- package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
|
@@ -10,71 +10,326 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/constants.hpp"
|
|
12
12
|
#include "duckdb/storage/storage_lock.hpp"
|
|
13
|
-
#include "duckdb/storage/table/segment_base.hpp"
|
|
14
13
|
#include "duckdb/storage/table/segment_lock.hpp"
|
|
15
14
|
#include "duckdb/common/vector.hpp"
|
|
16
15
|
#include "duckdb/common/mutex.hpp"
|
|
16
|
+
#include "duckdb/common/string_util.hpp"
|
|
17
17
|
|
|
18
18
|
namespace duckdb {
|
|
19
19
|
|
|
20
|
+
template <class T>
|
|
20
21
|
struct SegmentNode {
|
|
21
22
|
idx_t row_start;
|
|
22
|
-
unique_ptr<
|
|
23
|
+
unique_ptr<T> node;
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
//! The SegmentTree maintains a list of all segments of a specific column in a table, and allows searching for a segment
|
|
26
27
|
//! by row number
|
|
28
|
+
template <class T, bool SUPPORTS_LAZY_LOADING = false>
|
|
27
29
|
class SegmentTree {
|
|
30
|
+
private:
|
|
31
|
+
class SegmentIterationHelper;
|
|
32
|
+
|
|
28
33
|
public:
|
|
34
|
+
explicit SegmentTree() : finished_loading(true) {
|
|
35
|
+
}
|
|
36
|
+
virtual ~SegmentTree() {
|
|
37
|
+
}
|
|
38
|
+
|
|
29
39
|
//! Locks the segment tree. All methods to the segment tree either lock the segment tree, or take an already
|
|
30
40
|
//! obtained lock.
|
|
31
|
-
SegmentLock Lock()
|
|
41
|
+
SegmentLock Lock() {
|
|
42
|
+
return SegmentLock(node_lock);
|
|
43
|
+
}
|
|
32
44
|
|
|
33
|
-
bool IsEmpty(SegmentLock &)
|
|
45
|
+
bool IsEmpty(SegmentLock &l) {
|
|
46
|
+
return GetRootSegment(l) == nullptr;
|
|
47
|
+
}
|
|
34
48
|
|
|
35
49
|
//! Gets a pointer to the first segment. Useful for scans.
|
|
36
|
-
|
|
37
|
-
|
|
50
|
+
T *GetRootSegment() {
|
|
51
|
+
auto l = Lock();
|
|
52
|
+
return GetRootSegment(l);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
T *GetRootSegment(SegmentLock &l) {
|
|
56
|
+
if (nodes.empty()) {
|
|
57
|
+
LoadNextSegment(l);
|
|
58
|
+
}
|
|
59
|
+
return GetRootSegmentInternal();
|
|
60
|
+
}
|
|
38
61
|
//! Obtains ownership of the data of the segment tree
|
|
39
|
-
vector<SegmentNode
|
|
62
|
+
vector<SegmentNode<T>> MoveSegments(SegmentLock &l) {
|
|
63
|
+
LoadAllSegments(l);
|
|
64
|
+
return std::move(nodes);
|
|
65
|
+
}
|
|
40
66
|
//! Gets a pointer to the nth segment. Negative numbers start from the back.
|
|
41
|
-
|
|
42
|
-
|
|
67
|
+
T *GetSegmentByIndex(int64_t index) {
|
|
68
|
+
auto l = Lock();
|
|
69
|
+
return GetSegmentByIndex(l, index);
|
|
70
|
+
}
|
|
71
|
+
T *GetSegmentByIndex(SegmentLock &l, int64_t index) {
|
|
72
|
+
if (index < 0) {
|
|
73
|
+
// load all segments
|
|
74
|
+
LoadAllSegments(l);
|
|
75
|
+
index = nodes.size() + index;
|
|
76
|
+
if (index < 0) {
|
|
77
|
+
return nullptr;
|
|
78
|
+
}
|
|
79
|
+
return nodes[index].node.get();
|
|
80
|
+
} else {
|
|
81
|
+
// lazily load segments until we reach the specific segment
|
|
82
|
+
while (idx_t(index) >= nodes.size() && LoadNextSegment(l)) {
|
|
83
|
+
}
|
|
84
|
+
if (idx_t(index) >= nodes.size()) {
|
|
85
|
+
return nullptr;
|
|
86
|
+
}
|
|
87
|
+
return nodes[index].node.get();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//! Gets the next segment
|
|
91
|
+
T *GetNextSegment(T *segment) {
|
|
92
|
+
if (!SUPPORTS_LAZY_LOADING) {
|
|
93
|
+
return segment->Next();
|
|
94
|
+
}
|
|
95
|
+
if (finished_loading) {
|
|
96
|
+
return segment->Next();
|
|
97
|
+
}
|
|
98
|
+
auto l = Lock();
|
|
99
|
+
return GetNextSegment(l, segment);
|
|
100
|
+
}
|
|
101
|
+
T *GetNextSegment(SegmentLock &l, T *segment) {
|
|
102
|
+
if (!segment) {
|
|
103
|
+
return nullptr;
|
|
104
|
+
}
|
|
105
|
+
#ifdef DEBUG
|
|
106
|
+
D_ASSERT(nodes[segment->index].node.get() == segment);
|
|
107
|
+
#endif
|
|
108
|
+
return GetSegmentByIndex(l, segment->index + 1);
|
|
109
|
+
}
|
|
43
110
|
|
|
44
111
|
//! Gets a pointer to the last segment. Useful for appends.
|
|
45
|
-
|
|
46
|
-
|
|
112
|
+
T *GetLastSegment(SegmentLock &l) {
|
|
113
|
+
LoadAllSegments(l);
|
|
114
|
+
if (nodes.empty()) {
|
|
115
|
+
return nullptr;
|
|
116
|
+
}
|
|
117
|
+
return nodes.back().node.get();
|
|
118
|
+
}
|
|
47
119
|
//! Gets a pointer to a specific column segment for the given row
|
|
48
|
-
|
|
49
|
-
|
|
120
|
+
T *GetSegment(idx_t row_number) {
|
|
121
|
+
auto l = Lock();
|
|
122
|
+
return GetSegment(l, row_number);
|
|
123
|
+
}
|
|
124
|
+
T *GetSegment(SegmentLock &l, idx_t row_number) {
|
|
125
|
+
return nodes[GetSegmentIndex(l, row_number)].node.get();
|
|
126
|
+
}
|
|
50
127
|
|
|
51
128
|
//! Append a column segment to the tree
|
|
52
|
-
void
|
|
53
|
-
|
|
129
|
+
void AppendSegmentInternal(SegmentLock &l, unique_ptr<T> segment) {
|
|
130
|
+
D_ASSERT(segment);
|
|
131
|
+
// add the node to the list of nodes
|
|
132
|
+
if (!nodes.empty()) {
|
|
133
|
+
nodes.back().node->next = segment.get();
|
|
134
|
+
}
|
|
135
|
+
SegmentNode<T> node;
|
|
136
|
+
segment->index = nodes.size();
|
|
137
|
+
node.row_start = segment->start;
|
|
138
|
+
node.node = std::move(segment);
|
|
139
|
+
nodes.push_back(std::move(node));
|
|
140
|
+
}
|
|
141
|
+
void AppendSegment(unique_ptr<T> segment) {
|
|
142
|
+
auto l = Lock();
|
|
143
|
+
AppendSegment(l, std::move(segment));
|
|
144
|
+
}
|
|
145
|
+
void AppendSegment(SegmentLock &l, unique_ptr<T> segment) {
|
|
146
|
+
LoadAllSegments(l);
|
|
147
|
+
AppendSegmentInternal(l, std::move(segment));
|
|
148
|
+
}
|
|
54
149
|
//! Debug method, check whether the segment is in the segment tree
|
|
55
|
-
bool HasSegment(
|
|
56
|
-
|
|
150
|
+
bool HasSegment(T *segment) {
|
|
151
|
+
auto l = Lock();
|
|
152
|
+
return HasSegment(l, segment);
|
|
153
|
+
}
|
|
154
|
+
bool HasSegment(SegmentLock &, T *segment) {
|
|
155
|
+
return segment->index < nodes.size() && nodes[segment->index].node.get() == segment;
|
|
156
|
+
}
|
|
57
157
|
|
|
58
158
|
//! Replace this tree with another tree, taking over its nodes in-place
|
|
59
|
-
void Replace(SegmentTree &other)
|
|
60
|
-
|
|
159
|
+
void Replace(SegmentTree<T> &other) {
|
|
160
|
+
auto l = Lock();
|
|
161
|
+
Replace(l, other);
|
|
162
|
+
}
|
|
163
|
+
void Replace(SegmentLock &l, SegmentTree<T> &other) {
|
|
164
|
+
other.LoadAllSegments(l);
|
|
165
|
+
nodes = std::move(other.nodes);
|
|
166
|
+
}
|
|
61
167
|
|
|
62
168
|
//! Erase all segments after a specific segment
|
|
63
|
-
void EraseSegments(SegmentLock
|
|
169
|
+
void EraseSegments(SegmentLock &l, idx_t segment_start) {
|
|
170
|
+
LoadAllSegments(l);
|
|
171
|
+
if (segment_start >= nodes.size() - 1) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
nodes.erase(nodes.begin() + segment_start + 1, nodes.end());
|
|
175
|
+
}
|
|
64
176
|
|
|
65
177
|
//! Get the segment index of the column segment for the given row
|
|
66
|
-
idx_t GetSegmentIndex(idx_t row_number)
|
|
67
|
-
|
|
68
|
-
|
|
178
|
+
idx_t GetSegmentIndex(SegmentLock &l, idx_t row_number) {
|
|
179
|
+
idx_t segment_index;
|
|
180
|
+
if (TryGetSegmentIndex(l, row_number, segment_index)) {
|
|
181
|
+
return segment_index;
|
|
182
|
+
}
|
|
183
|
+
string error;
|
|
184
|
+
error = StringUtil::Format("Attempting to find row number \"%lld\" in %lld nodes\n", row_number, nodes.size());
|
|
185
|
+
for (idx_t i = 0; i < nodes.size(); i++) {
|
|
186
|
+
error += StringUtil::Format("Node %lld: Start %lld, Count %lld", i, nodes[i].row_start,
|
|
187
|
+
nodes[i].node->count.load());
|
|
188
|
+
}
|
|
189
|
+
throw InternalException("Could not find node in column segment tree!\n%s%s", error, Exception::GetStackTrace());
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
bool TryGetSegmentIndex(SegmentLock &l, idx_t row_number, idx_t &result) {
|
|
193
|
+
// load segments until the row number is within bounds
|
|
194
|
+
while (nodes.empty() || (row_number >= (nodes.back().row_start + nodes.back().node->count))) {
|
|
195
|
+
if (!LoadNextSegment(l)) {
|
|
196
|
+
break;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (nodes.empty()) {
|
|
200
|
+
return false;
|
|
201
|
+
}
|
|
202
|
+
D_ASSERT(!nodes.empty());
|
|
203
|
+
D_ASSERT(row_number >= nodes[0].row_start);
|
|
204
|
+
D_ASSERT(row_number < nodes.back().row_start + nodes.back().node->count);
|
|
205
|
+
idx_t lower = 0;
|
|
206
|
+
idx_t upper = nodes.size() - 1;
|
|
207
|
+
// binary search to find the node
|
|
208
|
+
while (lower <= upper) {
|
|
209
|
+
idx_t index = (lower + upper) / 2;
|
|
210
|
+
D_ASSERT(index < nodes.size());
|
|
211
|
+
auto &entry = nodes[index];
|
|
212
|
+
D_ASSERT(entry.row_start == entry.node->start);
|
|
213
|
+
if (row_number < entry.row_start) {
|
|
214
|
+
upper = index - 1;
|
|
215
|
+
} else if (row_number >= entry.row_start + entry.node->count) {
|
|
216
|
+
lower = index + 1;
|
|
217
|
+
} else {
|
|
218
|
+
result = index;
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return false;
|
|
223
|
+
}
|
|
69
224
|
|
|
70
|
-
void Verify(SegmentLock &)
|
|
71
|
-
|
|
225
|
+
void Verify(SegmentLock &) {
|
|
226
|
+
#ifdef DEBUG
|
|
227
|
+
idx_t base_start = nodes.empty() ? 0 : nodes[0].node->start;
|
|
228
|
+
for (idx_t i = 0; i < nodes.size(); i++) {
|
|
229
|
+
D_ASSERT(nodes[i].row_start == nodes[i].node->start);
|
|
230
|
+
D_ASSERT(nodes[i].node->start == base_start);
|
|
231
|
+
base_start += nodes[i].node->count;
|
|
232
|
+
}
|
|
233
|
+
#endif
|
|
234
|
+
}
|
|
235
|
+
void Verify() {
|
|
236
|
+
#ifdef DEBUG
|
|
237
|
+
auto l = Lock();
|
|
238
|
+
Verify(l);
|
|
239
|
+
#endif
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
SegmentIterationHelper Segments() {
|
|
243
|
+
return SegmentIterationHelper(*this);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
protected:
|
|
247
|
+
atomic<bool> finished_loading;
|
|
248
|
+
|
|
249
|
+
//! Load the next segment - only used when lazily loading
|
|
250
|
+
virtual unique_ptr<T> LoadSegment() {
|
|
251
|
+
return nullptr;
|
|
252
|
+
}
|
|
72
253
|
|
|
73
254
|
private:
|
|
74
255
|
//! The nodes in the tree, can be binary searched
|
|
75
|
-
vector<SegmentNode
|
|
256
|
+
vector<SegmentNode<T>> nodes;
|
|
76
257
|
//! Lock to access or modify the nodes
|
|
77
258
|
mutex node_lock;
|
|
259
|
+
|
|
260
|
+
private:
|
|
261
|
+
T *GetRootSegmentInternal() {
|
|
262
|
+
return nodes.empty() ? nullptr : nodes[0].node.get();
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
class SegmentIterationHelper {
|
|
266
|
+
public:
|
|
267
|
+
explicit SegmentIterationHelper(SegmentTree &tree) : tree(tree) {
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
private:
|
|
271
|
+
SegmentTree &tree;
|
|
272
|
+
|
|
273
|
+
private:
|
|
274
|
+
class SegmentIterator {
|
|
275
|
+
public:
|
|
276
|
+
SegmentIterator(SegmentTree &tree_p, T *current_p) : tree(tree_p), current(current_p) {
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
SegmentTree &tree;
|
|
280
|
+
T *current;
|
|
281
|
+
|
|
282
|
+
public:
|
|
283
|
+
void Next() {
|
|
284
|
+
current = tree.GetNextSegment(current);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
SegmentIterator &operator++() {
|
|
288
|
+
Next();
|
|
289
|
+
return *this;
|
|
290
|
+
}
|
|
291
|
+
bool operator!=(const SegmentIterator &other) const {
|
|
292
|
+
return current != other.current;
|
|
293
|
+
}
|
|
294
|
+
T &operator*() const {
|
|
295
|
+
D_ASSERT(current);
|
|
296
|
+
return *current;
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
public:
|
|
301
|
+
SegmentIterator begin() {
|
|
302
|
+
return SegmentIterator(tree, tree.GetRootSegment());
|
|
303
|
+
}
|
|
304
|
+
SegmentIterator end() {
|
|
305
|
+
return SegmentIterator(tree, nullptr);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
|
|
309
|
+
//! Load the next segment, if there are any left to load
|
|
310
|
+
bool LoadNextSegment(SegmentLock &l) {
|
|
311
|
+
if (!SUPPORTS_LAZY_LOADING) {
|
|
312
|
+
return false;
|
|
313
|
+
}
|
|
314
|
+
if (finished_loading) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
auto result = LoadSegment();
|
|
318
|
+
if (result) {
|
|
319
|
+
AppendSegmentInternal(l, std::move(result));
|
|
320
|
+
return true;
|
|
321
|
+
}
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
//! Load all segments, if there are any left to load
|
|
326
|
+
void LoadAllSegments(SegmentLock &l) {
|
|
327
|
+
if (!SUPPORTS_LAZY_LOADING) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
while (LoadNextSegment(l))
|
|
331
|
+
;
|
|
332
|
+
}
|
|
78
333
|
};
|
|
79
334
|
|
|
80
335
|
} // namespace duckdb
|
|
@@ -59,10 +59,6 @@ public:
|
|
|
59
59
|
void GetStorageInfo(idx_t row_group_index, vector<idx_t> col_path, TableStorageInfo &result) override;
|
|
60
60
|
|
|
61
61
|
void Verify(RowGroup &parent) override;
|
|
62
|
-
|
|
63
|
-
private:
|
|
64
|
-
template <bool SCAN_COMMITTED, bool ALLOW_UPDATES>
|
|
65
|
-
void TemplatedScan(Transaction *transaction, ColumnScanState &state, Vector &result);
|
|
66
62
|
};
|
|
67
63
|
|
|
68
64
|
} // namespace duckdb
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#include "duckdb/storage/statistics/column_statistics.hpp"
|
|
15
15
|
|
|
16
16
|
namespace duckdb {
|
|
17
|
+
class ColumnList;
|
|
17
18
|
class PersistentTableData;
|
|
18
19
|
|
|
19
20
|
class TableStatisticsLock {
|
|
@@ -38,6 +39,7 @@ public:
|
|
|
38
39
|
void MergeStats(idx_t i, BaseStatistics &stats);
|
|
39
40
|
void MergeStats(TableStatisticsLock &lock, idx_t i, BaseStatistics &stats);
|
|
40
41
|
|
|
42
|
+
void CopyStats(TableStatistics &other);
|
|
41
43
|
unique_ptr<BaseStatistics> CopyStats(idx_t i);
|
|
42
44
|
ColumnStatistics &GetStats(idx_t i);
|
|
43
45
|
|
|
@@ -45,6 +47,9 @@ public:
|
|
|
45
47
|
|
|
46
48
|
unique_ptr<TableStatisticsLock> GetLock();
|
|
47
49
|
|
|
50
|
+
void Serialize(Serializer &serializer);
|
|
51
|
+
void Deserialize(Deserializer &source, ColumnList &columns);
|
|
52
|
+
|
|
48
53
|
private:
|
|
49
54
|
//! The statistics lock
|
|
50
55
|
mutex stats_lock;
|
|
@@ -34,7 +34,6 @@ public:
|
|
|
34
34
|
bool HasUncommittedUpdates(idx_t vector_index);
|
|
35
35
|
bool HasUpdates(idx_t vector_index) const;
|
|
36
36
|
bool HasUpdates(idx_t start_row_idx, idx_t end_row_idx);
|
|
37
|
-
void ClearUpdates();
|
|
38
37
|
|
|
39
38
|
void FetchUpdates(TransactionData transaction, idx_t vector_index, Vector &result);
|
|
40
39
|
void FetchCommitted(idx_t vector_index, Vector &result);
|
|
@@ -137,7 +137,7 @@ public:
|
|
|
137
137
|
//! Sets the table used for subsequent insert/delete/update commands
|
|
138
138
|
void WriteSetTable(string &schema, string &table);
|
|
139
139
|
|
|
140
|
-
void WriteAlter(
|
|
140
|
+
void WriteAlter(data_ptr_t ptr, idx_t data_size);
|
|
141
141
|
|
|
142
142
|
void WriteInsert(DataChunk &chunk);
|
|
143
143
|
void WriteDelete(DataChunk &chunk);
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
#pragma once
|
|
10
10
|
|
|
11
11
|
#include "duckdb/storage/table/row_group_collection.hpp"
|
|
12
|
-
#include "duckdb/storage/table/scan_state.hpp"
|
|
13
12
|
#include "duckdb/storage/table/table_index_list.hpp"
|
|
14
13
|
#include "duckdb/storage/table/table_statistics.hpp"
|
|
15
14
|
|
|
@@ -18,6 +17,7 @@ class AttachedDatabase;
|
|
|
18
17
|
class DataTable;
|
|
19
18
|
class Transaction;
|
|
20
19
|
class WriteAheadLog;
|
|
20
|
+
struct LocalAppendState;
|
|
21
21
|
struct TableAppendState;
|
|
22
22
|
|
|
23
23
|
class OptimisticDataWriter {
|
|
@@ -88,8 +88,8 @@ public:
|
|
|
88
88
|
|
|
89
89
|
void AppendToIndexes(DuckTransaction &transaction, TableAppendState &append_state, idx_t append_count,
|
|
90
90
|
bool append_to_table);
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
PreservedError AppendToIndexes(DuckTransaction &transaction, RowGroupCollection &source, TableIndexList &index_list,
|
|
92
|
+
const vector<LogicalType> &table_types, row_t &start_row);
|
|
93
93
|
|
|
94
94
|
//! Creates an optimistic writer for this table
|
|
95
95
|
OptimisticDataWriter *CreateOptimisticWriter();
|
|
@@ -118,6 +118,9 @@ public:
|
|
|
118
118
|
|
|
119
119
|
public:
|
|
120
120
|
struct CommitState {
|
|
121
|
+
CommitState();
|
|
122
|
+
~CommitState();
|
|
123
|
+
|
|
121
124
|
unordered_map<DataTable *, unique_ptr<TableAppendState>> append_states;
|
|
122
125
|
};
|
|
123
126
|
|
|
@@ -35,7 +35,10 @@
|
|
|
35
35
|
#endif
|
|
36
36
|
#endif
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// API versions
|
|
39
|
+
// if no explicit API version is defined, the latest API version is used
|
|
40
|
+
// Note that using older API versions (i.e. not using DUCKDB_API_LATEST) is deprecated.
|
|
41
|
+
// These will not be supported long-term, and will be removed in future versions.
|
|
39
42
|
#ifndef DUCKDB_API_0_3_1
|
|
40
43
|
#define DUCKDB_API_0_3_1 1
|
|
41
44
|
#endif
|
|
@@ -570,11 +573,19 @@ Use `duckdb_result_chunk_count` to figure out how many chunks there are in the r
|
|
|
570
573
|
*/
|
|
571
574
|
DUCKDB_API duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_index);
|
|
572
575
|
|
|
576
|
+
/*!
|
|
577
|
+
Checks if the type of the internal result is StreamQueryResult.
|
|
578
|
+
|
|
579
|
+
* result: The result object to check.
|
|
580
|
+
* returns: Whether or not the result object is of the type StreamQueryResult
|
|
581
|
+
*/
|
|
582
|
+
DUCKDB_API bool duckdb_result_is_streaming(duckdb_result result);
|
|
583
|
+
|
|
573
584
|
/*!
|
|
574
585
|
Returns the number of data chunks present in the result.
|
|
575
586
|
|
|
576
587
|
* result: The result object
|
|
577
|
-
* returns:
|
|
588
|
+
* returns: Number of data chunks present in the result.
|
|
578
589
|
*/
|
|
579
590
|
DUCKDB_API idx_t duckdb_result_chunk_count(duckdb_result result);
|
|
580
591
|
|
|
@@ -1106,6 +1117,21 @@ Note that after calling `duckdb_pending_prepared`, the pending result should alw
|
|
|
1106
1117
|
DUCKDB_API duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement,
|
|
1107
1118
|
duckdb_pending_result *out_result);
|
|
1108
1119
|
|
|
1120
|
+
/*!
|
|
1121
|
+
Executes the prepared statement with the given bound parameters, and returns a pending result.
|
|
1122
|
+
This pending result will create a streaming duckdb_result when executed.
|
|
1123
|
+
The pending result represents an intermediate structure for a query that is not yet fully executed.
|
|
1124
|
+
|
|
1125
|
+
Note that after calling `duckdb_pending_prepared_streaming`, the pending result should always be destroyed using
|
|
1126
|
+
`duckdb_destroy_pending`, even if this function returns DuckDBError.
|
|
1127
|
+
|
|
1128
|
+
* prepared_statement: The prepared statement to execute.
|
|
1129
|
+
* out_result: The pending query result.
|
|
1130
|
+
* returns: `DuckDBSuccess` on success or `DuckDBError` on failure.
|
|
1131
|
+
*/
|
|
1132
|
+
DUCKDB_API duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,
|
|
1133
|
+
duckdb_pending_result *out_result);
|
|
1134
|
+
|
|
1109
1135
|
/*!
|
|
1110
1136
|
Closes the pending result and de-allocates all memory allocated for the result.
|
|
1111
1137
|
|
|
@@ -1684,6 +1710,16 @@ Adds a parameter to the table function.
|
|
|
1684
1710
|
*/
|
|
1685
1711
|
DUCKDB_API void duckdb_table_function_add_parameter(duckdb_table_function table_function, duckdb_logical_type type);
|
|
1686
1712
|
|
|
1713
|
+
/*!
|
|
1714
|
+
Adds a named parameter to the table function.
|
|
1715
|
+
|
|
1716
|
+
* table_function: The table function
|
|
1717
|
+
* name: The name of the parameter
|
|
1718
|
+
* type: The type of the parameter to add.
|
|
1719
|
+
*/
|
|
1720
|
+
DUCKDB_API void duckdb_table_function_add_named_parameter(duckdb_table_function table_function, const char *name,
|
|
1721
|
+
duckdb_logical_type type);
|
|
1722
|
+
|
|
1687
1723
|
/*!
|
|
1688
1724
|
Assigns extra information to the table function that can be fetched during binding, etc.
|
|
1689
1725
|
|
|
@@ -1792,6 +1828,17 @@ The result must be destroyed with `duckdb_destroy_value`.
|
|
|
1792
1828
|
*/
|
|
1793
1829
|
DUCKDB_API duckdb_value duckdb_bind_get_parameter(duckdb_bind_info info, idx_t index);
|
|
1794
1830
|
|
|
1831
|
+
/*!
|
|
1832
|
+
Retrieves a named parameter with the given name.
|
|
1833
|
+
|
|
1834
|
+
The result must be destroyed with `duckdb_destroy_value`.
|
|
1835
|
+
|
|
1836
|
+
* info: The info object
|
|
1837
|
+
* name: The name of the parameter
|
|
1838
|
+
* returns: The value of the parameter. Must be destroyed with `duckdb_destroy_value`.
|
|
1839
|
+
*/
|
|
1840
|
+
DUCKDB_API duckdb_value duckdb_bind_get_named_parameter(duckdb_bind_info info, const char *name);
|
|
1841
|
+
|
|
1795
1842
|
/*!
|
|
1796
1843
|
Sets the user-provided bind data in the bind object. This object can be retrieved again during execution.
|
|
1797
1844
|
|
|
@@ -2319,6 +2366,28 @@ Returns true if execution of the current query is finished.
|
|
|
2319
2366
|
*/
|
|
2320
2367
|
DUCKDB_API bool duckdb_execution_is_finished(duckdb_connection con);
|
|
2321
2368
|
|
|
2369
|
+
//===--------------------------------------------------------------------===//
|
|
2370
|
+
// Streaming Result Interface
|
|
2371
|
+
//===--------------------------------------------------------------------===//
|
|
2372
|
+
|
|
2373
|
+
/*!
|
|
2374
|
+
Fetches a data chunk from the (streaming) duckdb_result. This function should be called repeatedly until the result is
|
|
2375
|
+
exhausted.
|
|
2376
|
+
|
|
2377
|
+
The result must be destroyed with `duckdb_destroy_data_chunk`.
|
|
2378
|
+
|
|
2379
|
+
This function can only be used on duckdb_results created with 'duckdb_pending_prepared_streaming'
|
|
2380
|
+
|
|
2381
|
+
If this function is used, none of the other result functions can be used and vice versa (i.e. this function cannot be
|
|
2382
|
+
mixed with the legacy result functions or the materialized result functions).
|
|
2383
|
+
|
|
2384
|
+
It is not known beforehand how many chunks will be returned by this result.
|
|
2385
|
+
|
|
2386
|
+
* result: The result object to fetch the data chunk from.
|
|
2387
|
+
* returns: The resulting data chunk. Returns `NULL` if the result has an error.
|
|
2388
|
+
*/
|
|
2389
|
+
DUCKDB_API duckdb_data_chunk duckdb_stream_fetch_chunk(duckdb_result result);
|
|
2390
|
+
|
|
2322
2391
|
#ifdef __cplusplus
|
|
2323
2392
|
}
|
|
2324
2393
|
#endif
|
|
@@ -9,14 +9,16 @@ using duckdb::PendingQueryResult;
|
|
|
9
9
|
using duckdb::PendingStatementWrapper;
|
|
10
10
|
using duckdb::PreparedStatementWrapper;
|
|
11
11
|
|
|
12
|
-
duckdb_state
|
|
12
|
+
duckdb_state duckdb_pending_prepared_internal(duckdb_prepared_statement prepared_statement,
|
|
13
|
+
duckdb_pending_result *out_result, bool allow_streaming) {
|
|
13
14
|
if (!prepared_statement || !out_result) {
|
|
14
15
|
return DuckDBError;
|
|
15
16
|
}
|
|
16
17
|
auto wrapper = (PreparedStatementWrapper *)prepared_statement;
|
|
17
18
|
auto result = new PendingStatementWrapper();
|
|
19
|
+
result->allow_streaming = allow_streaming;
|
|
18
20
|
try {
|
|
19
|
-
result->statement = wrapper->statement->PendingQuery(wrapper->values,
|
|
21
|
+
result->statement = wrapper->statement->PendingQuery(wrapper->values, allow_streaming);
|
|
20
22
|
} catch (const duckdb::Exception &ex) {
|
|
21
23
|
result->statement = make_unique<PendingQueryResult>(duckdb::PreservedError(ex));
|
|
22
24
|
} catch (std::exception &ex) {
|
|
@@ -28,6 +30,15 @@ duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statemen
|
|
|
28
30
|
return return_value;
|
|
29
31
|
}
|
|
30
32
|
|
|
33
|
+
duckdb_state duckdb_pending_prepared(duckdb_prepared_statement prepared_statement, duckdb_pending_result *out_result) {
|
|
34
|
+
return duckdb_pending_prepared_internal(prepared_statement, out_result, false);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
duckdb_state duckdb_pending_prepared_streaming(duckdb_prepared_statement prepared_statement,
|
|
38
|
+
duckdb_pending_result *out_result) {
|
|
39
|
+
return duckdb_pending_prepared_internal(prepared_statement, out_result, true);
|
|
40
|
+
}
|
|
41
|
+
|
|
31
42
|
void duckdb_destroy_pending(duckdb_pending_result *pending_result) {
|
|
32
43
|
if (!pending_result || !*pending_result) {
|
|
33
44
|
return;
|
|
@@ -90,7 +101,9 @@ duckdb_state duckdb_execute_pending(duckdb_pending_result pending_result, duckdb
|
|
|
90
101
|
if (!wrapper->statement) {
|
|
91
102
|
return DuckDBError;
|
|
92
103
|
}
|
|
93
|
-
|
|
104
|
+
|
|
105
|
+
std::unique_ptr<duckdb::QueryResult> result;
|
|
106
|
+
result = wrapper->statement->Execute();
|
|
94
107
|
wrapper->statement.reset();
|
|
95
108
|
return duckdb_translate_result(std::move(result), out_result);
|
|
96
109
|
}
|
|
@@ -292,6 +292,10 @@ bool deprecated_materialize_result(duckdb_result *result) {
|
|
|
292
292
|
// already used as a new result set
|
|
293
293
|
return false;
|
|
294
294
|
}
|
|
295
|
+
if (result_data->result_set_type == CAPIResultSetType::CAPI_RESULT_TYPE_STREAMING) {
|
|
296
|
+
// already used as a streaming result
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
295
299
|
// materialize as deprecated result set
|
|
296
300
|
result_data->result_set_type = CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED;
|
|
297
301
|
auto column_count = result_data->result->ColumnCount();
|
|
@@ -413,6 +417,10 @@ idx_t duckdb_row_count(duckdb_result *result) {
|
|
|
413
417
|
return 0;
|
|
414
418
|
}
|
|
415
419
|
auto &result_data = *((duckdb::DuckDBResultData *)result->internal_data);
|
|
420
|
+
if (result_data.result->type == duckdb::QueryResultType::STREAM_RESULT) {
|
|
421
|
+
// We can't know the row count beforehand
|
|
422
|
+
return 0;
|
|
423
|
+
}
|
|
416
424
|
auto &materialized = (duckdb::MaterializedQueryResult &)*result_data.result;
|
|
417
425
|
return materialized.RowCount();
|
|
418
426
|
}
|
|
@@ -463,7 +471,10 @@ idx_t duckdb_result_chunk_count(duckdb_result result) {
|
|
|
463
471
|
if (result_data.result_set_type == duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED) {
|
|
464
472
|
return 0;
|
|
465
473
|
}
|
|
466
|
-
|
|
474
|
+
if (result_data.result->type != duckdb::QueryResultType::MATERIALIZED_RESULT) {
|
|
475
|
+
// Can't know beforehand how many chunks are returned.
|
|
476
|
+
return 0;
|
|
477
|
+
}
|
|
467
478
|
auto &materialized = (duckdb::MaterializedQueryResult &)*result_data.result;
|
|
468
479
|
return materialized.Collection().ChunkCount();
|
|
469
480
|
}
|
|
@@ -476,6 +487,10 @@ duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_idx)
|
|
|
476
487
|
if (result_data.result_set_type == duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_DEPRECATED) {
|
|
477
488
|
return nullptr;
|
|
478
489
|
}
|
|
490
|
+
if (result_data.result->type != duckdb::QueryResultType::MATERIALIZED_RESULT) {
|
|
491
|
+
// This API is only supported for materialized query results
|
|
492
|
+
return nullptr;
|
|
493
|
+
}
|
|
479
494
|
result_data.result_set_type = duckdb::CAPIResultSetType::CAPI_RESULT_TYPE_MATERIALIZED;
|
|
480
495
|
auto &materialized = (duckdb::MaterializedQueryResult &)*result_data.result;
|
|
481
496
|
auto &collection = materialized.Collection();
|
|
@@ -487,3 +502,14 @@ duckdb_data_chunk duckdb_result_get_chunk(duckdb_result result, idx_t chunk_idx)
|
|
|
487
502
|
collection.FetchChunk(chunk_idx, *chunk);
|
|
488
503
|
return reinterpret_cast<duckdb_data_chunk>(chunk.release());
|
|
489
504
|
}
|
|
505
|
+
|
|
506
|
+
bool duckdb_result_is_streaming(duckdb_result result) {
|
|
507
|
+
if (!result.internal_data) {
|
|
508
|
+
return false;
|
|
509
|
+
}
|
|
510
|
+
if (duckdb_result_error(&result) != nullptr) {
|
|
511
|
+
return false;
|
|
512
|
+
}
|
|
513
|
+
auto &result_data = *((duckdb::DuckDBResultData *)result.internal_data);
|
|
514
|
+
return result_data.result->type == duckdb::QueryResultType::STREAM_RESULT;
|
|
515
|
+
}
|