duckdb 0.9.3-dev2.0 → 0.10.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/.github/workflows/NodeJS.yml +1 -1
- package/README.md +6 -6
- package/binding.gyp +32 -7
- package/package.json +1 -1
- package/src/connection.cpp +6 -6
- package/src/database.cpp +12 -10
- package/src/duckdb/extension/icu/icu-datefunc.cpp +22 -10
- package/src/duckdb/extension/icu/icu-datepart.cpp +42 -22
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +40 -7
- package/src/duckdb/extension/icu/icu-strptime.cpp +14 -8
- package/src/duckdb/extension/icu/icu-table-range.cpp +1 -1
- package/src/duckdb/extension/icu/icu-timezone.cpp +43 -16
- package/src/duckdb/extension/icu/icu_extension.cpp +1 -1
- package/src/duckdb/extension/icu/include/icu-datefunc.hpp +3 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/buffered_json_reader.cpp +78 -62
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +11 -7
- package/src/duckdb/extension/json/include/json_common.hpp +0 -14
- package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
- package/src/duckdb/extension/json/include/json_scan.hpp +19 -5
- package/src/duckdb/extension/json/include/json_serializer.hpp +2 -1
- package/src/duckdb/extension/json/include/json_structure.hpp +12 -10
- package/src/duckdb/extension/json/json_common.cpp +1 -0
- package/src/duckdb/extension/json/json_deserializer.cpp +13 -0
- package/src/duckdb/extension/json/json_extension.cpp +3 -3
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +8 -4
- package/src/duckdb/extension/json/json_functions/json_array_length.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_contains.cpp +3 -3
- package/src/duckdb/extension/json/json_functions/json_create.cpp +53 -8
- package/src/duckdb/extension/json/json_functions/json_extract.cpp +10 -6
- package/src/duckdb/extension/json/json_functions/json_keys.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -3
- package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +210 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +22 -19
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +71 -43
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +105 -8
- package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_valid.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/read_json.cpp +43 -18
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +9 -5
- package/src/duckdb/extension/json/json_scan.cpp +147 -125
- package/src/duckdb/extension/json/json_serializer.cpp +9 -0
- package/src/duckdb/extension/json/serialize_json.cpp +6 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +53 -18
- package/src/duckdb/extension/parquet/column_writer.cpp +29 -6
- package/src/duckdb/extension/parquet/include/column_reader.hpp +0 -1
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +87 -0
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -3
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +16 -3
- package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +10 -0
- package/src/duckdb/extension/parquet/include/parquet_reader.hpp +34 -6
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +3 -2
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -0
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +21 -1
- package/src/duckdb/extension/parquet/parquet_crypto.cpp +370 -0
- package/src/duckdb/extension/parquet/parquet_extension.cpp +254 -24
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +204 -16
- package/src/duckdb/extension/parquet/parquet_reader.cpp +108 -34
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +75 -30
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +15 -8
- package/src/duckdb/extension/parquet/parquet_writer.cpp +62 -10
- package/src/duckdb/extension/parquet/serialize_parquet.cpp +60 -0
- package/src/duckdb/src/catalog/catalog.cpp +23 -25
- package/src/duckdb/src/catalog/catalog_entry/column_dependency_manager.cpp +1 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_dependent_entry.cpp +31 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_entry.cpp +44 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_subject_entry.cpp +31 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +35 -10
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +22 -6
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +110 -33
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +33 -17
- package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +16 -0
- package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +88 -14
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -15
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +20 -20
- package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry.cpp +29 -0
- package/src/duckdb/src/catalog/catalog_set.cpp +358 -343
- package/src/duckdb/src/catalog/catalog_transaction.cpp +4 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +13 -4
- package/src/duckdb/src/catalog/default/default_schemas.cpp +5 -1
- package/src/duckdb/src/catalog/default/default_views.cpp +6 -2
- package/src/duckdb/src/catalog/dependency_catalog_set.cpp +51 -0
- package/src/duckdb/src/catalog/dependency_manager.cpp +510 -114
- package/src/duckdb/src/catalog/duck_catalog.cpp +4 -4
- package/src/duckdb/src/common/adbc/adbc.cpp +73 -53
- package/src/duckdb/src/common/adbc/driver_manager.cpp +1101 -268
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +20 -9
- package/src/duckdb/src/common/bind_helpers.cpp +1 -0
- package/src/duckdb/src/common/box_renderer.cpp +52 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
- package/src/duckdb/src/common/constants.cpp +0 -1
- package/src/duckdb/src/common/enum_util.cpp +522 -107
- package/src/duckdb/src/common/enums/catalog_type.cpp +64 -1
- package/src/duckdb/src/common/enums/compression_type.cpp +14 -0
- package/src/duckdb/src/common/enums/date_part_specifier.cpp +1 -0
- package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
- package/src/duckdb/src/common/enums/file_compression_type.cpp +1 -0
- package/src/duckdb/src/common/enums/join_type.cpp +33 -0
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +5 -3
- package/src/duckdb/src/common/enums/optimizer_type.cpp +9 -1
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +8 -4
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -2
- package/src/duckdb/src/common/error_data.cpp +113 -0
- package/src/duckdb/src/common/exception/binder_exception.cpp +47 -0
- package/src/duckdb/src/common/exception/catalog_exception.cpp +55 -0
- package/src/duckdb/src/common/exception/parser_exception.cpp +19 -0
- package/src/duckdb/src/common/exception.cpp +110 -121
- package/src/duckdb/src/common/exception_format_value.cpp +9 -1
- package/src/duckdb/src/common/extra_type_info.cpp +48 -0
- package/src/duckdb/src/common/file_system.cpp +12 -7
- package/src/duckdb/src/common/gzip_file_system.cpp +18 -18
- package/src/duckdb/src/common/hive_partitioning.cpp +5 -1
- package/src/duckdb/src/common/http_state.cpp +20 -3
- package/src/duckdb/src/common/local_file_system.cpp +214 -15
- package/src/duckdb/src/common/multi_file_reader.cpp +20 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +397 -414
- package/src/duckdb/src/common/operator/convert_to_string.cpp +4 -0
- package/src/duckdb/src/common/operator/string_cast.cpp +5 -0
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +61 -12
- package/src/duckdb/src/common/progress_bar/terminal_progress_bar_display.cpp +13 -4
- package/src/duckdb/src/common/radix_partitioning.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_aggregate.cpp +2 -1
- package/src/duckdb/src/common/row_operations/row_gather.cpp +7 -1
- package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +78 -12
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +222 -61
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +6 -1
- package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +51 -0
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +8 -1
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +6 -0
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +5 -0
- package/src/duckdb/src/common/serializer/serializer.cpp +19 -0
- package/src/duckdb/src/common/sort/comparators.cpp +126 -0
- package/src/duckdb/src/common/sort/partition_state.cpp +17 -17
- package/src/duckdb/src/common/sort/radix_sort.cpp +2 -1
- package/src/duckdb/src/common/sort/sort_state.cpp +10 -5
- package/src/duckdb/src/common/sort/sorted_block.cpp +7 -6
- package/src/duckdb/src/common/string_util.cpp +302 -24
- package/src/duckdb/src/common/tree_renderer.cpp +8 -6
- package/src/duckdb/src/common/types/cast_helpers.cpp +6 -0
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +58 -0
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +8 -1
- package/src/duckdb/src/common/types/data_chunk.cpp +9 -0
- package/src/duckdb/src/common/types/date.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +9 -1
- package/src/duckdb/src/common/types/hugeint.cpp +229 -51
- package/src/duckdb/src/common/types/hyperloglog.cpp +10 -3
- package/src/duckdb/src/common/types/interval.cpp +67 -12
- package/src/duckdb/src/common/types/list_segment.cpp +98 -4
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +11 -1
- package/src/duckdb/src/common/types/row/row_data_collection.cpp +1 -1
- package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +2 -2
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +3 -2
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +63 -3
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +331 -127
- package/src/duckdb/src/common/types/time.cpp +47 -75
- package/src/duckdb/src/common/types/timestamp.cpp +16 -3
- package/src/duckdb/src/common/types/uhugeint.cpp +746 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +6 -2
- package/src/duckdb/src/common/types/value.cpp +183 -27
- package/src/duckdb/src/common/types/vector.cpp +331 -30
- package/src/duckdb/src/common/types/vector_buffer.cpp +29 -1
- package/src/duckdb/src/common/types/vector_cache.cpp +22 -1
- package/src/duckdb/src/common/types.cpp +606 -90
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +21 -1
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +5 -0
- package/src/duckdb/src/common/vector_operations/generators.cpp +2 -2
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +131 -2
- package/src/duckdb/src/common/vector_operations/vector_copy.cpp +26 -4
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +41 -0
- package/src/duckdb/src/common/vector_operations/vector_storage.cpp +7 -0
- package/src/duckdb/src/common/virtual_file_system.cpp +0 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +144 -56
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +2 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +27 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +4 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +25 -5
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +100 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +9 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +83 -52
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +485 -289
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +3 -3
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +34 -37
- package/src/duckdb/src/core_functions/function_list.cpp +30 -1
- package/src/duckdb/src/core_functions/lambda_functions.cpp +416 -0
- package/src/duckdb/src/core_functions/scalar/array/array_functions.cpp +294 -0
- package/src/duckdb/src/core_functions/scalar/array/array_value.cpp +87 -0
- package/src/duckdb/src/core_functions/scalar/blob/create_sort_key.cpp +686 -0
- package/src/duckdb/src/core_functions/scalar/blob/encode.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/current.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +295 -20
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +8 -7
- package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +84 -23
- package/src/duckdb/src/core_functions/scalar/generic/error.cpp +4 -4
- package/src/duckdb/src/core_functions/scalar/generic/least.cpp +7 -8
- package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +17 -6
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +8 -0
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +28 -14
- package/src/duckdb/src/core_functions/scalar/list/list_filter.cpp +49 -0
- package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +230 -0
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +85 -16
- package/src/duckdb/src/core_functions/scalar/list/list_transform.cpp +41 -0
- package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +21 -2
- package/src/duckdb/src/core_functions/scalar/map/map.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/map/map_from_entries.cpp +1 -2
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +24 -4
- package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +6 -0
- package/src/duckdb/src/core_functions/scalar/random/random.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/random/setseed.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +28 -0
- package/src/duckdb/src/core_functions/scalar/string/bar.cpp +9 -4
- package/src/duckdb/src/core_functions/scalar/string/format_bytes.cpp +7 -2
- package/src/duckdb/src/core_functions/scalar/string/hex.cpp +63 -4
- package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/string/parse_path.cpp +348 -0
- package/src/duckdb/src/core_functions/scalar/string/regexp_escape.cpp +22 -0
- package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/struct/struct_insert.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/struct/struct_pack.cpp +1 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +9 -2
- package/src/duckdb/src/execution/column_binding_resolver.cpp +44 -10
- package/src/duckdb/src/execution/expression_executor/execute_between.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor/execute_case.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor.cpp +2 -1
- package/src/duckdb/src/execution/index/art/art.cpp +202 -53
- package/src/duckdb/src/execution/index/art/art_key.cpp +20 -27
- package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +52 -17
- package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -8
- package/src/duckdb/src/execution/index/index_type_set.cpp +32 -0
- package/src/duckdb/src/execution/index/unknown_index.cpp +65 -0
- package/src/duckdb/src/execution/join_hashtable.cpp +151 -174
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -0
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +4 -0
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +2 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +82 -36
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +58 -32
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +35 -19
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +90 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +124 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +97 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +71 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +98 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +105 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +63 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +1091 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +124 -26
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +117 -129
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +46 -22
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +83 -199
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +21 -122
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +18 -17
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +22 -0
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +201 -0
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +221 -0
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +204 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +186 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +532 -0
- package/src/duckdb/src/execution/operator/helper/physical_buffered_collector.cpp +85 -0
- package/src/duckdb/src/execution/operator/helper/physical_create_secret.cpp +21 -0
- package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +1 -1
- package/src/duckdb/src/execution/operator/helper/physical_pragma.cpp +2 -2
- package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +34 -9
- package/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp +10 -0
- package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +1 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +25 -10
- package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +7 -8
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +5 -2
- package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +5 -127
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +221 -61
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +18 -21
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +10 -5
- package/src/duckdb/src/execution/operator/join/physical_left_delim_join.cpp +137 -0
- package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +11 -4
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +19 -4
- package/src/duckdb/src/execution/operator/join/physical_right_delim_join.cpp +121 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +59 -0
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +132 -92
- package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +54 -54
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +4 -0
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +21 -3
- package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -0
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +61 -43
- package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +15 -13
- package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -0
- package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +10 -0
- package/src/duckdb/src/execution/operator/set/physical_cte.cpp +44 -90
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +3 -0
- package/src/duckdb/src/execution/operator/set/physical_union.cpp +8 -4
- package/src/duckdb/src/execution/physical_operator.cpp +3 -1
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +30 -143
- package/src/duckdb/src/execution/physical_plan/plan_copy_database.cpp +12 -0
- package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +11 -4
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +8 -8
- package/src/duckdb/src/execution/physical_plan/plan_create_secret.cpp +11 -0
- package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +9 -8
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +5 -3
- package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +15 -6
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +1 -0
- package/src/duckdb/src/execution/physical_plan/plan_pragma.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +3 -1
- package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +90 -12
- package/src/duckdb/src/execution/physical_plan/plan_window.cpp +67 -22
- package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -3
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +163 -32
- package/src/duckdb/src/execution/reservoir_sample.cpp +112 -32
- package/src/duckdb/src/execution/window_executor.cpp +291 -26
- package/src/duckdb/src/execution/window_segment_tree.cpp +958 -114
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +18 -16
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +11 -4
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +303 -131
- package/src/duckdb/src/function/cast/array_casts.cpp +226 -0
- package/src/duckdb/src/function/cast/bit_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/cast_function_set.cpp +13 -2
- package/src/duckdb/src/function/cast/decimal_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/default_casts.cpp +4 -1
- package/src/duckdb/src/function/cast/list_casts.cpp +151 -6
- package/src/duckdb/src/function/cast/numeric_casts.cpp +4 -0
- package/src/duckdb/src/function/cast/string_cast.cpp +95 -5
- package/src/duckdb/src/function/cast/struct_cast.cpp +53 -19
- package/src/duckdb/src/function/cast/time_casts.cpp +23 -1
- package/src/duckdb/src/function/cast/union/from_struct.cpp +1 -0
- package/src/duckdb/src/function/cast/union_casts.cpp +4 -3
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +8 -4
- package/src/duckdb/src/function/cast_rules.cpp +197 -31
- package/src/duckdb/src/function/compression_config.cpp +4 -0
- package/src/duckdb/src/function/function.cpp +15 -9
- package/src/duckdb/src/function/function_binder.cpp +80 -29
- package/src/duckdb/src/function/function_set.cpp +6 -6
- package/src/duckdb/src/function/pragma/pragma_functions.cpp +10 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +34 -38
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +12 -0
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +10 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +11 -1
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +14 -3
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +4 -0
- package/src/duckdb/src/function/scalar/list/list_select.cpp +176 -0
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +165 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +33 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +53 -6
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +48 -14
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +9 -1
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +19 -4
- package/src/duckdb/src/function/scalar/sequence/nextval.cpp +28 -55
- package/src/duckdb/src/function/scalar/strftime_format.cpp +242 -19
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/concat.cpp +16 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +124 -24
- package/src/duckdb/src/function/scalar/string/regexp.cpp +27 -27
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +64 -15
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +4 -3
- package/src/duckdb/src/function/scalar_function.cpp +8 -7
- package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +12 -0
- package/src/duckdb/src/function/table/arrow.cpp +20 -27
- package/src/duckdb/src/function/table/arrow_conversion.cpp +433 -150
- package/src/duckdb/src/function/table/copy_csv.cpp +62 -62
- package/src/duckdb/src/function/table/range.cpp +6 -3
- package/src/duckdb/src/function/table/read_csv.cpp +107 -759
- package/src/duckdb/src/function/table/read_file.cpp +242 -0
- package/src/duckdb/src/function/table/sniff_csv.cpp +275 -0
- package/src/duckdb/src/function/table/system/duckdb_columns.cpp +15 -3
- package/src/duckdb/src/function/table/system/duckdb_databases.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +9 -13
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +67 -14
- package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +12 -15
- package/src/duckdb/src/function/table/system/duckdb_memory.cpp +63 -0
- package/src/duckdb/src/function/table/system/duckdb_optimizers.cpp +57 -0
- package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +128 -0
- package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +12 -6
- package/src/duckdb/src/function/table/system/duckdb_settings.cpp +0 -1
- package/src/duckdb/src/function/table/system/duckdb_tables.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_types.cpp +6 -0
- package/src/duckdb/src/function/table/system/duckdb_views.cpp +5 -0
- package/src/duckdb/src/function/table/system/pragma_table_info.cpp +166 -64
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -1
- package/src/duckdb/src/function/table/system_functions.cpp +3 -2
- package/src/duckdb/src/function/table/table_scan.cpp +50 -110
- package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -44
- package/src/duckdb/src/function/table_function.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_dependent_entry.hpp +27 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_entry.hpp +66 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_subject_entry.hpp +27 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +25 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +19 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +26 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +15 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +41 -49
- package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +120 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_catalog_set.hpp +32 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +92 -12
- package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/adbc/adbc-init.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1153 -12
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/adbc/driver_manager.h +0 -2
- package/src/duckdb/src/include/duckdb/common/adbc/options.h +64 -0
- package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow.hpp +25 -6
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +30 -0
- package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/constants.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +75 -19
- package/src/duckdb/src/include/duckdb/common/enums/catalog_type.hpp +11 -1
- package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/index_constraint_type.hpp +35 -0
- package/src/duckdb/src/include/duckdb/common/enums/join_type.hpp +16 -3
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +32 -0
- package/src/duckdb/src/include/duckdb/common/enums/on_create_conflict.hpp +26 -0
- package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/pending_execution_result.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +9 -3
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/error_data.hpp +72 -0
- package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +47 -0
- package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +39 -0
- package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +62 -0
- package/src/duckdb/src/include/duckdb/common/exception/list.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +29 -0
- package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +52 -166
- package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +53 -1
- package/src/duckdb/src/include/duckdb/common/helper.hpp +13 -3
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +18 -4
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/limits.hpp +19 -1
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +16 -3
- package/src/duckdb/src/include/duckdb/common/operator/add.hpp +13 -2
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +114 -5
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +0 -4
- package/src/duckdb/src/include/duckdb/common/operator/convert_to_string.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +29 -0
- package/src/duckdb/src/include/duckdb/common/operator/double_cast_operator.hpp +52 -0
- package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +459 -0
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +136 -0
- package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/platform.h +53 -0
- package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +22 -6
- package/src/duckdb/src/include/duckdb/common/radix.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +20 -6
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +43 -4
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +15 -0
- package/src/duckdb/src/include/duckdb/common/sort/comparators.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +12 -2
- package/src/duckdb/src/include/duckdb/common/sort/sort.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/sort/sorted_block.hpp +0 -78
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +23 -1
- package/src/duckdb/src/include/duckdb/common/type_util.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +26 -3
- package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +5 -3
- package/src/duckdb/src/include/duckdb/common/types/hash.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/hugeint.hpp +81 -15
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +57 -29
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +26 -22
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/uhugeint.hpp +216 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +18 -10
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +31 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +18 -2
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +22 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +151 -49
- package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +70 -6
- package/src/duckdb/src/include/duckdb/common/vector_size.hpp +6 -6
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +29 -2
- package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +131 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/array_functions.hpp +69 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +9 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -4
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +42 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/secret_functions.hpp +27 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +56 -2
- package/src/duckdb/src/include/duckdb/core_functions/to_interval.hpp +29 -0
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +11 -13
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +34 -19
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +18 -14
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/index/index_type.hpp +57 -0
- package/src/duckdb/src/include/duckdb/execution/index/index_type_set.hpp +29 -0
- package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +65 -0
- package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +35 -24
- package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +630 -0
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +3 -2
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +103 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +74 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +155 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +163 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +228 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +93 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +197 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +189 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +21 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +30 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +99 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +87 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +80 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +137 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +104 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +0 -4
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_collector.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_create_secret.hpp +38 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_pragma.hpp +4 -7
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +5 -18
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +14 -5
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_join.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_left_delim_join.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_right_delim_join.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_database.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +8 -3
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +14 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +1 -4
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +17 -12
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_union.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +32 -18
- package/src/duckdb/src/include/duckdb/execution/task_error_manager.hpp +57 -0
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +101 -19
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +46 -14
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +6 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +26 -1
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +7 -1
- package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +10 -0
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +16 -4
- package/src/duckdb/src/include/duckdb/function/function.hpp +12 -7
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +15 -12
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -3
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/pragma/pragma_functions.hpp +4 -1
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +21 -1
- package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +22 -0
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +16 -2
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +22 -8
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +6 -0
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +35 -3
- package/src/duckdb/src/include/duckdb/function/table/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/table/range.hpp +12 -0
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +14 -16
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +12 -8
- package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +0 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -3
- package/src/duckdb/src/include/duckdb/main/appender.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +89 -0
- package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +53 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/capi/cast/generic.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +8 -10
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +22 -23
- package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +37 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -7
- package/src/duckdb/src/include/duckdb/main/config.hpp +24 -7
- package/src/duckdb/src/include/duckdb/main/connection.hpp +8 -1
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +17 -26
- package/src/duckdb/src/include/duckdb/main/database.hpp +4 -2
- package/src/duckdb/src/include/duckdb/main/database_manager.hpp +39 -7
- package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +5 -4
- package/src/duckdb/src/include/duckdb/main/error_manager.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +203 -197
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +42 -16
- package/src/duckdb/src/include/duckdb/main/extension_util.hpp +8 -1
- package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -2
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +0 -32
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +13 -12
- package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/relation/setop_relation.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +206 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +211 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +164 -0
- package/src/duckdb/src/include/duckdb/main/settings.hpp +52 -13
- package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +9 -1
- package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +4 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +14 -22
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +20 -0
- package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -5
- package/src/duckdb/src/include/duckdb/parallel/task.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +10 -4
- package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +8 -1
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +11 -4
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +16 -9
- package/src/duckdb/src/include/duckdb/parser/expression/lambdaref_expression.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/expression/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +29 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +47 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/bound_pragma_info.hpp +29 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +45 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +21 -22
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +5 -11
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +23 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +66 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +8 -4
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +1 -3
- package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +5 -22
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/statement/copy_database_statement.hpp +40 -0
- package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +4 -3
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/showref.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +20 -3
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +5 -1
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +24 -27
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +5 -6
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +11 -0
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +65 -22
- package/src/duckdb/src/include/duckdb/planner/filter/struct_filter.hpp +41 -0
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +45 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +43 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +5 -10
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +11 -4
- package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_set_operation_node.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_cte_scan.hpp +29 -0
- package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +9 -7
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_dummytableref.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +9 -5
- package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +23 -6
- package/src/duckdb/src/include/duckdb/storage/buffer/temporary_file_information.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +11 -4
- package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +0 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +7 -7
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +408 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +173 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +283 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +134 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +244 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +103 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +235 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +134 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +301 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_constants.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +252 -0
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +7 -103
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +5 -234
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +7 -107
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +5 -184
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +12 -17
- package/src/duckdb/src/include/duckdb/storage/database_size.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/index.hpp +40 -42
- package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +77 -0
- package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +6 -2
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +12 -6
- package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +17 -17
- package/src/duckdb/src/include/duckdb/storage/statistics/array_stats.hpp +40 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +12 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +49 -24
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +8 -4
- package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +67 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +1 -2
- package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +12 -1
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +16 -12
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +6 -9
- package/src/duckdb/src/include/duckdb/storage/temporary_memory_manager.hpp +119 -0
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +13 -55
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +4 -5
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
- package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -3
- package/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp +4 -4
- package/src/duckdb/src/include/duckdb/transaction/transaction_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +25 -0
- package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +5 -0
- package/src/duckdb/src/include/duckdb.h +571 -143
- package/src/duckdb/src/main/appender.cpp +17 -2
- package/src/duckdb/src/main/attached_database.cpp +24 -12
- package/src/duckdb/src/main/buffered_data/simple_buffered_data.cpp +96 -0
- package/src/duckdb/src/main/capi/appender-c.cpp +42 -3
- package/src/duckdb/src/main/capi/arrow-c.cpp +32 -9
- package/src/duckdb/src/main/capi/datetime-c.cpp +22 -0
- package/src/duckdb/src/main/capi/duckdb-c.cpp +14 -4
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +66 -2
- package/src/duckdb/src/main/capi/helper-c.cpp +76 -2
- package/src/duckdb/src/main/capi/hugeint-c.cpp +23 -0
- package/src/duckdb/src/main/capi/logical_types-c.cpp +27 -3
- package/src/duckdb/src/main/capi/pending-c.cpp +43 -9
- package/src/duckdb/src/main/capi/prepared-c.cpp +38 -2
- package/src/duckdb/src/main/capi/result-c.cpp +54 -3
- package/src/duckdb/src/main/capi/table_function-c.cpp +4 -4
- package/src/duckdb/src/main/capi/value-c.cpp +10 -0
- package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +3 -3
- package/src/duckdb/src/main/client_context.cpp +259 -250
- package/src/duckdb/src/main/client_data.cpp +0 -1
- package/src/duckdb/src/main/client_verify.cpp +26 -8
- package/src/duckdb/src/main/config.cpp +34 -13
- package/src/duckdb/src/main/connection.cpp +27 -6
- package/src/duckdb/src/main/connection_manager.cpp +54 -0
- package/src/duckdb/src/main/database.cpp +44 -39
- package/src/duckdb/src/main/database_manager.cpp +106 -8
- package/src/duckdb/src/main/database_path_and_type.cpp +27 -8
- package/src/duckdb/src/main/db_instance_cache.cpp +4 -4
- package/src/duckdb/src/main/error_manager.cpp +12 -3
- package/src/duckdb/src/main/extension/extension_alias.cpp +2 -2
- package/src/duckdb/src/main/extension/extension_helper.cpp +15 -16
- package/src/duckdb/src/main/extension/extension_install.cpp +33 -24
- package/src/duckdb/src/main/extension/extension_load.cpp +22 -21
- package/src/duckdb/src/main/extension/extension_util.cpp +12 -0
- package/src/duckdb/src/main/materialized_query_result.cpp +1 -1
- package/src/duckdb/src/main/pending_query_result.cpp +25 -8
- package/src/duckdb/src/main/prepared_statement.cpp +5 -5
- package/src/duckdb/src/main/prepared_statement_data.cpp +8 -1
- package/src/duckdb/src/main/query_profiler.cpp +11 -11
- package/src/duckdb/src/main/query_result.cpp +32 -6
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/join_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +38 -32
- package/src/duckdb/src/main/relation/setop_relation.cpp +5 -3
- package/src/duckdb/src/main/relation.cpp +5 -5
- package/src/duckdb/src/main/secret/secret.cpp +135 -0
- package/src/duckdb/src/main/secret/secret_manager.cpp +634 -0
- package/src/duckdb/src/main/secret/secret_storage.cpp +233 -0
- package/src/duckdb/src/main/settings/settings.cpp +133 -38
- package/src/duckdb/src/main/stream_query_result.cpp +53 -14
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +1 -1
- package/src/duckdb/src/optimizer/deliminator.cpp +136 -14
- package/src/duckdb/src/optimizer/filter_combiner.cpp +72 -26
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +3 -0
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +2 -1
- package/src/duckdb/src/optimizer/join_order/cost_model.cpp +0 -1
- package/src/duckdb/src/optimizer/join_order/join_node.cpp +4 -0
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -6
- package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +20 -0
- package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +71 -40
- package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +12 -3
- package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +77 -3
- package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +7 -7
- package/src/duckdb/src/optimizer/pushdown/pushdown_semi_anti_join.cpp +56 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +21 -0
- package/src/duckdb/src/optimizer/rule/date_part_simplification.cpp +2 -2
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +15 -10
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +70 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +17 -5
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -0
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +22 -9
- package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +28 -4
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +12 -7
- package/src/duckdb/src/parallel/event.cpp +2 -2
- package/src/duckdb/src/parallel/executor.cpp +114 -81
- package/src/duckdb/src/parallel/executor_task.cpp +2 -4
- package/src/duckdb/src/parallel/meta_pipeline.cpp +28 -29
- package/src/duckdb/src/parallel/pipeline.cpp +41 -41
- package/src/duckdb/src/parallel/pipeline_event.cpp +2 -4
- package/src/duckdb/src/parallel/pipeline_executor.cpp +13 -75
- package/src/duckdb/src/parallel/task_scheduler.cpp +22 -13
- package/src/duckdb/src/parser/column_definition.cpp +22 -4
- package/src/duckdb/src/parser/column_list.cpp +2 -1
- package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +51 -0
- package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +59 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +9 -1
- package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +40 -0
- package/src/duckdb/src/parser/parsed_data/attach_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +19 -0
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +11 -9
- package/src/duckdb/src/parser/parsed_data/create_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/create_secret_info.cpp +22 -0
- package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +17 -0
- package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +19 -0
- package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +13 -9
- package/src/duckdb/src/parser/parsed_data/drop_info.cpp +8 -9
- package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +16 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +3 -1
- package/src/duckdb/src/parser/parser.cpp +14 -8
- package/src/duckdb/src/parser/query_error_context.cpp +12 -13
- package/src/duckdb/src/parser/query_node/select_node.cpp +5 -1
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +8 -13
- package/src/duckdb/src/parser/statement/copy_database_statement.cpp +41 -0
- package/src/duckdb/src/parser/statement/set_statement.cpp +5 -1
- package/src/duckdb/src/parser/tableref/basetableref.cpp +1 -0
- package/src/duckdb/src/parser/tableref/showref.cpp +47 -0
- package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +6 -2
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +30 -15
- package/src/duckdb/src/parser/transform/expression/transform_case.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +3 -2
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +34 -4
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +26 -12
- package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +34 -5
- package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +3 -1
- package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +3 -1
- package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +3 -3
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -3
- package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +13 -13
- package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +2 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +32 -1
- package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +1 -0
- package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +108 -0
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +45 -37
- package/src/duckdb/src/parser/transform/statement/transform_copy_database.cpp +29 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +5 -14
- package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +0 -1
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +25 -6
- package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -1
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +6 -14
- package/src/duckdb/src/parser/transform/statement/transform_secret.cpp +103 -0
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -1
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +4 -8
- package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -5
- package/src/duckdb/src/parser/transform/statement/transform_show.cpp +14 -41
- package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +13 -6
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -1
- package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +1 -1
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +1 -2
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +6 -5
- package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +1 -1
- package/src/duckdb/src/parser/transformer.cpp +22 -0
- package/src/duckdb/src/planner/bind_context.cpp +23 -14
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +15 -14
- package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +20 -9
- package/src/duckdb/src/planner/binder/expression/bind_case_expression.cpp +12 -7
- package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +4 -4
- package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +3 -3
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +279 -195
- package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +103 -17
- package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +3 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +91 -68
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +116 -84
- package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +85 -15
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +68 -31
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +7 -7
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +11 -7
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +42 -19
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +38 -16
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +16 -7
- package/src/duckdb/src/planner/binder/query_node/bind_recursive_cte_node.cpp +3 -0
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +83 -12
- package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -37
- package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +3 -4
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +3 -3
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +7 -5
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -0
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +48 -50
- package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +187 -0
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +38 -22
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +8 -15
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +6 -1
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +2 -2
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -10
- package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +37 -13
- package/src/duckdb/src/planner/binder/statement/bind_set.cpp +8 -2
- package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +2 -0
- package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +29 -14
- package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +16 -6
- package/src/duckdb/src/planner/binder/tableref/bind_expressionlistref.cpp +11 -4
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_named_parameters.cpp +2 -2
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +18 -17
- package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +85 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -17
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -9
- package/src/duckdb/src/planner/binder.cpp +31 -26
- package/src/duckdb/src/planner/bound_result_modifier.cpp +24 -0
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +10 -1
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +20 -4
- package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +9 -10
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +65 -3
- package/src/duckdb/src/planner/expression.cpp +15 -5
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +5 -6
- package/src/duckdb/src/planner/expression_binder/check_binder.cpp +9 -8
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +10 -7
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +9 -4
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +0 -25
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -11
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -2
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +15 -8
- package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -4
- package/src/duckdb/src/planner/expression_binder.cpp +51 -25
- package/src/duckdb/src/planner/expression_iterator.cpp +2 -1
- package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -0
- package/src/duckdb/src/planner/filter/struct_filter.cpp +33 -0
- package/src/duckdb/src/planner/joinside.cpp +1 -1
- package/src/duckdb/src/planner/logical_operator.cpp +2 -1
- package/src/duckdb/src/planner/operator/logical_copy_database.cpp +32 -0
- package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +13 -4
- package/src/duckdb/src/planner/operator/logical_create_table.cpp +2 -0
- package/src/duckdb/src/planner/operator/logical_get.cpp +4 -1
- package/src/duckdb/src/planner/operator/logical_join.cpp +8 -0
- package/src/duckdb/src/planner/planner.cpp +24 -23
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -19
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +99 -6
- package/src/duckdb/src/planner/subquery/rewrite_cte_scan.cpp +36 -0
- package/src/duckdb/src/planner/table_binding.cpp +14 -12
- package/src/duckdb/src/storage/buffer/block_handle.cpp +12 -10
- package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -1
- package/src/duckdb/src/storage/buffer/buffer_pool.cpp +25 -9
- package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +4 -3
- package/src/duckdb/src/storage/buffer_manager.cpp +14 -3
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +0 -8
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +15 -7
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint_manager.cpp +94 -41
- package/src/duckdb/src/storage/compression/alp/alp.cpp +57 -0
- package/src/duckdb/src/storage/compression/alp/alp_constants.cpp +13 -0
- package/src/duckdb/src/storage/compression/alprd.cpp +57 -0
- package/src/duckdb/src/storage/compression/bitpacking.cpp +86 -55
- package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +41 -41
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -3
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +2 -0
- package/src/duckdb/src/storage/compression/fsst.cpp +4 -4
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +3 -0
- package/src/duckdb/src/storage/compression/rle.cpp +6 -4
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +7 -7
- package/src/duckdb/src/storage/compression/uncompressed.cpp +1 -0
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +32 -96
- package/src/duckdb/src/storage/index.cpp +23 -11
- package/src/duckdb/src/storage/local_storage.cpp +36 -19
- package/src/duckdb/src/storage/metadata/metadata_manager.cpp +2 -2
- package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +9 -4
- package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_extra_drop_info.cpp +42 -0
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -17
- package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +84 -77
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +63 -4
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +23 -0
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +2 -0
- package/src/duckdb/src/storage/serialization/serialize_storage.cpp +35 -0
- package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +19 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +22 -1
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +50 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -7
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +57 -28
- package/src/duckdb/src/storage/statistics/array_stats.cpp +131 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +62 -4
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +1 -0
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +3 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +21 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +5 -0
- package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/storage_manager.cpp +47 -22
- package/src/duckdb/src/storage/table/array_column_data.cpp +241 -0
- package/src/duckdb/src/storage/table/chunk_info.cpp +2 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -1
- package/src/duckdb/src/storage/table/column_data.cpp +41 -18
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +12 -3
- package/src/duckdb/src/storage/table/column_segment.cpp +40 -6
- package/src/duckdb/src/storage/table/list_column_data.cpp +18 -15
- package/src/duckdb/src/storage/table/row_group.cpp +73 -21
- package/src/duckdb/src/storage/table/row_group_collection.cpp +395 -20
- package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -1
- package/src/duckdb/src/storage/table/scan_state.cpp +4 -0
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -5
- package/src/duckdb/src/storage/table/struct_column_data.cpp +30 -10
- package/src/duckdb/src/storage/table/table_statistics.cpp +7 -1
- package/src/duckdb/src/storage/table/update_segment.cpp +18 -2
- package/src/duckdb/src/storage/table_index_list.cpp +73 -7
- package/src/duckdb/src/storage/temporary_memory_manager.cpp +148 -0
- package/src/duckdb/src/storage/wal_replay.cpp +329 -152
- package/src/duckdb/src/storage/write_ahead_log.cpp +157 -137
- package/src/duckdb/src/transaction/cleanup_state.cpp +3 -2
- package/src/duckdb/src/transaction/commit_state.cpp +89 -63
- package/src/duckdb/src/transaction/duck_transaction.cpp +5 -3
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +26 -54
- package/src/duckdb/src/transaction/meta_transaction.cpp +37 -23
- package/src/duckdb/src/transaction/transaction_context.cpp +23 -4
- package/src/duckdb/src/transaction/undo_buffer.cpp +16 -2
- package/src/duckdb/src/verification/fetch_row_verifier.cpp +13 -0
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +5 -7
- package/src/duckdb/src/verification/statement_verifier.cpp +6 -5
- package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +100 -29
- package/src/duckdb/third_party/fmt/include/fmt/format-inl.h +1 -1
- package/src/duckdb/third_party/fmt/include/fmt/format.h +4 -2
- package/src/duckdb/third_party/fmt/include/fmt/printf.h +5 -5
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +4 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +82 -21
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +551 -1004
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +17 -3
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24861 -23465
- package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +420 -389
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aes.h +640 -1
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aes_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aria.h +358 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aria_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia.h +316 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm.h +1 -1
- package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/chacha20.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/chachapoly.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/cipher.h +124 -124
- package/src/duckdb/third_party/mbedtls/include/mbedtls/cmac.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/entropy.h +293 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm.h +383 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +9 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/nist_kw.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/timing.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +35 -6
- package/src/duckdb/third_party/mbedtls/library/aes.cpp +2171 -0
- package/src/duckdb/third_party/mbedtls/library/aesni.h +1 -0
- package/src/duckdb/third_party/mbedtls/library/aria.cpp +1058 -0
- package/src/duckdb/third_party/mbedtls/library/camellia.cpp +1087 -0
- package/src/duckdb/third_party/mbedtls/library/cipher.cpp +1633 -0
- package/src/duckdb/third_party/mbedtls/library/cipher_wrap.cpp +2270 -0
- package/src/duckdb/third_party/mbedtls/library/cipher_wrap.h +146 -0
- package/src/duckdb/third_party/mbedtls/library/entropy.cpp +701 -0
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +237 -0
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.h +76 -0
- package/src/duckdb/third_party/mbedtls/library/gcm.cpp +1161 -0
- package/src/duckdb/third_party/mbedtls/library/padlock.h +1 -0
- package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +132 -24
- package/src/duckdb/third_party/pcg/pcg_uint128.hpp +1 -1
- package/src/duckdb/third_party/skiplist/HeadNode.h +934 -0
- package/src/duckdb/third_party/skiplist/IntegrityEnums.h +62 -0
- package/src/duckdb/third_party/skiplist/Node.h +641 -0
- package/src/duckdb/third_party/skiplist/NodeRefs.h +251 -0
- package/src/duckdb/third_party/skiplist/RollingMedian.h +202 -0
- package/src/duckdb/third_party/skiplist/SkipList.cpp +40 -0
- package/src/duckdb/third_party/skiplist/SkipList.h +549 -0
- package/src/duckdb/third_party/thrift/thrift/thrift-config.h +1 -1
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_catalog.cpp +3 -1
- package/src/duckdb/ub_src_catalog_catalog_entry_dependency.cpp +6 -0
- package/src/duckdb/ub_src_common.cpp +1 -1
- package/src/duckdb/ub_src_common_exception.cpp +6 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -2
- package/src/duckdb/ub_src_core_functions.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_array.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_list.cpp +7 -3
- package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_string.cpp +4 -0
- package/src/duckdb/ub_src_execution_index.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_buffer_manager.cpp +6 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_scanner.cpp +10 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_state_machine.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_table_function.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_helper.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_join.cpp +4 -2
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +4 -2
- package/src/duckdb/ub_src_function_cast.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_list.cpp +4 -0
- package/src/duckdb/ub_src_function_table.cpp +4 -4
- package/src/duckdb/ub_src_function_table_system.cpp +6 -0
- package/src/duckdb/ub_src_main.cpp +2 -0
- package/src/duckdb/ub_src_main_buffered_data.cpp +2 -0
- package/src/duckdb/ub_src_main_secret.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
- package/src/duckdb/ub_src_parser_expression.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +6 -0
- package/src/duckdb/ub_src_parser_statement.cpp +2 -2
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +6 -0
- package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -2
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_filter.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_planner_subquery.cpp +2 -0
- package/src/duckdb/ub_src_storage.cpp +2 -0
- package/src/duckdb/ub_src_storage_compression.cpp +2 -0
- package/src/duckdb/ub_src_storage_compression_alp.cpp +4 -0
- package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
- package/src/duckdb/ub_src_storage_table.cpp +2 -0
- package/src/duckdb_node.hpp +1 -1
- package/src/statement.cpp +18 -8
- package/src/utils.cpp +1 -15
- package/test/affected.test.ts +2 -2
- package/test/columns.test.ts +4 -3
- package/test/config.test.ts +30 -0
- package/test/each.test.ts +2 -2
- package/test/exec.test.ts +2 -2
- package/test/named_columns.test.ts +2 -2
- package/test/null_error.test.ts +2 -2
- package/test/prepare.test.ts +28 -26
- package/test/serialization.test.ts +7 -6
- package/test/test_all_types.test.ts +9 -4
- package/test/typescript_decls.test.ts +6 -6
- package/test/udf.test.ts +23 -23
- package/test/unicode.test.ts +2 -2
@@ -1,17 +1,21 @@
|
|
1
1
|
#include "duckdb/execution/expression_executor.hpp"
|
2
2
|
#include "duckdb/core_functions/aggregate/holistic_functions.hpp"
|
3
|
+
#include "duckdb/execution/merge_sort_tree.hpp"
|
3
4
|
#include "duckdb/core_functions/aggregate/quantile_enum.hpp"
|
4
5
|
#include "duckdb/planner/expression.hpp"
|
5
6
|
#include "duckdb/common/operator/cast_operators.hpp"
|
6
7
|
#include "duckdb/common/operator/abs.hpp"
|
7
8
|
#include "duckdb/common/operator/multiply.hpp"
|
8
|
-
|
9
|
+
|
9
10
|
#include "duckdb/common/types/timestamp.hpp"
|
10
11
|
#include "duckdb/common/queue.hpp"
|
11
12
|
#include "duckdb/common/serializer/serializer.hpp"
|
12
13
|
#include "duckdb/common/serializer/deserializer.hpp"
|
13
14
|
|
15
|
+
#include "SkipList.h"
|
16
|
+
|
14
17
|
#include <algorithm>
|
18
|
+
#include <numeric>
|
15
19
|
#include <stdlib.h>
|
16
20
|
#include <utility>
|
17
21
|
|
@@ -37,41 +41,38 @@ inline interval_t operator-(const interval_t &lhs, const interval_t &rhs) {
|
|
37
41
|
return Interval::FromMicro(Interval::GetMicro(lhs) - Interval::GetMicro(rhs));
|
38
42
|
}
|
39
43
|
|
40
|
-
|
41
|
-
|
42
|
-
using SaveType = SAVE_TYPE;
|
43
|
-
|
44
|
-
// Regular aggregation
|
45
|
-
vector<SaveType> v;
|
46
|
-
|
47
|
-
// Windowed Quantile indirection
|
48
|
-
vector<idx_t> w;
|
49
|
-
idx_t pos;
|
50
|
-
|
51
|
-
// Windowed MAD indirection
|
52
|
-
vector<idx_t> m;
|
53
|
-
|
54
|
-
QuantileState() : pos(0) {
|
44
|
+
struct FrameSet {
|
45
|
+
inline explicit FrameSet(const SubFrames &frames_p) : frames(frames_p) {
|
55
46
|
}
|
56
47
|
|
57
|
-
|
48
|
+
inline idx_t Size() const {
|
49
|
+
idx_t result = 0;
|
50
|
+
for (const auto &frame : frames) {
|
51
|
+
result += frame.end - frame.start;
|
52
|
+
}
|
53
|
+
|
54
|
+
return result;
|
58
55
|
}
|
59
56
|
|
60
|
-
inline
|
61
|
-
|
62
|
-
|
63
|
-
|
57
|
+
inline bool Contains(idx_t i) const {
|
58
|
+
for (idx_t f = 0; f < frames.size(); ++f) {
|
59
|
+
const auto &frame = frames[f];
|
60
|
+
if (frame.start <= i && i < frame.end) {
|
61
|
+
return true;
|
62
|
+
}
|
64
63
|
}
|
64
|
+
return false;
|
65
65
|
}
|
66
|
+
const SubFrames &frames;
|
66
67
|
};
|
67
68
|
|
68
69
|
struct QuantileIncluded {
|
69
|
-
inline explicit QuantileIncluded(const ValidityMask &fmask_p, const ValidityMask &dmask_p
|
70
|
-
: fmask(fmask_p), dmask(dmask_p)
|
70
|
+
inline explicit QuantileIncluded(const ValidityMask &fmask_p, const ValidityMask &dmask_p)
|
71
|
+
: fmask(fmask_p), dmask(dmask_p) {
|
71
72
|
}
|
72
73
|
|
73
74
|
inline bool operator()(const idx_t &idx) const {
|
74
|
-
return fmask.RowIsValid(idx) && dmask.RowIsValid(idx
|
75
|
+
return fmask.RowIsValid(idx) && dmask.RowIsValid(idx);
|
75
76
|
}
|
76
77
|
|
77
78
|
inline bool AllValid() const {
|
@@ -80,86 +81,65 @@ struct QuantileIncluded {
|
|
80
81
|
|
81
82
|
const ValidityMask &fmask;
|
82
83
|
const ValidityMask &dmask;
|
83
|
-
const idx_t bias;
|
84
84
|
};
|
85
85
|
|
86
|
-
|
87
|
-
idx_t
|
86
|
+
struct QuantileReuseUpdater {
|
87
|
+
idx_t *index;
|
88
|
+
idx_t j;
|
88
89
|
|
89
|
-
|
90
|
-
|
91
|
-
auto idx = index[p];
|
90
|
+
inline QuantileReuseUpdater(idx_t *index, idx_t j) : index(index), j(j) {
|
91
|
+
}
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
index[j] = idx;
|
96
|
-
}
|
93
|
+
inline void Neither(idx_t begin, idx_t end) {
|
94
|
+
}
|
97
95
|
|
98
|
-
|
99
|
-
if (frame.start <= idx && idx < frame.end) {
|
100
|
-
++j;
|
101
|
-
}
|
96
|
+
inline void Left(idx_t begin, idx_t end) {
|
102
97
|
}
|
103
98
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
for (auto f = frame.start; f < prev.start; ++f, ++j) {
|
108
|
-
index[j] = f;
|
109
|
-
}
|
110
|
-
for (auto f = prev.end; f < frame.end; ++f, ++j) {
|
111
|
-
index[j] = f;
|
112
|
-
}
|
113
|
-
} else {
|
114
|
-
// No overlap: overwrite with new values
|
115
|
-
for (auto f = frame.start; f < frame.end; ++f, ++j) {
|
116
|
-
index[j] = f;
|
99
|
+
inline void Right(idx_t begin, idx_t end) {
|
100
|
+
for (; begin < end; ++begin) {
|
101
|
+
index[j++] = begin;
|
117
102
|
}
|
118
103
|
}
|
119
|
-
}
|
120
104
|
|
121
|
-
|
122
|
-
|
105
|
+
inline void Both(idx_t begin, idx_t end) {
|
106
|
+
}
|
107
|
+
};
|
123
108
|
|
109
|
+
void ReuseIndexes(idx_t *index, const SubFrames &currs, const SubFrames &prevs) {
|
110
|
+
|
111
|
+
// Copy overlapping indices by scanning the previous set and copying down into holes.
|
112
|
+
// We copy instead of leaving gaps in case there are fewer values in the current frame.
|
113
|
+
FrameSet prev_set(prevs);
|
114
|
+
FrameSet curr_set(currs);
|
115
|
+
const auto prev_count = prev_set.Size();
|
124
116
|
idx_t j = 0;
|
125
|
-
for (idx_t p = 0; p <
|
117
|
+
for (idx_t p = 0; p < prev_count; ++p) {
|
126
118
|
auto idx = index[p];
|
119
|
+
|
120
|
+
// Shift down into any hole
|
127
121
|
if (j != p) {
|
128
|
-
|
122
|
+
index[j] = idx;
|
129
123
|
}
|
130
124
|
|
131
|
-
|
125
|
+
// Skip overlapping values
|
126
|
+
if (curr_set.Contains(idx)) {
|
132
127
|
++j;
|
133
128
|
}
|
134
129
|
}
|
135
|
-
index[j] = frame.end - 1;
|
136
130
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
const auto ij = index[j];
|
149
|
-
if (!validity(ij)) {
|
150
|
-
return k1 < j ? 1 : 0;
|
151
|
-
}
|
152
|
-
|
153
|
-
auto curr = fdata[ij];
|
154
|
-
if (k1 < j) {
|
155
|
-
auto hi = fdata[index[k0]];
|
156
|
-
return hi < curr ? 1 : 0;
|
157
|
-
} else if (j < k0) {
|
158
|
-
auto lo = fdata[index[k1]];
|
159
|
-
return curr < lo ? -1 : 0;
|
131
|
+
// Insert new indices
|
132
|
+
if (j > 0) {
|
133
|
+
QuantileReuseUpdater updater(index, j);
|
134
|
+
AggregateExecutor::IntersectFrames(prevs, currs, updater);
|
135
|
+
} else {
|
136
|
+
// No overlap: overwrite with new values
|
137
|
+
for (const auto &curr : currs) {
|
138
|
+
for (auto idx = curr.start; idx < curr.end; ++idx) {
|
139
|
+
index[j++] = idx;
|
140
|
+
}
|
141
|
+
}
|
160
142
|
}
|
161
|
-
|
162
|
-
return 0;
|
163
143
|
}
|
164
144
|
|
165
145
|
template <class INPUT_TYPE>
|
@@ -325,6 +305,18 @@ struct Interpolator {
|
|
325
305
|
: desc(desc_p), RN((double)(n_p - 1) * q.dbl), FRN(floor(RN)), CRN(ceil(RN)), begin(0), end(n_p) {
|
326
306
|
}
|
327
307
|
|
308
|
+
template <class INPUT_TYPE, class TARGET_TYPE, typename ACCESSOR = QuantileDirect<INPUT_TYPE>>
|
309
|
+
TARGET_TYPE Interpolate(INPUT_TYPE lidx, INPUT_TYPE hidx, Vector &result, const ACCESSOR &accessor) const {
|
310
|
+
using ACCESS_TYPE = typename ACCESSOR::RESULT_TYPE;
|
311
|
+
if (lidx == hidx) {
|
312
|
+
return CastInterpolation::Cast<ACCESS_TYPE, TARGET_TYPE>(accessor(lidx), result);
|
313
|
+
} else {
|
314
|
+
auto lo = CastInterpolation::Cast<ACCESS_TYPE, TARGET_TYPE>(accessor(lidx), result);
|
315
|
+
auto hi = CastInterpolation::Cast<ACCESS_TYPE, TARGET_TYPE>(accessor(hidx), result);
|
316
|
+
return CastInterpolation::Interpolate<TARGET_TYPE>(lo, RN - FRN, hi);
|
317
|
+
}
|
318
|
+
}
|
319
|
+
|
328
320
|
template <class INPUT_TYPE, class TARGET_TYPE, typename ACCESSOR = QuantileDirect<INPUT_TYPE>>
|
329
321
|
TARGET_TYPE Operation(INPUT_TYPE *v_t, Vector &result, const ACCESSOR &accessor = ACCESSOR()) const {
|
330
322
|
using ACCESS_TYPE = typename ACCESSOR::RESULT_TYPE;
|
@@ -341,14 +333,13 @@ struct Interpolator {
|
|
341
333
|
}
|
342
334
|
}
|
343
335
|
|
344
|
-
template <class INPUT_TYPE, class TARGET_TYPE
|
345
|
-
TARGET_TYPE
|
346
|
-
using ACCESS_TYPE = typename ACCESSOR::RESULT_TYPE;
|
336
|
+
template <class INPUT_TYPE, class TARGET_TYPE>
|
337
|
+
inline TARGET_TYPE Extract(const INPUT_TYPE **dest, Vector &result) const {
|
347
338
|
if (CRN == FRN) {
|
348
|
-
return CastInterpolation::Cast<
|
339
|
+
return CastInterpolation::Cast<INPUT_TYPE, TARGET_TYPE>(*dest[0], result);
|
349
340
|
} else {
|
350
|
-
auto lo = CastInterpolation::Cast<
|
351
|
-
auto hi = CastInterpolation::Cast<
|
341
|
+
auto lo = CastInterpolation::Cast<INPUT_TYPE, TARGET_TYPE>(*dest[0], result);
|
342
|
+
auto hi = CastInterpolation::Cast<INPUT_TYPE, TARGET_TYPE>(*dest[1], result);
|
352
343
|
return CastInterpolation::Interpolate<TARGET_TYPE>(lo, RN - FRN, hi);
|
353
344
|
}
|
354
345
|
}
|
@@ -390,6 +381,12 @@ struct Interpolator<true> {
|
|
390
381
|
: desc(desc_p), FRN(Index(q, n_p)), CRN(FRN), begin(0), end(n_p) {
|
391
382
|
}
|
392
383
|
|
384
|
+
template <class INPUT_TYPE, class TARGET_TYPE, typename ACCESSOR = QuantileDirect<INPUT_TYPE>>
|
385
|
+
TARGET_TYPE Interpolate(INPUT_TYPE lidx, INPUT_TYPE hidx, Vector &result, const ACCESSOR &accessor) const {
|
386
|
+
using ACCESS_TYPE = typename ACCESSOR::RESULT_TYPE;
|
387
|
+
return CastInterpolation::Cast<ACCESS_TYPE, TARGET_TYPE>(accessor(lidx), result);
|
388
|
+
}
|
389
|
+
|
393
390
|
template <class INPUT_TYPE, class TARGET_TYPE, typename ACCESSOR = QuantileDirect<INPUT_TYPE>>
|
394
391
|
TARGET_TYPE Operation(INPUT_TYPE *v_t, Vector &result, const ACCESSOR &accessor = ACCESSOR()) const {
|
395
392
|
using ACCESS_TYPE = typename ACCESSOR::RESULT_TYPE;
|
@@ -398,10 +395,9 @@ struct Interpolator<true> {
|
|
398
395
|
return CastInterpolation::Cast<ACCESS_TYPE, TARGET_TYPE>(accessor(v_t[FRN]), result);
|
399
396
|
}
|
400
397
|
|
401
|
-
template <class INPUT_TYPE, class TARGET_TYPE
|
402
|
-
TARGET_TYPE
|
403
|
-
|
404
|
-
return CastInterpolation::Cast<ACCESS_TYPE, TARGET_TYPE>(accessor(v_t[FRN]), result);
|
398
|
+
template <class INPUT_TYPE, class TARGET_TYPE>
|
399
|
+
TARGET_TYPE Extract(const INPUT_TYPE **dest, Vector &result) const {
|
400
|
+
return CastInterpolation::Cast<INPUT_TYPE, TARGET_TYPE>(*dest[0], result);
|
405
401
|
}
|
406
402
|
|
407
403
|
const bool desc;
|
@@ -570,6 +566,254 @@ struct QuantileBindData : public FunctionData {
|
|
570
566
|
bool desc;
|
571
567
|
};
|
572
568
|
|
569
|
+
template <typename IDX>
|
570
|
+
struct QuantileSortTree : public MergeSortTree<IDX, IDX> {
|
571
|
+
|
572
|
+
using BaseTree = MergeSortTree<IDX, IDX>;
|
573
|
+
using Elements = typename BaseTree::Elements;
|
574
|
+
|
575
|
+
explicit QuantileSortTree(Elements &&lowest_level) : BaseTree(std::move(lowest_level)) {
|
576
|
+
}
|
577
|
+
|
578
|
+
template <class INPUT_TYPE>
|
579
|
+
static unique_ptr<QuantileSortTree> WindowInit(const INPUT_TYPE *data, AggregateInputData &aggr_input_data,
|
580
|
+
const ValidityMask &data_mask, const ValidityMask &filter_mask,
|
581
|
+
idx_t count) {
|
582
|
+
// Build the indirection array
|
583
|
+
using ElementType = typename QuantileSortTree::ElementType;
|
584
|
+
vector<ElementType> sorted(count);
|
585
|
+
if (filter_mask.AllValid() && data_mask.AllValid()) {
|
586
|
+
std::iota(sorted.begin(), sorted.end(), 0);
|
587
|
+
} else {
|
588
|
+
size_t valid = 0;
|
589
|
+
QuantileIncluded included(filter_mask, data_mask);
|
590
|
+
for (ElementType i = 0; i < count; ++i) {
|
591
|
+
if (included(i)) {
|
592
|
+
sorted[valid++] = i;
|
593
|
+
}
|
594
|
+
}
|
595
|
+
sorted.resize(valid);
|
596
|
+
}
|
597
|
+
|
598
|
+
// Sort it
|
599
|
+
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
600
|
+
using Accessor = QuantileIndirect<INPUT_TYPE>;
|
601
|
+
Accessor indirect(data);
|
602
|
+
QuantileCompare<Accessor> cmp(indirect, bind_data.desc);
|
603
|
+
std::sort(sorted.begin(), sorted.end(), cmp);
|
604
|
+
|
605
|
+
return make_uniq<QuantileSortTree>(std::move(sorted));
|
606
|
+
}
|
607
|
+
|
608
|
+
inline IDX SelectNth(const SubFrames &frames, size_t n) const {
|
609
|
+
return BaseTree::NthElement(BaseTree::SelectNth(frames, n));
|
610
|
+
}
|
611
|
+
|
612
|
+
template <typename INPUT_TYPE, typename RESULT_TYPE, bool DISCRETE>
|
613
|
+
RESULT_TYPE WindowScalar(const INPUT_TYPE *data, const SubFrames &frames, const idx_t n, Vector &result,
|
614
|
+
const QuantileValue &q) const {
|
615
|
+
D_ASSERT(n > 0);
|
616
|
+
|
617
|
+
// Find the interpolated indicies within the frame
|
618
|
+
Interpolator<DISCRETE> interp(q, n, false);
|
619
|
+
const auto lo_data = SelectNth(frames, interp.FRN);
|
620
|
+
auto hi_data = lo_data;
|
621
|
+
if (interp.CRN != interp.FRN) {
|
622
|
+
hi_data = SelectNth(frames, interp.CRN);
|
623
|
+
}
|
624
|
+
|
625
|
+
// Interpolate indirectly
|
626
|
+
using ID = QuantileIndirect<INPUT_TYPE>;
|
627
|
+
ID indirect(data);
|
628
|
+
return interp.template Interpolate<idx_t, RESULT_TYPE, ID>(lo_data, hi_data, result, indirect);
|
629
|
+
}
|
630
|
+
|
631
|
+
template <typename INPUT_TYPE, typename CHILD_TYPE, bool DISCRETE>
|
632
|
+
void WindowList(const INPUT_TYPE *data, const SubFrames &frames, const idx_t n, Vector &list, const idx_t lidx,
|
633
|
+
const QuantileBindData &bind_data) const {
|
634
|
+
D_ASSERT(n > 0);
|
635
|
+
|
636
|
+
// Result is a constant LIST<CHILD_TYPE> with a fixed length
|
637
|
+
auto ldata = FlatVector::GetData<list_entry_t>(list);
|
638
|
+
auto &lentry = ldata[lidx];
|
639
|
+
lentry.offset = ListVector::GetListSize(list);
|
640
|
+
lentry.length = bind_data.quantiles.size();
|
641
|
+
|
642
|
+
ListVector::Reserve(list, lentry.offset + lentry.length);
|
643
|
+
ListVector::SetListSize(list, lentry.offset + lentry.length);
|
644
|
+
auto &result = ListVector::GetEntry(list);
|
645
|
+
auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
|
646
|
+
|
647
|
+
using ID = QuantileIndirect<INPUT_TYPE>;
|
648
|
+
ID indirect(data);
|
649
|
+
for (const auto &q : bind_data.order) {
|
650
|
+
const auto &quantile = bind_data.quantiles[q];
|
651
|
+
Interpolator<DISCRETE> interp(quantile, n, false);
|
652
|
+
|
653
|
+
const auto lo_data = SelectNth(frames, interp.FRN);
|
654
|
+
auto hi_data = lo_data;
|
655
|
+
if (interp.CRN != interp.FRN) {
|
656
|
+
hi_data = SelectNth(frames, interp.CRN);
|
657
|
+
}
|
658
|
+
|
659
|
+
// Interpolate indirectly
|
660
|
+
rdata[lentry.offset + q] =
|
661
|
+
interp.template Interpolate<idx_t, CHILD_TYPE, ID>(lo_data, hi_data, result, indirect);
|
662
|
+
}
|
663
|
+
}
|
664
|
+
};
|
665
|
+
|
666
|
+
template <class T>
|
667
|
+
struct PointerLess {
|
668
|
+
inline bool operator()(const T &lhi, const T &rhi) const {
|
669
|
+
return *lhi < *rhi;
|
670
|
+
}
|
671
|
+
};
|
672
|
+
|
673
|
+
template <typename INPUT_TYPE, typename SAVE_TYPE>
|
674
|
+
struct QuantileState {
|
675
|
+
using SaveType = SAVE_TYPE;
|
676
|
+
using InputType = INPUT_TYPE;
|
677
|
+
|
678
|
+
// Regular aggregation
|
679
|
+
vector<SaveType> v;
|
680
|
+
|
681
|
+
// Windowed Quantile merge sort trees
|
682
|
+
using QuantileSortTree32 = QuantileSortTree<uint32_t>;
|
683
|
+
using QuantileSortTree64 = QuantileSortTree<uint64_t>;
|
684
|
+
unique_ptr<QuantileSortTree32> qst32;
|
685
|
+
unique_ptr<QuantileSortTree64> qst64;
|
686
|
+
|
687
|
+
// Windowed Quantile skip lists
|
688
|
+
using PointerType = const InputType *;
|
689
|
+
using SkipListType = duckdb_skiplistlib::skip_list::HeadNode<PointerType, PointerLess<PointerType>>;
|
690
|
+
SubFrames prevs;
|
691
|
+
unique_ptr<SkipListType> s;
|
692
|
+
mutable vector<PointerType> dest;
|
693
|
+
|
694
|
+
// Windowed MAD indirection
|
695
|
+
idx_t count;
|
696
|
+
vector<idx_t> m;
|
697
|
+
|
698
|
+
QuantileState() : count(0) {
|
699
|
+
}
|
700
|
+
|
701
|
+
~QuantileState() {
|
702
|
+
}
|
703
|
+
|
704
|
+
inline void SetCount(size_t count_p) {
|
705
|
+
count = count_p;
|
706
|
+
if (count >= m.size()) {
|
707
|
+
m.resize(count);
|
708
|
+
}
|
709
|
+
}
|
710
|
+
|
711
|
+
inline SkipListType &GetSkipList(bool reset = false) {
|
712
|
+
if (reset || !s) {
|
713
|
+
s.reset();
|
714
|
+
s = make_uniq<SkipListType>();
|
715
|
+
}
|
716
|
+
return *s;
|
717
|
+
}
|
718
|
+
|
719
|
+
struct SkipListUpdater {
|
720
|
+
SkipListType &skip;
|
721
|
+
const INPUT_TYPE *data;
|
722
|
+
const QuantileIncluded &included;
|
723
|
+
|
724
|
+
inline SkipListUpdater(SkipListType &skip, const INPUT_TYPE *data, const QuantileIncluded &included)
|
725
|
+
: skip(skip), data(data), included(included) {
|
726
|
+
}
|
727
|
+
|
728
|
+
inline void Neither(idx_t begin, idx_t end) {
|
729
|
+
}
|
730
|
+
|
731
|
+
inline void Left(idx_t begin, idx_t end) {
|
732
|
+
for (; begin < end; ++begin) {
|
733
|
+
if (included(begin)) {
|
734
|
+
skip.remove(data + begin);
|
735
|
+
}
|
736
|
+
}
|
737
|
+
}
|
738
|
+
|
739
|
+
inline void Right(idx_t begin, idx_t end) {
|
740
|
+
for (; begin < end; ++begin) {
|
741
|
+
if (included(begin)) {
|
742
|
+
skip.insert(data + begin);
|
743
|
+
}
|
744
|
+
}
|
745
|
+
}
|
746
|
+
|
747
|
+
inline void Both(idx_t begin, idx_t end) {
|
748
|
+
}
|
749
|
+
};
|
750
|
+
|
751
|
+
void UpdateSkip(const INPUT_TYPE *data, const SubFrames &frames, const QuantileIncluded &included) {
|
752
|
+
// No overlap, or no data
|
753
|
+
if (!s || prevs.back().end <= frames.front().start || frames.back().end <= prevs.front().start) {
|
754
|
+
auto &skip = GetSkipList(true);
|
755
|
+
for (const auto &frame : frames) {
|
756
|
+
for (auto i = frame.start; i < frame.end; ++i) {
|
757
|
+
if (included(i)) {
|
758
|
+
skip.insert(data + i);
|
759
|
+
}
|
760
|
+
}
|
761
|
+
}
|
762
|
+
} else {
|
763
|
+
auto &skip = GetSkipList();
|
764
|
+
SkipListUpdater updater(skip, data, included);
|
765
|
+
AggregateExecutor::IntersectFrames(prevs, frames, updater);
|
766
|
+
}
|
767
|
+
}
|
768
|
+
|
769
|
+
bool HasTrees() const {
|
770
|
+
return qst32 || qst64;
|
771
|
+
}
|
772
|
+
|
773
|
+
template <typename RESULT_TYPE, bool DISCRETE>
|
774
|
+
RESULT_TYPE WindowScalar(const INPUT_TYPE *data, const SubFrames &frames, const idx_t n, Vector &result,
|
775
|
+
const QuantileValue &q) const {
|
776
|
+
D_ASSERT(n > 0);
|
777
|
+
if (qst32) {
|
778
|
+
return qst32->WindowScalar<INPUT_TYPE, RESULT_TYPE, DISCRETE>(data, frames, n, result, q);
|
779
|
+
} else if (qst64) {
|
780
|
+
return qst64->WindowScalar<INPUT_TYPE, RESULT_TYPE, DISCRETE>(data, frames, n, result, q);
|
781
|
+
} else if (s) {
|
782
|
+
// Find the position(s) needed
|
783
|
+
try {
|
784
|
+
Interpolator<DISCRETE> interp(q, s->size(), false);
|
785
|
+
s->at(interp.FRN, interp.CRN - interp.FRN + 1, dest);
|
786
|
+
return interp.template Extract<INPUT_TYPE, RESULT_TYPE>(dest.data(), result);
|
787
|
+
} catch (const duckdb_skiplistlib::skip_list::IndexError &idx_err) {
|
788
|
+
throw InternalException(idx_err.message());
|
789
|
+
}
|
790
|
+
} else {
|
791
|
+
throw InternalException("No accelerator for scalar QUANTILE");
|
792
|
+
}
|
793
|
+
}
|
794
|
+
|
795
|
+
template <typename CHILD_TYPE, bool DISCRETE>
|
796
|
+
void WindowList(const INPUT_TYPE *data, const SubFrames &frames, const idx_t n, Vector &list, const idx_t lidx,
|
797
|
+
const QuantileBindData &bind_data) const {
|
798
|
+
D_ASSERT(n > 0);
|
799
|
+
// Result is a constant LIST<CHILD_TYPE> with a fixed length
|
800
|
+
auto ldata = FlatVector::GetData<list_entry_t>(list);
|
801
|
+
auto &lentry = ldata[lidx];
|
802
|
+
lentry.offset = ListVector::GetListSize(list);
|
803
|
+
lentry.length = bind_data.quantiles.size();
|
804
|
+
|
805
|
+
ListVector::Reserve(list, lentry.offset + lentry.length);
|
806
|
+
ListVector::SetListSize(list, lentry.offset + lentry.length);
|
807
|
+
auto &result = ListVector::GetEntry(list);
|
808
|
+
auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
|
809
|
+
|
810
|
+
for (const auto &q : bind_data.order) {
|
811
|
+
const auto &quantile = bind_data.quantiles[q];
|
812
|
+
rdata[lentry.offset + q] = WindowScalar<CHILD_TYPE, DISCRETE>(data, frames, n, result, quantile);
|
813
|
+
}
|
814
|
+
}
|
815
|
+
};
|
816
|
+
|
573
817
|
struct QuantileOperation {
|
574
818
|
template <class STATE>
|
575
819
|
static void Initialize(STATE &state) {
|
@@ -605,11 +849,66 @@ struct QuantileOperation {
|
|
605
849
|
static bool IgnoreNull() {
|
606
850
|
return true;
|
607
851
|
}
|
852
|
+
|
853
|
+
template <class STATE, class INPUT_TYPE>
|
854
|
+
static void WindowInit(AggregateInputData &aggr_input_data, const WindowPartitionInput &partition,
|
855
|
+
data_ptr_t g_state) {
|
856
|
+
D_ASSERT(partition.input_count == 1);
|
857
|
+
|
858
|
+
auto inputs = partition.inputs;
|
859
|
+
const auto count = partition.count;
|
860
|
+
const auto &filter_mask = partition.filter_mask;
|
861
|
+
const auto &stats = partition.stats;
|
862
|
+
|
863
|
+
// If frames overlap significantly, then use local skip lists.
|
864
|
+
if (stats[0].end <= stats[1].begin) {
|
865
|
+
// Frames can overlap
|
866
|
+
const auto overlap = double(stats[1].begin - stats[0].end);
|
867
|
+
const auto cover = double(stats[1].end - stats[0].begin);
|
868
|
+
const auto ratio = overlap / cover;
|
869
|
+
if (ratio > .75) {
|
870
|
+
return;
|
871
|
+
}
|
872
|
+
}
|
873
|
+
|
874
|
+
const auto data = FlatVector::GetData<const INPUT_TYPE>(inputs[0]);
|
875
|
+
const auto &data_mask = FlatVector::Validity(inputs[0]);
|
876
|
+
|
877
|
+
// Build the tree
|
878
|
+
auto &state = *reinterpret_cast<STATE *>(g_state);
|
879
|
+
if (count < std::numeric_limits<uint32_t>::max()) {
|
880
|
+
state.qst32 = QuantileSortTree<uint32_t>::WindowInit<INPUT_TYPE>(data, aggr_input_data, data_mask,
|
881
|
+
filter_mask, count);
|
882
|
+
} else {
|
883
|
+
state.qst64 = QuantileSortTree<uint64_t>::WindowInit<INPUT_TYPE>(data, aggr_input_data, data_mask,
|
884
|
+
filter_mask, count);
|
885
|
+
}
|
886
|
+
}
|
887
|
+
|
888
|
+
static idx_t FrameSize(const QuantileIncluded &included, const SubFrames &frames) {
|
889
|
+
// Count the number of valid values
|
890
|
+
idx_t n = 0;
|
891
|
+
if (included.AllValid()) {
|
892
|
+
for (const auto &frame : frames) {
|
893
|
+
n += frame.end - frame.start;
|
894
|
+
}
|
895
|
+
} else {
|
896
|
+
// NULLs or FILTERed values,
|
897
|
+
for (const auto &frame : frames) {
|
898
|
+
for (auto i = frame.start; i < frame.end; ++i) {
|
899
|
+
n += included(i);
|
900
|
+
}
|
901
|
+
}
|
902
|
+
}
|
903
|
+
|
904
|
+
return n;
|
905
|
+
}
|
608
906
|
};
|
609
907
|
|
610
908
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE, class OP>
|
611
909
|
static AggregateFunction QuantileListAggregate(const LogicalType &input_type, const LogicalType &child_type) { // NOLINT
|
612
|
-
LogicalType result_type =
|
910
|
+
LogicalType result_type =
|
911
|
+
LogicalType::LIST(child_type.id() == LogicalTypeId::ANY ? LogicalType::VARCHAR : child_type);
|
613
912
|
return AggregateFunction(
|
614
913
|
{input_type}, result_type, AggregateFunction::StateSize<STATE>, AggregateFunction::StateInitialize<STATE, OP>,
|
615
914
|
AggregateFunction::UnaryScatterUpdate<STATE, INPUT_TYPE, OP>, AggregateFunction::StateCombine<STATE, OP>,
|
@@ -635,65 +934,46 @@ struct QuantileScalarOperation : public QuantileOperation {
|
|
635
934
|
|
636
935
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
|
637
936
|
static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
|
638
|
-
AggregateInputData &aggr_input_data, STATE &state, const
|
639
|
-
|
640
|
-
|
641
|
-
auto
|
642
|
-
|
643
|
-
QuantileIncluded included(fmask, dmask, bias);
|
644
|
-
|
645
|
-
// Lazily initialise frame state
|
646
|
-
auto prev_pos = state.pos;
|
647
|
-
state.SetPos(frame.end - frame.start);
|
648
|
-
|
649
|
-
auto index = state.w.data();
|
650
|
-
D_ASSERT(index);
|
937
|
+
AggregateInputData &aggr_input_data, STATE &state, const SubFrames &frames, Vector &result,
|
938
|
+
idx_t ridx, const STATE *gstate) {
|
939
|
+
QuantileIncluded included(fmask, dmask);
|
940
|
+
const auto n = FrameSize(included, frames);
|
651
941
|
|
652
942
|
D_ASSERT(aggr_input_data.bind_data);
|
653
943
|
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
654
944
|
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
bool replace = false;
|
659
|
-
if (frame.start == prev.start + 1 && frame.end == prev.end + 1) {
|
660
|
-
// Fixed frame size
|
661
|
-
const auto j = ReplaceIndex(index, frame, prev);
|
662
|
-
// We can only replace if the number of NULLs has not changed
|
663
|
-
if (included.AllValid() || included(prev.start) == included(prev.end)) {
|
664
|
-
Interpolator<DISCRETE> interp(q, prev_pos, false);
|
665
|
-
replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
|
666
|
-
if (replace) {
|
667
|
-
state.pos = prev_pos;
|
668
|
-
}
|
669
|
-
}
|
670
|
-
} else {
|
671
|
-
ReuseIndexes(index, frame, prev);
|
672
|
-
}
|
945
|
+
auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
|
946
|
+
auto &rmask = FlatVector::Validity(result);
|
673
947
|
|
674
|
-
if (!
|
675
|
-
|
676
|
-
|
948
|
+
if (!n) {
|
949
|
+
rmask.Set(ridx, false);
|
950
|
+
return;
|
677
951
|
}
|
678
|
-
if (state.pos) {
|
679
|
-
Interpolator<DISCRETE> interp(q, state.pos, false);
|
680
952
|
|
681
|
-
|
682
|
-
|
683
|
-
rdata[ridx] =
|
684
|
-
: interp.template Operation<idx_t, RESULT_TYPE, ID>(index, result, indirect);
|
953
|
+
const auto &quantile = bind_data.quantiles[0];
|
954
|
+
if (gstate && gstate->HasTrees()) {
|
955
|
+
rdata[ridx] = gstate->template WindowScalar<RESULT_TYPE, DISCRETE>(data, frames, n, result, quantile);
|
685
956
|
} else {
|
686
|
-
|
957
|
+
// Update the skip list
|
958
|
+
state.UpdateSkip(data, frames, included);
|
959
|
+
|
960
|
+
// Find the position(s) needed
|
961
|
+
rdata[ridx] = state.template WindowScalar<RESULT_TYPE, DISCRETE>(data, frames, n, result, quantile);
|
962
|
+
|
963
|
+
// Save the previous state for next time
|
964
|
+
state.prevs = frames;
|
687
965
|
}
|
688
966
|
}
|
689
967
|
};
|
690
968
|
|
691
969
|
template <typename INPUT_TYPE, typename SAVED_TYPE>
|
692
970
|
AggregateFunction GetTypedDiscreteQuantileAggregateFunction(const LogicalType &type) {
|
693
|
-
using STATE = QuantileState<SAVED_TYPE>;
|
971
|
+
using STATE = QuantileState<INPUT_TYPE, SAVED_TYPE>;
|
694
972
|
using OP = QuantileScalarOperation<true>;
|
695
|
-
auto
|
973
|
+
auto return_type = type.id() == LogicalTypeId::ANY ? LogicalType::VARCHAR : type;
|
974
|
+
auto fun = AggregateFunction::UnaryAggregateDestructor<STATE, INPUT_TYPE, INPUT_TYPE, OP>(type, return_type);
|
696
975
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, INPUT_TYPE, OP>;
|
976
|
+
fun.window_init = OP::WindowInit<STATE, INPUT_TYPE>;
|
697
977
|
return fun;
|
698
978
|
}
|
699
979
|
|
@@ -736,8 +1016,7 @@ AggregateFunction GetDiscreteQuantileAggregateFunction(const LogicalType &type)
|
|
736
1016
|
return GetTypedDiscreteQuantileAggregateFunction<int64_t, int64_t>(type);
|
737
1017
|
case LogicalTypeId::INTERVAL:
|
738
1018
|
return GetTypedDiscreteQuantileAggregateFunction<interval_t, interval_t>(type);
|
739
|
-
|
740
|
-
case LogicalTypeId::VARCHAR:
|
1019
|
+
case LogicalTypeId::ANY:
|
741
1020
|
return GetTypedDiscreteQuantileAggregateFunction<string_t, std::string>(type);
|
742
1021
|
|
743
1022
|
default:
|
@@ -783,106 +1062,40 @@ struct QuantileListOperation : public QuantileOperation {
|
|
783
1062
|
|
784
1063
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
|
785
1064
|
static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
|
786
|
-
AggregateInputData &aggr_input_data, STATE &state, const
|
787
|
-
|
1065
|
+
AggregateInputData &aggr_input_data, STATE &state, const SubFrames &frames, Vector &list,
|
1066
|
+
idx_t lidx, const STATE *gstate) {
|
788
1067
|
D_ASSERT(aggr_input_data.bind_data);
|
789
1068
|
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
790
1069
|
|
791
|
-
QuantileIncluded included(fmask, dmask
|
1070
|
+
QuantileIncluded included(fmask, dmask);
|
1071
|
+
const auto n = FrameSize(included, frames);
|
792
1072
|
|
793
1073
|
// Result is a constant LIST<RESULT_TYPE> with a fixed length
|
794
|
-
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
lentry.length = bind_data.quantiles.size();
|
799
|
-
|
800
|
-
ListVector::Reserve(list, lentry.offset + lentry.length);
|
801
|
-
ListVector::SetListSize(list, lentry.offset + lentry.length);
|
802
|
-
auto &result = ListVector::GetEntry(list);
|
803
|
-
auto rdata = FlatVector::GetData<CHILD_TYPE>(result);
|
804
|
-
|
805
|
-
// Lazily initialise frame state
|
806
|
-
auto prev_pos = state.pos;
|
807
|
-
state.SetPos(frame.end - frame.start);
|
808
|
-
|
809
|
-
auto index = state.w.data();
|
810
|
-
|
811
|
-
// We can generalise replacement for quantile lists by observing that when a replacement is
|
812
|
-
// valid for a single quantile, it is valid for all quantiles greater/less than that quantile
|
813
|
-
// based on whether the insertion is below/above the quantile location.
|
814
|
-
// So if a replaced index in an IQR is located between Q25 and Q50, but has a value below Q25,
|
815
|
-
// then Q25 must be recomputed, but Q50 and Q75 are unaffected.
|
816
|
-
// For a single element list, this reduces to the scalar case.
|
817
|
-
std::pair<idx_t, idx_t> replaceable {state.pos, 0};
|
818
|
-
if (frame.start == prev.start + 1 && frame.end == prev.end + 1) {
|
819
|
-
// Fixed frame size
|
820
|
-
const auto j = ReplaceIndex(index, frame, prev);
|
821
|
-
// We can only replace if the number of NULLs has not changed
|
822
|
-
if (included.AllValid() || included(prev.start) == included(prev.end)) {
|
823
|
-
for (const auto &q : bind_data.order) {
|
824
|
-
const auto &quantile = bind_data.quantiles[q];
|
825
|
-
Interpolator<DISCRETE> interp(quantile, prev_pos, false);
|
826
|
-
const auto replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
|
827
|
-
if (replace < 0) {
|
828
|
-
// Replacement is before this quantile, so the rest will be replaceable too.
|
829
|
-
replaceable.first = MinValue(replaceable.first, interp.FRN);
|
830
|
-
replaceable.second = prev_pos;
|
831
|
-
break;
|
832
|
-
} else if (replace > 0) {
|
833
|
-
// Replacement is after this quantile, so everything before it is replaceable too.
|
834
|
-
replaceable.first = 0;
|
835
|
-
replaceable.second = MaxValue(replaceable.second, interp.CRN);
|
836
|
-
}
|
837
|
-
}
|
838
|
-
if (replaceable.first < replaceable.second) {
|
839
|
-
state.pos = prev_pos;
|
840
|
-
}
|
841
|
-
}
|
842
|
-
} else {
|
843
|
-
ReuseIndexes(index, frame, prev);
|
844
|
-
}
|
845
|
-
|
846
|
-
if (replaceable.first >= replaceable.second && !included.AllValid()) {
|
847
|
-
// Remove the NULLs
|
848
|
-
state.pos = std::partition(index, index + state.pos, included) - index;
|
1074
|
+
if (!n) {
|
1075
|
+
auto &lmask = FlatVector::Validity(list);
|
1076
|
+
lmask.Set(lidx, false);
|
1077
|
+
return;
|
849
1078
|
}
|
850
1079
|
|
851
|
-
if (
|
852
|
-
|
853
|
-
ID indirect(data);
|
854
|
-
for (const auto &q : bind_data.order) {
|
855
|
-
const auto &quantile = bind_data.quantiles[q];
|
856
|
-
Interpolator<DISCRETE> interp(quantile, state.pos, false);
|
857
|
-
if (replaceable.first <= interp.FRN && interp.CRN <= replaceable.second) {
|
858
|
-
rdata[lentry.offset + q] = interp.template Replace<idx_t, CHILD_TYPE, ID>(index, result, indirect);
|
859
|
-
} else {
|
860
|
-
// Make sure we don't disturb any replacements
|
861
|
-
if (replaceable.first < replaceable.second) {
|
862
|
-
if (interp.FRN < replaceable.first) {
|
863
|
-
interp.end = replaceable.first;
|
864
|
-
}
|
865
|
-
if (replaceable.second < interp.CRN) {
|
866
|
-
interp.begin = replaceable.second;
|
867
|
-
}
|
868
|
-
}
|
869
|
-
rdata[lentry.offset + q] =
|
870
|
-
interp.template Operation<idx_t, CHILD_TYPE, ID>(index, result, indirect);
|
871
|
-
}
|
872
|
-
}
|
1080
|
+
if (gstate && gstate->HasTrees()) {
|
1081
|
+
gstate->template WindowList<CHILD_TYPE, DISCRETE>(data, frames, n, list, lidx, bind_data);
|
873
1082
|
} else {
|
874
|
-
|
1083
|
+
//
|
1084
|
+
state.UpdateSkip(data, frames, included);
|
1085
|
+
state.template WindowList<CHILD_TYPE, DISCRETE>(data, frames, n, list, lidx, bind_data);
|
1086
|
+
state.prevs = frames;
|
875
1087
|
}
|
876
1088
|
}
|
877
1089
|
};
|
878
1090
|
|
879
1091
|
template <typename INPUT_TYPE, typename SAVE_TYPE>
|
880
1092
|
AggregateFunction GetTypedDiscreteQuantileListAggregateFunction(const LogicalType &type) {
|
881
|
-
using STATE = QuantileState<SAVE_TYPE>;
|
1093
|
+
using STATE = QuantileState<INPUT_TYPE, SAVE_TYPE>;
|
882
1094
|
using OP = QuantileListOperation<INPUT_TYPE, true>;
|
883
1095
|
auto fun = QuantileListAggregate<STATE, INPUT_TYPE, list_entry_t, OP>(type, type);
|
884
1096
|
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
885
1097
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, list_entry_t, OP>;
|
1098
|
+
fun.window_init = OP::template WindowInit<STATE, INPUT_TYPE>;
|
886
1099
|
return fun;
|
887
1100
|
}
|
888
1101
|
|
@@ -925,7 +1138,7 @@ AggregateFunction GetDiscreteQuantileListAggregateFunction(const LogicalType &ty
|
|
925
1138
|
return GetTypedDiscreteQuantileListAggregateFunction<dtime_t, dtime_t>(type);
|
926
1139
|
case LogicalTypeId::INTERVAL:
|
927
1140
|
return GetTypedDiscreteQuantileListAggregateFunction<interval_t, interval_t>(type);
|
928
|
-
case LogicalTypeId::
|
1141
|
+
case LogicalTypeId::ANY:
|
929
1142
|
return GetTypedDiscreteQuantileListAggregateFunction<string_t, std::string>(type);
|
930
1143
|
default:
|
931
1144
|
throw NotImplementedException("Unimplemented discrete quantile list aggregate");
|
@@ -935,11 +1148,12 @@ AggregateFunction GetDiscreteQuantileListAggregateFunction(const LogicalType &ty
|
|
935
1148
|
template <typename INPUT_TYPE, typename TARGET_TYPE>
|
936
1149
|
AggregateFunction GetTypedContinuousQuantileAggregateFunction(const LogicalType &input_type,
|
937
1150
|
const LogicalType &target_type) {
|
938
|
-
using STATE = QuantileState<INPUT_TYPE>;
|
1151
|
+
using STATE = QuantileState<INPUT_TYPE, INPUT_TYPE>;
|
939
1152
|
using OP = QuantileScalarOperation<false>;
|
940
1153
|
auto fun = AggregateFunction::UnaryAggregateDestructor<STATE, INPUT_TYPE, TARGET_TYPE, OP>(input_type, target_type);
|
941
1154
|
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
942
1155
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, TARGET_TYPE, OP>;
|
1156
|
+
fun.window_init = OP::template WindowInit<STATE, INPUT_TYPE>;
|
943
1157
|
return fun;
|
944
1158
|
}
|
945
1159
|
|
@@ -989,11 +1203,12 @@ AggregateFunction GetContinuousQuantileAggregateFunction(const LogicalType &type
|
|
989
1203
|
template <typename INPUT_TYPE, typename CHILD_TYPE>
|
990
1204
|
AggregateFunction GetTypedContinuousQuantileListAggregateFunction(const LogicalType &input_type,
|
991
1205
|
const LogicalType &result_type) {
|
992
|
-
using STATE = QuantileState<INPUT_TYPE>;
|
1206
|
+
using STATE = QuantileState<INPUT_TYPE, INPUT_TYPE>;
|
993
1207
|
using OP = QuantileListOperation<CHILD_TYPE, false>;
|
994
1208
|
auto fun = QuantileListAggregate<STATE, INPUT_TYPE, list_entry_t, OP>(input_type, result_type);
|
995
1209
|
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
996
1210
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, list_entry_t, OP>;
|
1211
|
+
fun.window_init = OP::template WindowInit<STATE, INPUT_TYPE>;
|
997
1212
|
return fun;
|
998
1213
|
}
|
999
1214
|
|
@@ -1009,7 +1224,6 @@ AggregateFunction GetContinuousQuantileListAggregateFunction(const LogicalType &
|
|
1009
1224
|
return GetTypedContinuousQuantileListAggregateFunction<int64_t, double>(type, LogicalType::DOUBLE);
|
1010
1225
|
case LogicalTypeId::HUGEINT:
|
1011
1226
|
return GetTypedContinuousQuantileListAggregateFunction<hugeint_t, double>(type, LogicalType::DOUBLE);
|
1012
|
-
|
1013
1227
|
case LogicalTypeId::FLOAT:
|
1014
1228
|
return GetTypedContinuousQuantileListAggregateFunction<float, float>(type, type);
|
1015
1229
|
case LogicalTypeId::DOUBLE:
|
@@ -1027,8 +1241,6 @@ AggregateFunction GetContinuousQuantileListAggregateFunction(const LogicalType &
|
|
1027
1241
|
default:
|
1028
1242
|
throw NotImplementedException("Unimplemented discrete quantile DECIMAL list aggregate");
|
1029
1243
|
}
|
1030
|
-
break;
|
1031
|
-
|
1032
1244
|
case LogicalTypeId::DATE:
|
1033
1245
|
return GetTypedContinuousQuantileListAggregateFunction<date_t, timestamp_t>(type, LogicalType::TIMESTAMP);
|
1034
1246
|
case LogicalTypeId::TIMESTAMP:
|
@@ -1037,7 +1249,6 @@ AggregateFunction GetContinuousQuantileListAggregateFunction(const LogicalType &
|
|
1037
1249
|
case LogicalTypeId::TIME:
|
1038
1250
|
case LogicalTypeId::TIME_TZ:
|
1039
1251
|
return GetTypedContinuousQuantileListAggregateFunction<dtime_t, dtime_t>(type, type);
|
1040
|
-
|
1041
1252
|
default:
|
1042
1253
|
throw NotImplementedException("Unimplemented discrete quantile list aggregate");
|
1043
1254
|
}
|
@@ -1141,80 +1352,60 @@ struct MedianAbsoluteDeviationOperation : public QuantileOperation {
|
|
1141
1352
|
|
1142
1353
|
template <class STATE, class INPUT_TYPE, class RESULT_TYPE>
|
1143
1354
|
static void Window(const INPUT_TYPE *data, const ValidityMask &fmask, const ValidityMask &dmask,
|
1144
|
-
AggregateInputData &aggr_input_data, STATE &state, const
|
1145
|
-
|
1355
|
+
AggregateInputData &aggr_input_data, STATE &state, const SubFrames &frames, Vector &result,
|
1356
|
+
idx_t ridx, const STATE *gstate) {
|
1146
1357
|
auto rdata = FlatVector::GetData<RESULT_TYPE>(result);
|
1147
|
-
auto &rmask = FlatVector::Validity(result);
|
1148
1358
|
|
1149
|
-
QuantileIncluded included(fmask, dmask
|
1359
|
+
QuantileIncluded included(fmask, dmask);
|
1360
|
+
const auto n = FrameSize(included, frames);
|
1150
1361
|
|
1151
|
-
|
1152
|
-
|
1153
|
-
|
1362
|
+
if (!n) {
|
1363
|
+
auto &rmask = FlatVector::Validity(result);
|
1364
|
+
rmask.Set(ridx, false);
|
1365
|
+
return;
|
1366
|
+
}
|
1154
1367
|
|
1155
|
-
|
1156
|
-
D_ASSERT(
|
1368
|
+
// Compute the median
|
1369
|
+
D_ASSERT(aggr_input_data.bind_data);
|
1370
|
+
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
1157
1371
|
|
1158
|
-
|
1159
|
-
|
1160
|
-
|
1372
|
+
D_ASSERT(bind_data.quantiles.size() == 1);
|
1373
|
+
const auto &quantile = bind_data.quantiles[0];
|
1374
|
+
MEDIAN_TYPE med;
|
1375
|
+
if (gstate && gstate->HasTrees()) {
|
1376
|
+
med = gstate->template WindowScalar<MEDIAN_TYPE, false>(data, frames, n, result, quantile);
|
1377
|
+
} else {
|
1378
|
+
state.UpdateSkip(data, frames, included);
|
1379
|
+
med = state.template WindowScalar<MEDIAN_TYPE, false>(data, frames, n, result, quantile);
|
1161
1380
|
}
|
1162
1381
|
|
1382
|
+
// Lazily initialise frame state
|
1383
|
+
state.SetCount(frames.back().end - frames.front().start);
|
1163
1384
|
auto index2 = state.m.data();
|
1164
1385
|
D_ASSERT(index2);
|
1165
1386
|
|
1166
1387
|
// The replacement trick does not work on the second index because if
|
1167
1388
|
// the median has changed, the previous order is not correct.
|
1168
1389
|
// It is probably close, however, and so reuse is helpful.
|
1169
|
-
|
1170
|
-
|
1390
|
+
auto &prevs = state.prevs;
|
1391
|
+
ReuseIndexes(index2, frames, prevs);
|
1392
|
+
std::partition(index2, index2 + state.count, included);
|
1171
1393
|
|
1172
|
-
|
1173
|
-
D_ASSERT(aggr_input_data.bind_data);
|
1174
|
-
auto &bind_data = aggr_input_data.bind_data->Cast<QuantileBindData>();
|
1175
|
-
D_ASSERT(bind_data.quantiles.size() == 1);
|
1176
|
-
const auto &q = bind_data.quantiles[0];
|
1394
|
+
Interpolator<false> interp(quantile, n, false);
|
1177
1395
|
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
const auto j = ReplaceIndex(index, frame, prev);
|
1182
|
-
// We can only replace if the number of NULLs has not changed
|
1183
|
-
if (included.AllValid() || included(prev.start) == included(prev.end)) {
|
1184
|
-
Interpolator<false> interp(q, prev_pos, false);
|
1185
|
-
replace = CanReplace(index, data, j, interp.FRN, interp.CRN, included);
|
1186
|
-
if (replace) {
|
1187
|
-
state.pos = prev_pos;
|
1188
|
-
}
|
1189
|
-
}
|
1190
|
-
} else {
|
1191
|
-
ReuseIndexes(index, frame, prev);
|
1192
|
-
}
|
1193
|
-
|
1194
|
-
if (!replace && !included.AllValid()) {
|
1195
|
-
// Remove the NULLs
|
1196
|
-
state.pos = std::partition(index, index + state.pos, included) - index;
|
1197
|
-
}
|
1396
|
+
// Compute mad from the second index
|
1397
|
+
using ID = QuantileIndirect<INPUT_TYPE>;
|
1398
|
+
ID indirect(data);
|
1198
1399
|
|
1199
|
-
|
1200
|
-
|
1400
|
+
using MAD = MadAccessor<INPUT_TYPE, RESULT_TYPE, MEDIAN_TYPE>;
|
1401
|
+
MAD mad(med);
|
1201
1402
|
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
const auto med = replace ? interp.template Replace<idx_t, MEDIAN_TYPE, ID>(index, result, indirect)
|
1206
|
-
: interp.template Operation<idx_t, MEDIAN_TYPE, ID>(index, result, indirect);
|
1403
|
+
using MadIndirect = QuantileComposed<MAD, ID>;
|
1404
|
+
MadIndirect mad_indirect(mad, indirect);
|
1405
|
+
rdata[ridx] = interp.template Operation<idx_t, RESULT_TYPE, MadIndirect>(index2, result, mad_indirect);
|
1207
1406
|
|
1208
|
-
|
1209
|
-
|
1210
|
-
MAD mad(med);
|
1211
|
-
|
1212
|
-
using MadIndirect = QuantileComposed<MAD, ID>;
|
1213
|
-
MadIndirect mad_indirect(mad, indirect);
|
1214
|
-
rdata[ridx] = interp.template Operation<idx_t, RESULT_TYPE, MadIndirect>(index2, result, mad_indirect);
|
1215
|
-
} else {
|
1216
|
-
rmask.Set(ridx, false);
|
1217
|
-
}
|
1407
|
+
// Prev is used by both skip lists and increments
|
1408
|
+
prevs = frames;
|
1218
1409
|
}
|
1219
1410
|
};
|
1220
1411
|
|
@@ -1226,12 +1417,13 @@ unique_ptr<FunctionData> BindMedian(ClientContext &context, AggregateFunction &f
|
|
1226
1417
|
template <typename INPUT_TYPE, typename MEDIAN_TYPE, typename TARGET_TYPE>
|
1227
1418
|
AggregateFunction GetTypedMedianAbsoluteDeviationAggregateFunction(const LogicalType &input_type,
|
1228
1419
|
const LogicalType &target_type) {
|
1229
|
-
using STATE = QuantileState<INPUT_TYPE>;
|
1420
|
+
using STATE = QuantileState<INPUT_TYPE, INPUT_TYPE>;
|
1230
1421
|
using OP = MedianAbsoluteDeviationOperation<MEDIAN_TYPE>;
|
1231
1422
|
auto fun = AggregateFunction::UnaryAggregateDestructor<STATE, INPUT_TYPE, TARGET_TYPE, OP>(input_type, target_type);
|
1232
1423
|
fun.bind = BindMedian;
|
1233
1424
|
fun.order_dependent = AggregateOrderDependent::NOT_ORDER_DEPENDENT;
|
1234
1425
|
fun.window = AggregateFunction::UnaryWindow<STATE, INPUT_TYPE, TARGET_TYPE, OP>;
|
1426
|
+
fun.window_init = OP::template WindowInit<STATE, INPUT_TYPE>;
|
1235
1427
|
return fun;
|
1236
1428
|
}
|
1237
1429
|
|
@@ -1390,6 +1582,7 @@ static bool CanInterpolate(const LogicalType &type) {
|
|
1390
1582
|
switch (type.id()) {
|
1391
1583
|
case LogicalTypeId::INTERVAL:
|
1392
1584
|
case LogicalTypeId::VARCHAR:
|
1585
|
+
case LogicalTypeId::ANY:
|
1393
1586
|
return false;
|
1394
1587
|
default:
|
1395
1588
|
return true;
|
@@ -1462,10 +1655,13 @@ AggregateFunction GetQuantileDecimalAggregate(const vector<LogicalType> &argumen
|
|
1462
1655
|
}
|
1463
1656
|
|
1464
1657
|
vector<LogicalType> GetQuantileTypes() {
|
1465
|
-
return {LogicalType::TINYINT,
|
1466
|
-
LogicalType::
|
1467
|
-
LogicalType::
|
1468
|
-
LogicalType::
|
1658
|
+
return {LogicalType::TINYINT, LogicalType::SMALLINT,
|
1659
|
+
LogicalType::INTEGER, LogicalType::BIGINT,
|
1660
|
+
LogicalType::HUGEINT, LogicalType::FLOAT,
|
1661
|
+
LogicalType::DOUBLE, LogicalType::DATE,
|
1662
|
+
LogicalType::TIMESTAMP, LogicalType::TIME,
|
1663
|
+
LogicalType::TIMESTAMP_TZ, LogicalType::TIME_TZ,
|
1664
|
+
LogicalType::INTERVAL, LogicalType::ANY_PARAMS(LogicalType::VARCHAR, 150)};
|
1469
1665
|
}
|
1470
1666
|
|
1471
1667
|
AggregateFunctionSet MedianFun::GetFunctions() {
|