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
|
@@ -19,12 +19,12 @@ typedef BoundCastInfo (*bind_cast_function_t)(BindCastInput &input, const Logica
|
|
|
19
19
|
typedef int64_t (*implicit_cast_cost_t)(const LogicalType &from, const LogicalType &to);
|
|
20
20
|
|
|
21
21
|
struct GetCastFunctionInput {
|
|
22
|
-
GetCastFunctionInput(ClientContext
|
|
22
|
+
GetCastFunctionInput(optional_ptr<ClientContext> context = nullptr) : context(context) {
|
|
23
23
|
}
|
|
24
24
|
GetCastFunctionInput(ClientContext &context) : context(&context) {
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
ClientContext
|
|
27
|
+
optional_ptr<ClientContext> context;
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
struct BindCastFunction {
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
|
|
11
11
|
#include "duckdb/common/types.hpp"
|
|
12
12
|
#include "duckdb/common/types/vector.hpp"
|
|
13
|
+
#include "duckdb/common/optional_ptr.hpp"
|
|
14
|
+
#include "duckdb/function/scalar_function.hpp"
|
|
13
15
|
|
|
14
16
|
namespace duckdb {
|
|
15
17
|
|
|
@@ -31,25 +33,43 @@ struct BoundCastData {
|
|
|
31
33
|
struct CastParameters {
|
|
32
34
|
CastParameters() {
|
|
33
35
|
}
|
|
34
|
-
CastParameters(BoundCastData *cast_data, bool strict, string *error_message,
|
|
36
|
+
CastParameters(BoundCastData *cast_data, bool strict, string *error_message,
|
|
37
|
+
optional_ptr<FunctionLocalState> local_state)
|
|
35
38
|
: cast_data(cast_data), strict(strict), error_message(error_message), local_state(local_state) {
|
|
36
39
|
}
|
|
37
|
-
CastParameters(CastParameters &parent, BoundCastData
|
|
38
|
-
|
|
40
|
+
CastParameters(CastParameters &parent, optional_ptr<BoundCastData> cast_data,
|
|
41
|
+
optional_ptr<FunctionLocalState> local_state)
|
|
42
|
+
: cast_data(cast_data), strict(parent.strict), error_message(parent.error_message), local_state(local_state) {
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
//! The bound cast data (if any)
|
|
42
|
-
BoundCastData
|
|
46
|
+
optional_ptr<BoundCastData> cast_data;
|
|
43
47
|
//! whether or not to enable strict casting
|
|
44
48
|
bool strict = false;
|
|
45
49
|
// out: error message in case cast has failed
|
|
46
50
|
string *error_message = nullptr;
|
|
47
51
|
//! Local state
|
|
48
|
-
FunctionLocalState
|
|
52
|
+
optional_ptr<FunctionLocalState> local_state;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
struct CastLocalStateParameters {
|
|
56
|
+
CastLocalStateParameters(optional_ptr<ClientContext> context_p, optional_ptr<BoundCastData> cast_data_p)
|
|
57
|
+
: context(context_p), cast_data(cast_data_p) {
|
|
58
|
+
}
|
|
59
|
+
CastLocalStateParameters(ClientContext &context_p, optional_ptr<BoundCastData> cast_data_p)
|
|
60
|
+
: context(&context_p), cast_data(cast_data_p) {
|
|
61
|
+
}
|
|
62
|
+
CastLocalStateParameters(CastLocalStateParameters &parent, optional_ptr<BoundCastData> cast_data_p)
|
|
63
|
+
: context(parent.context), cast_data(cast_data_p) {
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
optional_ptr<ClientContext> context;
|
|
67
|
+
//! The bound cast data (if any)
|
|
68
|
+
optional_ptr<BoundCastData> cast_data;
|
|
49
69
|
};
|
|
50
70
|
|
|
51
71
|
typedef bool (*cast_function_t)(Vector &source, Vector &result, idx_t count, CastParameters ¶meters);
|
|
52
|
-
typedef unique_ptr<FunctionLocalState> (*init_cast_local_state_t)(
|
|
72
|
+
typedef unique_ptr<FunctionLocalState> (*init_cast_local_state_t)(CastLocalStateParameters ¶meters);
|
|
53
73
|
|
|
54
74
|
struct BoundCastInfo {
|
|
55
75
|
DUCKDB_API
|
|
@@ -65,72 +85,16 @@ public:
|
|
|
65
85
|
};
|
|
66
86
|
|
|
67
87
|
struct BindCastInput {
|
|
68
|
-
DUCKDB_API BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, ClientContext
|
|
88
|
+
DUCKDB_API BindCastInput(CastFunctionSet &function_set, BindCastInfo *info, optional_ptr<ClientContext> context);
|
|
69
89
|
|
|
70
90
|
CastFunctionSet &function_set;
|
|
71
91
|
BindCastInfo *info;
|
|
72
|
-
ClientContext
|
|
92
|
+
optional_ptr<ClientContext> context;
|
|
73
93
|
|
|
74
94
|
public:
|
|
75
95
|
DUCKDB_API BoundCastInfo GetCastFunction(const LogicalType &source, const LogicalType &target);
|
|
76
96
|
};
|
|
77
97
|
|
|
78
|
-
struct ListBoundCastData : public BoundCastData {
|
|
79
|
-
explicit ListBoundCastData(BoundCastInfo child_cast) : child_cast_info(std::move(child_cast)) {
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
BoundCastInfo child_cast_info;
|
|
83
|
-
static unique_ptr<BoundCastData> BindListToListCast(BindCastInput &input, const LogicalType &source,
|
|
84
|
-
const LogicalType &target);
|
|
85
|
-
|
|
86
|
-
public:
|
|
87
|
-
unique_ptr<BoundCastData> Copy() const override {
|
|
88
|
-
return make_unique<ListBoundCastData>(child_cast_info.Copy());
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
struct ListCast {
|
|
93
|
-
static bool ListToListCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters);
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
struct StructBoundCastData : public BoundCastData {
|
|
97
|
-
StructBoundCastData(vector<BoundCastInfo> child_casts, LogicalType target_p)
|
|
98
|
-
: child_cast_info(std::move(child_casts)), target(std::move(target_p)) {
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
vector<BoundCastInfo> child_cast_info;
|
|
102
|
-
LogicalType target;
|
|
103
|
-
|
|
104
|
-
static unique_ptr<BoundCastData> BindStructToStructCast(BindCastInput &input, const LogicalType &source,
|
|
105
|
-
const LogicalType &target);
|
|
106
|
-
|
|
107
|
-
public:
|
|
108
|
-
unique_ptr<BoundCastData> Copy() const override {
|
|
109
|
-
vector<BoundCastInfo> copy_info;
|
|
110
|
-
for (auto &info : child_cast_info) {
|
|
111
|
-
copy_info.push_back(info.Copy());
|
|
112
|
-
}
|
|
113
|
-
return make_unique<StructBoundCastData>(std::move(copy_info), target);
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
struct MapBoundCastData : public BoundCastData {
|
|
118
|
-
MapBoundCastData(BoundCastInfo key_cast, BoundCastInfo value_cast)
|
|
119
|
-
: key_cast(std::move(key_cast)), value_cast(std::move(value_cast)) {
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
BoundCastInfo key_cast;
|
|
123
|
-
BoundCastInfo value_cast;
|
|
124
|
-
|
|
125
|
-
static unique_ptr<BoundCastData> BindMapToMapCast(BindCastInput &input, const LogicalType &source,
|
|
126
|
-
const LogicalType &target);
|
|
127
|
-
|
|
128
|
-
public:
|
|
129
|
-
unique_ptr<BoundCastData> Copy() const override {
|
|
130
|
-
return make_unique<MapBoundCastData>(key_cast.Copy(), value_cast.Copy());
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
|
|
134
98
|
struct DefaultCasts {
|
|
135
99
|
DUCKDB_API static BoundCastInfo GetDefaultCastFunction(BindCastInput &input, const LogicalType &source,
|
|
136
100
|
const LogicalType &target);
|
|
@@ -59,13 +59,10 @@ public:
|
|
|
59
59
|
DUCKDB_API unique_ptr<BoundAggregateExpression>
|
|
60
60
|
BindAggregateFunction(AggregateFunction bound_function, vector<unique_ptr<Expression>> children,
|
|
61
61
|
unique_ptr<Expression> filter = nullptr,
|
|
62
|
-
AggregateType aggr_type = AggregateType::NON_DISTINCT
|
|
63
|
-
unique_ptr<BoundOrderModifier> order_bys = nullptr);
|
|
62
|
+
AggregateType aggr_type = AggregateType::NON_DISTINCT);
|
|
64
63
|
|
|
65
|
-
DUCKDB_API
|
|
66
|
-
|
|
67
|
-
unique_ptr<FunctionData> bind_info,
|
|
68
|
-
unique_ptr<BoundOrderModifier> order_bys);
|
|
64
|
+
DUCKDB_API static void BindSortedAggregate(ClientContext &context, BoundAggregateExpression &expr,
|
|
65
|
+
const vector<unique_ptr<Expression>> &groups);
|
|
69
66
|
|
|
70
67
|
private:
|
|
71
68
|
//! Cast a set of expressions to the arguments of this function
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
namespace duckdb {
|
|
4
|
+
|
|
5
|
+
template <class CHILD_TYPE, class RETURN_TYPE, class OP, class LIST_ACCESSOR>
|
|
6
|
+
static void TemplatedContainsOrPosition(DataChunk &args, Vector &result, bool is_nested = false) {
|
|
7
|
+
D_ASSERT(args.ColumnCount() == 2);
|
|
8
|
+
auto count = args.size();
|
|
9
|
+
Vector &list = LIST_ACCESSOR::GetList(args.data[0]);
|
|
10
|
+
Vector &value_vector = args.data[1];
|
|
11
|
+
|
|
12
|
+
// Create a result vector of type RETURN_TYPE
|
|
13
|
+
result.SetVectorType(VectorType::FLAT_VECTOR);
|
|
14
|
+
auto result_entries = FlatVector::GetData<RETURN_TYPE>(result);
|
|
15
|
+
auto &result_validity = FlatVector::Validity(result);
|
|
16
|
+
|
|
17
|
+
if (list.GetType().id() == LogicalTypeId::SQLNULL) {
|
|
18
|
+
result_validity.SetInvalid(0);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
auto list_size = LIST_ACCESSOR::GetListSize(list);
|
|
23
|
+
auto &child_vector = LIST_ACCESSOR::GetEntry(list);
|
|
24
|
+
|
|
25
|
+
UnifiedVectorFormat child_data;
|
|
26
|
+
child_vector.ToUnifiedFormat(list_size, child_data);
|
|
27
|
+
|
|
28
|
+
UnifiedVectorFormat list_data;
|
|
29
|
+
list.ToUnifiedFormat(count, list_data);
|
|
30
|
+
auto list_entries = (list_entry_t *)list_data.data;
|
|
31
|
+
|
|
32
|
+
UnifiedVectorFormat value_data;
|
|
33
|
+
value_vector.ToUnifiedFormat(count, value_data);
|
|
34
|
+
|
|
35
|
+
// not required for a comparison of nested types
|
|
36
|
+
auto child_value = (CHILD_TYPE *)child_data.data;
|
|
37
|
+
auto values = (CHILD_TYPE *)value_data.data;
|
|
38
|
+
|
|
39
|
+
for (idx_t i = 0; i < count; i++) {
|
|
40
|
+
auto list_index = list_data.sel->get_index(i);
|
|
41
|
+
auto value_index = value_data.sel->get_index(i);
|
|
42
|
+
|
|
43
|
+
if (!list_data.validity.RowIsValid(list_index) || !value_data.validity.RowIsValid(value_index)) {
|
|
44
|
+
result_validity.SetInvalid(i);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const auto &list_entry = list_entries[list_index];
|
|
49
|
+
|
|
50
|
+
result_entries[i] = OP::Initialize();
|
|
51
|
+
for (idx_t child_idx = 0; child_idx < list_entry.length; child_idx++) {
|
|
52
|
+
|
|
53
|
+
auto child_value_idx = child_data.sel->get_index(list_entry.offset + child_idx);
|
|
54
|
+
if (!child_data.validity.RowIsValid(child_value_idx)) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (!is_nested) {
|
|
59
|
+
if (Equals::Operation(child_value[child_value_idx], values[value_index])) {
|
|
60
|
+
result_entries[i] = OP::UpdateResultEntries(child_idx);
|
|
61
|
+
break; // Found value in list, no need to look further
|
|
62
|
+
}
|
|
63
|
+
} else {
|
|
64
|
+
// FIXME: using Value is less efficient than modifying the vector comparison code
|
|
65
|
+
// to more efficiently compare nested types
|
|
66
|
+
|
|
67
|
+
// Note: When using GetValue we don't first apply the selection vector
|
|
68
|
+
// because it is already done inside GetValue
|
|
69
|
+
auto lvalue = child_vector.GetValue(list_entry.offset + child_idx);
|
|
70
|
+
auto rvalue = value_vector.GetValue(i);
|
|
71
|
+
if (Value::NotDistinctFrom(lvalue, rvalue)) {
|
|
72
|
+
result_entries[i] = OP::UpdateResultEntries(child_idx);
|
|
73
|
+
break; // Found value in list, no need to look further
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (args.AllConstant()) {
|
|
80
|
+
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
template <class T, class OP, class LIST_ACCESSOR>
|
|
85
|
+
void ListContainsOrPosition(DataChunk &args, Vector &result) {
|
|
86
|
+
const auto physical_type = args.data[1].GetType().InternalType();
|
|
87
|
+
switch (physical_type) {
|
|
88
|
+
case PhysicalType::BOOL:
|
|
89
|
+
case PhysicalType::INT8:
|
|
90
|
+
TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
91
|
+
break;
|
|
92
|
+
case PhysicalType::INT16:
|
|
93
|
+
TemplatedContainsOrPosition<int16_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
94
|
+
break;
|
|
95
|
+
case PhysicalType::INT32:
|
|
96
|
+
TemplatedContainsOrPosition<int32_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
97
|
+
break;
|
|
98
|
+
case PhysicalType::INT64:
|
|
99
|
+
TemplatedContainsOrPosition<int64_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
100
|
+
break;
|
|
101
|
+
case PhysicalType::INT128:
|
|
102
|
+
TemplatedContainsOrPosition<hugeint_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
103
|
+
break;
|
|
104
|
+
case PhysicalType::UINT8:
|
|
105
|
+
TemplatedContainsOrPosition<uint8_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
106
|
+
break;
|
|
107
|
+
case PhysicalType::UINT16:
|
|
108
|
+
TemplatedContainsOrPosition<uint16_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
109
|
+
break;
|
|
110
|
+
case PhysicalType::UINT32:
|
|
111
|
+
TemplatedContainsOrPosition<uint32_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
112
|
+
break;
|
|
113
|
+
case PhysicalType::UINT64:
|
|
114
|
+
TemplatedContainsOrPosition<uint64_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
115
|
+
break;
|
|
116
|
+
case PhysicalType::FLOAT:
|
|
117
|
+
TemplatedContainsOrPosition<float, T, OP, LIST_ACCESSOR>(args, result);
|
|
118
|
+
break;
|
|
119
|
+
case PhysicalType::DOUBLE:
|
|
120
|
+
TemplatedContainsOrPosition<double, T, OP, LIST_ACCESSOR>(args, result);
|
|
121
|
+
break;
|
|
122
|
+
case PhysicalType::VARCHAR:
|
|
123
|
+
TemplatedContainsOrPosition<string_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
124
|
+
break;
|
|
125
|
+
case PhysicalType::INTERVAL:
|
|
126
|
+
TemplatedContainsOrPosition<interval_t, T, OP, LIST_ACCESSOR>(args, result);
|
|
127
|
+
break;
|
|
128
|
+
case PhysicalType::STRUCT:
|
|
129
|
+
case PhysicalType::LIST:
|
|
130
|
+
TemplatedContainsOrPosition<int8_t, T, OP, LIST_ACCESSOR>(args, result, true);
|
|
131
|
+
break;
|
|
132
|
+
default:
|
|
133
|
+
throw NotImplementedException("This function has not been implemented for physical type %s",
|
|
134
|
+
TypeIdToString(physical_type));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
} // namespace duckdb
|
|
@@ -122,4 +122,12 @@ struct IsFiniteFun {
|
|
|
122
122
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
123
123
|
};
|
|
124
124
|
|
|
125
|
+
struct GreatestCommonDivisorFun {
|
|
126
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
struct LeastCommonMultipleFun {
|
|
130
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
131
|
+
};
|
|
132
|
+
|
|
125
133
|
} // namespace duckdb
|
|
@@ -14,12 +14,59 @@
|
|
|
14
14
|
#include "duckdb/common/unordered_map.hpp"
|
|
15
15
|
#include "duckdb/common/field_writer.hpp"
|
|
16
16
|
#include "duckdb/function/built_in_functions.hpp"
|
|
17
|
+
#include "duckdb/function/scalar/list/contains_or_position.hpp"
|
|
17
18
|
|
|
18
19
|
namespace duckdb {
|
|
19
20
|
|
|
20
21
|
enum class MapInvalidReason : uint8_t { VALID, NULL_KEY_LIST, NULL_KEY, DUPLICATE_KEY };
|
|
21
22
|
enum class UnionInvalidReason : uint8_t { VALID, TAG_OUT_OF_RANGE, NO_MEMBERS, VALIDITY_OVERLAP };
|
|
22
23
|
|
|
24
|
+
struct ListArgFunctor {
|
|
25
|
+
static Vector &GetList(Vector &list) {
|
|
26
|
+
return list;
|
|
27
|
+
}
|
|
28
|
+
static idx_t GetListSize(Vector &list) {
|
|
29
|
+
return ListVector::GetListSize(list);
|
|
30
|
+
}
|
|
31
|
+
static Vector &GetEntry(Vector &list) {
|
|
32
|
+
return ListVector::GetEntry(list);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
struct MapKeyArgFunctor {
|
|
37
|
+
// MAP is a LIST(STRUCT(K,V))
|
|
38
|
+
// meaning the MAP itself is a List, but the child vector that we're interested in (the keys)
|
|
39
|
+
// are a level deeper than the initial child vector
|
|
40
|
+
|
|
41
|
+
static Vector &GetList(Vector &map) {
|
|
42
|
+
return map;
|
|
43
|
+
}
|
|
44
|
+
static idx_t GetListSize(Vector &map) {
|
|
45
|
+
return ListVector::GetListSize(map);
|
|
46
|
+
}
|
|
47
|
+
static Vector &GetEntry(Vector &map) {
|
|
48
|
+
return MapVector::GetKeys(map);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
struct ContainsFunctor {
|
|
53
|
+
static inline bool Initialize() {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
static inline bool UpdateResultEntries(idx_t child_idx) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
struct PositionFunctor {
|
|
62
|
+
static inline int32_t Initialize() {
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
static inline int32_t UpdateResultEntries(idx_t child_idx) {
|
|
66
|
+
return child_idx + 1;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
23
70
|
struct VariableReturnBindData : public FunctionData {
|
|
24
71
|
LogicalType stype;
|
|
25
72
|
|
|
@@ -80,6 +127,18 @@ struct MapFromEntriesFun {
|
|
|
80
127
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
81
128
|
};
|
|
82
129
|
|
|
130
|
+
struct MapEntriesFun {
|
|
131
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
struct MapValuesFun {
|
|
135
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
struct MapKeysFun {
|
|
139
|
+
static void RegisterFunction(BuiltinFunctions &set);
|
|
140
|
+
};
|
|
141
|
+
|
|
83
142
|
struct MapExtractFun {
|
|
84
143
|
static void RegisterFunction(BuiltinFunctions &set);
|
|
85
144
|
};
|
|
@@ -11,9 +11,36 @@
|
|
|
11
11
|
#include "duckdb/function/function_set.hpp"
|
|
12
12
|
#include "re2/re2.h"
|
|
13
13
|
#include "duckdb/function/built_in_functions.hpp"
|
|
14
|
+
#include "re2/stringpiece.h"
|
|
14
15
|
|
|
15
16
|
namespace duckdb {
|
|
16
17
|
|
|
18
|
+
namespace regexp_util {
|
|
19
|
+
|
|
20
|
+
bool TryParseConstantPattern(ClientContext &context, Expression &expr, string &constant_string);
|
|
21
|
+
void ParseRegexOptions(const string &options, duckdb_re2::RE2::Options &result, bool *global_replace = nullptr);
|
|
22
|
+
void ParseRegexOptions(ClientContext &context, Expression &expr, RE2::Options &target, bool *global_replace = nullptr);
|
|
23
|
+
|
|
24
|
+
inline duckdb_re2::StringPiece CreateStringPiece(const string_t &input) {
|
|
25
|
+
return duckdb_re2::StringPiece(input.GetDataUnsafe(), input.GetSize());
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
inline string_t Extract(const string_t &input, Vector &result, const RE2 &re, const duckdb_re2::StringPiece &rewrite) {
|
|
29
|
+
string extracted;
|
|
30
|
+
RE2::Extract(input.GetString(), re, rewrite, &extracted);
|
|
31
|
+
return StringVector::AddString(result, extracted.c_str(), extracted.size());
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
} // namespace regexp_util
|
|
35
|
+
|
|
36
|
+
struct RegexpExtractAll {
|
|
37
|
+
static void Execute(DataChunk &args, ExpressionState &state, Vector &result);
|
|
38
|
+
static unique_ptr<FunctionData> Bind(ClientContext &context, ScalarFunction &bound_function,
|
|
39
|
+
vector<unique_ptr<Expression>> &arguments);
|
|
40
|
+
static unique_ptr<FunctionLocalState> InitLocalState(ExpressionState &state, const BoundFunctionExpression &expr,
|
|
41
|
+
FunctionData *bind_data);
|
|
42
|
+
};
|
|
43
|
+
|
|
17
44
|
struct RegexpBaseBindData : public FunctionData {
|
|
18
45
|
RegexpBaseBindData();
|
|
19
46
|
RegexpBaseBindData(duckdb_re2::RE2::Options options, string constant_string, bool constant_pattern = true);
|
|
@@ -61,14 +88,67 @@ struct RegexpExtractBindData : public RegexpBaseBindData {
|
|
|
61
88
|
bool Equals(const FunctionData &other_p) const override;
|
|
62
89
|
};
|
|
63
90
|
|
|
91
|
+
struct RegexStringPieceArgs {
|
|
92
|
+
RegexStringPieceArgs() : size(0), capacity(0), group_buffer(nullptr) {
|
|
93
|
+
}
|
|
94
|
+
void Init(idx_t size) {
|
|
95
|
+
this->size = size;
|
|
96
|
+
// Allocate for one extra, for the all-encompassing match group
|
|
97
|
+
this->capacity = size + 1;
|
|
98
|
+
group_buffer = AllocateArray<duckdb_re2::StringPiece>(capacity);
|
|
99
|
+
}
|
|
100
|
+
void SetSize(idx_t size) {
|
|
101
|
+
this->size = size;
|
|
102
|
+
if (size + 1 > capacity) {
|
|
103
|
+
Clear();
|
|
104
|
+
Init(size);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
RegexStringPieceArgs &operator=(RegexStringPieceArgs &&other) {
|
|
109
|
+
std::swap(this->size, other.size);
|
|
110
|
+
std::swap(this->capacity, other.capacity);
|
|
111
|
+
std::swap(this->group_buffer, other.group_buffer);
|
|
112
|
+
return *this;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
~RegexStringPieceArgs() {
|
|
116
|
+
Clear();
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private:
|
|
120
|
+
void Clear() {
|
|
121
|
+
DeleteArray<duckdb_re2::StringPiece>(group_buffer, capacity);
|
|
122
|
+
group_buffer = nullptr;
|
|
123
|
+
|
|
124
|
+
size = 0;
|
|
125
|
+
capacity = 0;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
public:
|
|
129
|
+
idx_t size;
|
|
130
|
+
//! The currently allocated capacity for the groups
|
|
131
|
+
idx_t capacity;
|
|
132
|
+
//! Used by ExtractAll to pre-allocate the storage for the groups
|
|
133
|
+
duckdb_re2::StringPiece *group_buffer;
|
|
134
|
+
};
|
|
135
|
+
|
|
64
136
|
struct RegexLocalState : public FunctionLocalState {
|
|
65
|
-
explicit RegexLocalState(RegexpBaseBindData &info)
|
|
137
|
+
explicit RegexLocalState(RegexpBaseBindData &info, bool extract_all = false)
|
|
66
138
|
: constant_pattern(duckdb_re2::StringPiece(info.constant_string.c_str(), info.constant_string.size()),
|
|
67
139
|
info.options) {
|
|
140
|
+
if (extract_all) {
|
|
141
|
+
auto group_count_p = constant_pattern.NumberOfCapturingGroups();
|
|
142
|
+
if (group_count_p != -1) {
|
|
143
|
+
group_buffer.Init(group_count_p);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
68
146
|
D_ASSERT(info.constant_pattern);
|
|
69
147
|
}
|
|
70
148
|
|
|
71
149
|
RE2 constant_pattern;
|
|
150
|
+
//! Used by regexp_extract_all to pre-allocate the args
|
|
151
|
+
RegexStringPieceArgs group_buffer;
|
|
72
152
|
};
|
|
73
153
|
|
|
74
154
|
unique_ptr<FunctionLocalState> RegexInitLocalState(ExpressionState &state, const BoundFunctionExpression &expr,
|
|
@@ -29,13 +29,13 @@ class ScalarFunctionCatalogEntry;
|
|
|
29
29
|
|
|
30
30
|
struct FunctionStatisticsInput {
|
|
31
31
|
FunctionStatisticsInput(BoundFunctionExpression &expr_p, FunctionData *bind_data_p,
|
|
32
|
-
vector<
|
|
32
|
+
vector<BaseStatistics> &child_stats_p, unique_ptr<Expression> *expr_ptr_p)
|
|
33
33
|
: expr(expr_p), bind_data(bind_data_p), child_stats(child_stats_p), expr_ptr(expr_ptr_p) {
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
BoundFunctionExpression &expr;
|
|
37
37
|
FunctionData *bind_data;
|
|
38
|
-
vector<
|
|
38
|
+
vector<BaseStatistics> &child_stats;
|
|
39
39
|
unique_ptr<Expression> *expr_ptr;
|
|
40
40
|
};
|
|
41
41
|
|
|
@@ -32,7 +32,18 @@ enum class ArrowDateTimeType : uint8_t {
|
|
|
32
32
|
NANOSECONDS = 2,
|
|
33
33
|
SECONDS = 3,
|
|
34
34
|
DAYS = 4,
|
|
35
|
-
MONTHS = 5
|
|
35
|
+
MONTHS = 5,
|
|
36
|
+
MONTH_DAY_NANO = 6
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
struct ArrowInterval {
|
|
40
|
+
int32_t months;
|
|
41
|
+
int32_t days;
|
|
42
|
+
int64_t nanoseconds;
|
|
43
|
+
|
|
44
|
+
inline bool operator==(const ArrowInterval &rhs) const {
|
|
45
|
+
return this->days == rhs.days && this->months == rhs.months && this->nanoseconds == rhs.nanoseconds;
|
|
46
|
+
}
|
|
36
47
|
};
|
|
37
48
|
|
|
38
49
|
struct ArrowConvertData {
|
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
#include "duckdb/common/enums/operator_result_type.hpp"
|
|
12
12
|
#include "duckdb/execution/execution_context.hpp"
|
|
13
13
|
#include "duckdb/function/function.hpp"
|
|
14
|
+
#include "duckdb/planner/bind_context.hpp"
|
|
15
|
+
#include "duckdb/planner/logical_operator.hpp"
|
|
14
16
|
#include "duckdb/storage/statistics/node_statistics.hpp"
|
|
15
17
|
|
|
16
18
|
#include <functional>
|
|
@@ -136,6 +138,7 @@ public:
|
|
|
136
138
|
|
|
137
139
|
typedef unique_ptr<FunctionData> (*table_function_bind_t)(ClientContext &context, TableFunctionBindInput &input,
|
|
138
140
|
vector<LogicalType> &return_types, vector<string> &names);
|
|
141
|
+
typedef unique_ptr<TableRef> (*table_function_bind_replace_t)(ClientContext &context, TableFunctionBindInput &input);
|
|
139
142
|
typedef unique_ptr<GlobalTableFunctionState> (*table_function_init_global_t)(ClientContext &context,
|
|
140
143
|
TableFunctionInitInput &input);
|
|
141
144
|
typedef unique_ptr<LocalTableFunctionState> (*table_function_init_local_t)(ExecutionContext &context,
|
|
@@ -185,6 +188,11 @@ public:
|
|
|
185
188
|
//! This function is used for determining the return type of a table producing function and returning bind data
|
|
186
189
|
//! The returned FunctionData object should be constant and should not be changed during execution.
|
|
187
190
|
table_function_bind_t bind;
|
|
191
|
+
//! (Optional) Bind replace function
|
|
192
|
+
//! This function is called before the regular bind function. It allows returning a TableRef will be used to
|
|
193
|
+
//! to generate a logical plan that replaces the LogicalGet of a regularly bound TableFunction. The BindReplace can
|
|
194
|
+
//! also return a nullptr to indicate a regular bind needs to be performed instead.
|
|
195
|
+
table_function_bind_replace_t bind_replace;
|
|
188
196
|
//! (Optional) global init function
|
|
189
197
|
//! Initialize the global operator state of the function.
|
|
190
198
|
//! The global operator state is used to keep track of the progress in the table function and is shared between
|
|
@@ -235,6 +243,8 @@ public:
|
|
|
235
243
|
bool filter_prune;
|
|
236
244
|
//! Additional function info, passed to the bind
|
|
237
245
|
shared_ptr<TableFunctionInfo> function_info;
|
|
246
|
+
|
|
247
|
+
DUCKDB_API bool Equal(const TableFunction &rhs) const;
|
|
238
248
|
};
|
|
239
249
|
|
|
240
250
|
} // namespace duckdb
|
|
@@ -40,6 +40,7 @@ struct ExtractStatementsWrapper {
|
|
|
40
40
|
|
|
41
41
|
struct PendingStatementWrapper {
|
|
42
42
|
unique_ptr<PendingQueryResult> statement;
|
|
43
|
+
bool allow_streaming;
|
|
43
44
|
};
|
|
44
45
|
|
|
45
46
|
struct ArrowResultWrapper {
|
|
@@ -56,6 +57,7 @@ struct AppenderWrapper {
|
|
|
56
57
|
enum class CAPIResultSetType : uint8_t {
|
|
57
58
|
CAPI_RESULT_TYPE_NONE = 0,
|
|
58
59
|
CAPI_RESULT_TYPE_MATERIALIZED,
|
|
60
|
+
CAPI_RESULT_TYPE_STREAMING,
|
|
59
61
|
CAPI_RESULT_TYPE_DEPRECATED
|
|
60
62
|
};
|
|
61
63
|
|
|
@@ -40,6 +40,8 @@ struct ClientConfig {
|
|
|
40
40
|
//! to output anything
|
|
41
41
|
bool emit_profiler_output = true;
|
|
42
42
|
|
|
43
|
+
//! system-wide progress bar disable.
|
|
44
|
+
const char *system_progress_bar_disable_reason = nullptr;
|
|
43
45
|
//! If the progress bar is enabled or not.
|
|
44
46
|
bool enable_progress_bar = false;
|
|
45
47
|
//! If the print of the progress bar is enabled
|
|
@@ -20,7 +20,7 @@ class BufferedFileWriter;
|
|
|
20
20
|
class ClientContext;
|
|
21
21
|
class CatalogSearchPath;
|
|
22
22
|
class FileOpener;
|
|
23
|
-
class
|
|
23
|
+
class HTTPState;
|
|
24
24
|
class QueryProfiler;
|
|
25
25
|
class QueryProfilerHistory;
|
|
26
26
|
class PreparedStatementData;
|
|
@@ -52,8 +52,8 @@ struct ClientData {
|
|
|
52
52
|
//! The file opener of the client context
|
|
53
53
|
unique_ptr<FileOpener> file_opener;
|
|
54
54
|
|
|
55
|
-
//!
|
|
56
|
-
unique_ptr<
|
|
55
|
+
//! HTTP State in this query
|
|
56
|
+
unique_ptr<HTTPState> http_state;
|
|
57
57
|
|
|
58
58
|
//! The file search path
|
|
59
59
|
string file_search_path;
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include "duckdb/planner/operator_extension.hpp"
|
|
31
31
|
|
|
32
32
|
namespace duckdb {
|
|
33
|
+
class BufferPool;
|
|
33
34
|
class CastFunctionSet;
|
|
34
35
|
class ClientContext;
|
|
35
36
|
class ErrorManager;
|
|
@@ -186,6 +187,8 @@ public:
|
|
|
186
187
|
vector<std::unique_ptr<OperatorExtension>> operator_extensions;
|
|
187
188
|
//! Extensions made to storage
|
|
188
189
|
case_insensitive_map_t<std::unique_ptr<StorageExtension>> storage_extensions;
|
|
190
|
+
//! A buffer pool can be shared across multiple databases (if desired).
|
|
191
|
+
shared_ptr<BufferPool> buffer_pool;
|
|
189
192
|
|
|
190
193
|
public:
|
|
191
194
|
DUCKDB_API static DBConfig &GetConfig(ClientContext &context);
|