duckdb 0.9.3-dev0.0 → 0.9.3-dev12.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/LICENSE +1 -1
- package/binding.gyp +32 -7
- package/package.json +1 -1
- package/src/connection.cpp +6 -6
- package/src/database.cpp +11 -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/columns.test.ts +2 -1
- package/test/test_all_types.test.ts +9 -4
@@ -0,0 +1,934 @@
|
|
1
|
+
/**
|
2
|
+
* @file
|
3
|
+
*
|
4
|
+
* Project: skiplist
|
5
|
+
*
|
6
|
+
* Created by Paul Ross on 03/12/2015.
|
7
|
+
*
|
8
|
+
* Copyright (c) 2015-2023 Paul Ross. All rights reserved.
|
9
|
+
*
|
10
|
+
* @code
|
11
|
+
* MIT License
|
12
|
+
*
|
13
|
+
* Copyright (c) 2017-2023 Paul Ross
|
14
|
+
*
|
15
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
16
|
+
* of this software and associated documentation files (the "Software"), to deal
|
17
|
+
* in the Software without restriction, including without limitation the rights
|
18
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
19
|
+
* copies of the Software, and to permit persons to whom the Software is
|
20
|
+
* furnished to do so, subject to the following conditions:
|
21
|
+
*
|
22
|
+
* The above copyright notice and this permission notice shall be included in all
|
23
|
+
* copies or substantial portions of the Software.
|
24
|
+
*
|
25
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
26
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
27
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
28
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
29
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
30
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
31
|
+
* SOFTWARE.
|
32
|
+
* @endcode
|
33
|
+
*/
|
34
|
+
|
35
|
+
#ifndef SkipList_HeadNode_h
|
36
|
+
#define SkipList_HeadNode_h
|
37
|
+
|
38
|
+
#include <functional>
|
39
|
+
//#ifdef SKIPLIST_THREAD_SUPPORT
|
40
|
+
// #include <mutex>
|
41
|
+
//#endif
|
42
|
+
#include <vector>
|
43
|
+
|
44
|
+
#ifdef INCLUDE_METHODS_THAT_USE_STREAMS
|
45
|
+
#include <sstream>
|
46
|
+
#endif // INCLUDE_METHODS_THAT_USE_STREAMS
|
47
|
+
|
48
|
+
#include "IntegrityEnums.h"
|
49
|
+
|
50
|
+
/** HeadNode
|
51
|
+
*
|
52
|
+
* @brief A HeadNode is a skip list. This is the single node leading to all other content Nodes.
|
53
|
+
*
|
54
|
+
* Example:
|
55
|
+
*
|
56
|
+
* @code
|
57
|
+
* OrderedStructs::SkipList::HeadNode<double> sl;
|
58
|
+
* for (int i = 0; i < 100; ++i) {
|
59
|
+
* sl.insert(i * 22.0 / 7.0);
|
60
|
+
* }
|
61
|
+
* sl.size(); // 100
|
62
|
+
* sl.at(50); // Value of 50 pi
|
63
|
+
* sl.remove(sl.at(50)); // Remove 50 pi
|
64
|
+
* @endcode
|
65
|
+
*
|
66
|
+
* Created by Paul Ross on 03/12/2015.
|
67
|
+
*
|
68
|
+
* Copyright (c) 2015-2023 Paul Ross. All rights reserved.
|
69
|
+
*
|
70
|
+
* @tparam T The type of the Skip List Node values.
|
71
|
+
* @tparam _Compare A comparison function for type T.
|
72
|
+
*/
|
73
|
+
template <typename T, typename _Compare=std::less<T>>
|
74
|
+
class HeadNode {
|
75
|
+
public:
|
76
|
+
/**
|
77
|
+
* Constructor for and Empty Skip List.
|
78
|
+
*
|
79
|
+
* @param cmp The comparison function for comparing Node values.
|
80
|
+
*/
|
81
|
+
HeadNode(_Compare cmp=_Compare()) : _count(0), _compare(cmp), _pool(cmp) {
|
82
|
+
#ifdef INCLUDE_METHODS_THAT_USE_STREAMS
|
83
|
+
_dot_file_subgraph = 0;
|
84
|
+
#endif
|
85
|
+
}
|
86
|
+
// Const methods
|
87
|
+
//
|
88
|
+
// Returns true if the value is present in the skip list.
|
89
|
+
bool has(const T &value) const;
|
90
|
+
// Returns the value at the index in the skip list.
|
91
|
+
// Will throw an OrderedStructs::SkipList::IndexError if index out of range.
|
92
|
+
const T &at(size_t index) const;
|
93
|
+
// Find the value at index and write count values to dest.
|
94
|
+
// Will throw a SkipList::IndexError if any index out of range.
|
95
|
+
// This is useful for rolling median on even length lists where
|
96
|
+
// the caller might want to implement the mean of two values.
|
97
|
+
void at(size_t index, size_t count, std::vector<T> &dest) const;
|
98
|
+
// Computes index of the first occurrence of a value
|
99
|
+
// Will throw a ValueError if the value does not exist in the skip list
|
100
|
+
size_t index(const T& value) const;
|
101
|
+
// Number of values in the skip list.
|
102
|
+
size_t size() const;
|
103
|
+
// Non-const methods
|
104
|
+
//
|
105
|
+
// Insert a value.
|
106
|
+
void insert(const T &value);
|
107
|
+
// Remove a value and return it.
|
108
|
+
// Will throw a ValueError is value not present.
|
109
|
+
T remove(const T &value);
|
110
|
+
|
111
|
+
// Const methods that are mostly used for debugging and visualisation.
|
112
|
+
//
|
113
|
+
// Number of linked lists that are in the skip list.
|
114
|
+
size_t height() const;
|
115
|
+
// Number of linked lists that the node at index has.
|
116
|
+
// Will throw a SkipList::IndexError if idx out of range.
|
117
|
+
size_t height(size_t idx) const;
|
118
|
+
// The skip width of the node at index has.
|
119
|
+
// May throw a SkipList::IndexError
|
120
|
+
size_t width(size_t idx, size_t level) const;
|
121
|
+
|
122
|
+
#ifdef INCLUDE_METHODS_THAT_USE_STREAMS
|
123
|
+
void dotFile(std::ostream &os) const;
|
124
|
+
void dotFileFinalise(std::ostream &os) const;
|
125
|
+
#endif // INCLUDE_METHODS_THAT_USE_STREAMS
|
126
|
+
|
127
|
+
// Returns non-zero if the integrity of this data structure is compromised
|
128
|
+
// This is a thorough but expensive check!
|
129
|
+
IntegrityCheck lacksIntegrity() const;
|
130
|
+
// Estimate of the number of bytes used by the skip list
|
131
|
+
size_t size_of() const;
|
132
|
+
virtual ~HeadNode();
|
133
|
+
|
134
|
+
protected:
|
135
|
+
void _adjRemoveRefs(size_t level, Node<T, _Compare> *pNode);
|
136
|
+
const Node<T, _Compare> *_nodeAt(size_t idx) const;
|
137
|
+
|
138
|
+
protected:
|
139
|
+
// Standardised way of throwing a ValueError
|
140
|
+
void _throwValueErrorNotFound(const T &value) const;
|
141
|
+
void _throwIfValueDoesNotCompare(const T &value) const;
|
142
|
+
// Internal integrity checks
|
143
|
+
IntegrityCheck _lacksIntegrityCyclicReferences() const;
|
144
|
+
IntegrityCheck _lacksIntegrityWidthAccumulation() const;
|
145
|
+
IntegrityCheck _lacksIntegrityNodeReferencesNotInList() const;
|
146
|
+
IntegrityCheck _lacksIntegrityOrder() const;
|
147
|
+
protected:
|
148
|
+
/// Number of nodes in the list.
|
149
|
+
size_t _count;
|
150
|
+
/// My node references, the size of this is the largest height in the list
|
151
|
+
SwappableNodeRefStack<T, _Compare> _nodeRefs;
|
152
|
+
/// Comparison function.
|
153
|
+
_Compare _compare;
|
154
|
+
typename Node<T, _Compare>::_Pool _pool;
|
155
|
+
#ifdef INCLUDE_METHODS_THAT_USE_STREAMS
|
156
|
+
/// Used to count how many sub-graphs have been plotted
|
157
|
+
mutable size_t _dot_file_subgraph;
|
158
|
+
#endif
|
159
|
+
|
160
|
+
private:
|
161
|
+
/// Prevent cctor and operator=
|
162
|
+
HeadNode(const HeadNode &that);
|
163
|
+
HeadNode &operator=(const HeadNode &that) const;
|
164
|
+
};
|
165
|
+
|
166
|
+
/**
|
167
|
+
* Returns true if the value is present in the skip list.
|
168
|
+
*
|
169
|
+
* @tparam T Type of the values in the Skip List.
|
170
|
+
* @tparam _Compare Compare function.
|
171
|
+
* @param value Value to check if it is in the Skip List.
|
172
|
+
* @return true if in the Skip List.
|
173
|
+
*/
|
174
|
+
template <typename T, typename _Compare>
|
175
|
+
bool HeadNode<T, _Compare>::has(const T &value) const {
|
176
|
+
_throwIfValueDoesNotCompare(value);
|
177
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
178
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
179
|
+
#endif
|
180
|
+
for (size_t l = _nodeRefs.height(); l-- > 0;) {
|
181
|
+
assert(_nodeRefs[l].pNode);
|
182
|
+
if (_nodeRefs[l].pNode->has(value)) {
|
183
|
+
return true;
|
184
|
+
}
|
185
|
+
}
|
186
|
+
return false;
|
187
|
+
}
|
188
|
+
|
189
|
+
/**
|
190
|
+
* Returns the value at a particular index.
|
191
|
+
* Will throw an OrderedStructs::SkipList::IndexError if index out of range.
|
192
|
+
*
|
193
|
+
* If @ref SKIPLIST_THREAD_SUPPORT is defined this will block.
|
194
|
+
*
|
195
|
+
* See _throw_exceeds_size() that does the throw.
|
196
|
+
*
|
197
|
+
* @tparam T Type of the values in the Skip List.
|
198
|
+
* @tparam _Compare Compare function.
|
199
|
+
* @param index The index.
|
200
|
+
* @return The value at that index.
|
201
|
+
*/
|
202
|
+
template <typename T, typename _Compare>
|
203
|
+
const T &HeadNode<T, _Compare>::at(size_t index) const {
|
204
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
205
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
206
|
+
#endif
|
207
|
+
const Node<T, _Compare> *pNode = _nodeAt(index);
|
208
|
+
assert(pNode);
|
209
|
+
return pNode->value();
|
210
|
+
}
|
211
|
+
|
212
|
+
/**
|
213
|
+
* Find the count number of value starting at index and write them to dest.
|
214
|
+
*
|
215
|
+
* Will throw a OrderedStructs::SkipList::IndexError if any index out of range.
|
216
|
+
*
|
217
|
+
* This is useful for rolling median on even length lists where the caller might want to implement the mean of two
|
218
|
+
* values.
|
219
|
+
*
|
220
|
+
* @tparam T Type of the values in the Skip List.
|
221
|
+
* @tparam _Compare Compare function.
|
222
|
+
* @param index The index.
|
223
|
+
* @param count The number of values to retrieve.
|
224
|
+
* @param dest The vector of values
|
225
|
+
*/
|
226
|
+
template <typename T, typename _Compare>
|
227
|
+
void HeadNode<T, _Compare>::at(size_t index, size_t count,
|
228
|
+
std::vector<T> &dest) const {
|
229
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
230
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
231
|
+
#endif
|
232
|
+
dest.clear();
|
233
|
+
const Node<T, _Compare> *pNode = _nodeAt(index);
|
234
|
+
// _nodeAt will (should) throw an IndexError so this
|
235
|
+
// assert should always be true
|
236
|
+
assert(pNode);
|
237
|
+
while (count) {
|
238
|
+
if (! pNode) {
|
239
|
+
_throw_exceeds_size(_count);
|
240
|
+
}
|
241
|
+
dest.push_back(pNode->value());
|
242
|
+
pNode = pNode->next();
|
243
|
+
--count;
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
/**
|
248
|
+
* Computes index of the first occurrence of a value
|
249
|
+
* Will throw a OrderedStructs::SkipList::ValueError if the value does not exist in the skip list
|
250
|
+
* Will throw a OrderedStructs::SkipList::FailedComparison if the value is not comparable.
|
251
|
+
*
|
252
|
+
* @tparam T Type of the values in the Skip List.
|
253
|
+
* @tparam _Compare Compare function.
|
254
|
+
* @param value The value to search for.
|
255
|
+
* @return
|
256
|
+
*/
|
257
|
+
template <typename T, typename _Compare>
|
258
|
+
size_t HeadNode<T, _Compare>::index(const T& value) const {
|
259
|
+
_throwIfValueDoesNotCompare(value);
|
260
|
+
size_t idx;
|
261
|
+
|
262
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
263
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
264
|
+
#endif
|
265
|
+
for (size_t l = _nodeRefs.height(); l-- > 0;) {
|
266
|
+
assert(_nodeRefs[l].pNode);
|
267
|
+
if (_nodeRefs[l].pNode->index(value, idx, l)) {
|
268
|
+
idx += _nodeRefs[l].width;
|
269
|
+
assert(idx > 0);
|
270
|
+
return idx - 1;
|
271
|
+
}
|
272
|
+
}
|
273
|
+
_throwValueErrorNotFound(value);
|
274
|
+
return 0;
|
275
|
+
}
|
276
|
+
|
277
|
+
/**
|
278
|
+
* Return the number of values in the Skip List.
|
279
|
+
*
|
280
|
+
* @tparam T Type of the values in the Skip List.
|
281
|
+
* @tparam _Compare Compare function.
|
282
|
+
* @return The number of values in the Skip List.
|
283
|
+
*/
|
284
|
+
template <typename T, typename _Compare>
|
285
|
+
size_t HeadNode<T, _Compare>::size() const {
|
286
|
+
return _count;
|
287
|
+
}
|
288
|
+
|
289
|
+
template <typename T, typename _Compare>
|
290
|
+
size_t HeadNode<T, _Compare>::height() const {
|
291
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
292
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
293
|
+
#endif
|
294
|
+
size_t val = _nodeRefs.height();
|
295
|
+
return val;
|
296
|
+
}
|
297
|
+
|
298
|
+
/**
|
299
|
+
* Return the number of linked lists that the node at index has.
|
300
|
+
*
|
301
|
+
* Will throw a OrderedStructs::SkipList::IndexError if the index out of range.
|
302
|
+
*
|
303
|
+
* @tparam T Type of the values in the Skip List.
|
304
|
+
* @tparam _Compare Compare function.
|
305
|
+
* @param idx The index of the Skip List node.
|
306
|
+
* @return The number of linked lists that the node at the index has.
|
307
|
+
*/
|
308
|
+
template <typename T, typename _Compare>
|
309
|
+
size_t HeadNode<T, _Compare>::height(size_t idx) const {
|
310
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
311
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
312
|
+
#endif
|
313
|
+
const Node<T, _Compare> *pNode = _nodeAt(idx);
|
314
|
+
assert(pNode);
|
315
|
+
return pNode->height();
|
316
|
+
}
|
317
|
+
|
318
|
+
/**
|
319
|
+
* The skip width of the Node at index has at the given level.
|
320
|
+
* Will throw an IndexError if the index is out of range.
|
321
|
+
*
|
322
|
+
* @tparam T Type of the values in the Skip List.
|
323
|
+
* @tparam _Compare Compare function.
|
324
|
+
* @param idx The index.
|
325
|
+
* @param level The level.
|
326
|
+
* @return Width of Node.
|
327
|
+
*/
|
328
|
+
template <typename T, typename _Compare>
|
329
|
+
size_t HeadNode<T, _Compare>::width(size_t idx, size_t level) const {
|
330
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
331
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
332
|
+
#endif
|
333
|
+
// Will throw if out of range.
|
334
|
+
const Node<T, _Compare> *pNode = _nodeAt(idx);
|
335
|
+
assert(pNode);
|
336
|
+
if (level >= pNode->height()) {
|
337
|
+
_throw_exceeds_size(pNode->height());
|
338
|
+
}
|
339
|
+
return pNode->nodeRefs()[level].width;
|
340
|
+
}
|
341
|
+
|
342
|
+
/**
|
343
|
+
* Find the Node at the given index.
|
344
|
+
* Will throw an IndexError if the index is out of range.
|
345
|
+
*
|
346
|
+
* @tparam T Type of the values in the Skip List.
|
347
|
+
* @tparam _Compare Compare function.
|
348
|
+
* @param idx The index.
|
349
|
+
* @return The Node.
|
350
|
+
*/
|
351
|
+
template <typename T, typename _Compare>
|
352
|
+
const Node<T, _Compare> *HeadNode<T, _Compare>::_nodeAt(size_t idx) const {
|
353
|
+
if (idx < _count) {
|
354
|
+
for (size_t l = _nodeRefs.height(); l-- > 0;) {
|
355
|
+
if (_nodeRefs[l].pNode && _nodeRefs[l].width <= idx + 1) {
|
356
|
+
size_t new_index = idx + 1 - _nodeRefs[l].width;
|
357
|
+
const Node<T, _Compare> *pNode = _nodeRefs[l].pNode->at(new_index);
|
358
|
+
if (pNode) {
|
359
|
+
return pNode;
|
360
|
+
}
|
361
|
+
}
|
362
|
+
}
|
363
|
+
}
|
364
|
+
assert(idx >= _count);
|
365
|
+
_throw_exceeds_size(_count);
|
366
|
+
// Should not get here as _throw_exceeds_size() will always throw.
|
367
|
+
return NULL;
|
368
|
+
}
|
369
|
+
|
370
|
+
/**
|
371
|
+
* Insert a value.
|
372
|
+
*
|
373
|
+
* @tparam T Type of the values in the Skip List.
|
374
|
+
* @tparam _Compare Compare function.
|
375
|
+
* @param value
|
376
|
+
*/
|
377
|
+
template <typename T, typename _Compare>
|
378
|
+
void HeadNode<T, _Compare>::insert(const T &value) {
|
379
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
380
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
381
|
+
#ifdef SKIPLIST_THREAD_SUPPORT_TRACE
|
382
|
+
std::cout << "HeadNode insert() thread: " << std::this_thread::get_id() << std::endl;
|
383
|
+
#endif
|
384
|
+
#endif
|
385
|
+
Node<T, _Compare> *pNode = nullptr;
|
386
|
+
size_t level = _nodeRefs.height();
|
387
|
+
|
388
|
+
_throwIfValueDoesNotCompare(value);
|
389
|
+
while (level-- > 0) {
|
390
|
+
assert(_nodeRefs[level].pNode);
|
391
|
+
pNode = _nodeRefs[level].pNode->insert(value);
|
392
|
+
if (pNode) {
|
393
|
+
break;
|
394
|
+
}
|
395
|
+
}
|
396
|
+
if (! pNode) {
|
397
|
+
pNode = _pool.Allocate(value);
|
398
|
+
level = 0;
|
399
|
+
}
|
400
|
+
assert(pNode);
|
401
|
+
SwappableNodeRefStack<T, _Compare> &thatRefs = pNode->nodeRefs();
|
402
|
+
if (thatRefs.canSwap()) {
|
403
|
+
// Expand this to that
|
404
|
+
while (_nodeRefs.height() < thatRefs.height()) {
|
405
|
+
_nodeRefs.push_back(nullptr, _count + 1);
|
406
|
+
}
|
407
|
+
if (level < thatRefs.swapLevel()) {
|
408
|
+
// Happens when we were originally, say 3 high (max height of any
|
409
|
+
// previously seen node). Then a node is created
|
410
|
+
// say 5 high. In that case this will be at level 2 and
|
411
|
+
// thatRefs.swapLevel() will be 3
|
412
|
+
assert(level + 1 == thatRefs.swapLevel());
|
413
|
+
thatRefs[thatRefs.swapLevel()].width += _nodeRefs[level].width;
|
414
|
+
++level;
|
415
|
+
}
|
416
|
+
// Now swap
|
417
|
+
while (level < _nodeRefs.height() && thatRefs.canSwap()) {
|
418
|
+
assert(thatRefs.canSwap());
|
419
|
+
assert(level == thatRefs.swapLevel());
|
420
|
+
_nodeRefs[level].width -= thatRefs[level].width - 1;
|
421
|
+
thatRefs.swap(_nodeRefs);
|
422
|
+
if (thatRefs.canSwap()) {
|
423
|
+
assert(thatRefs[thatRefs.swapLevel()].width == 0);
|
424
|
+
thatRefs[thatRefs.swapLevel()].width = _nodeRefs[level].width;
|
425
|
+
}
|
426
|
+
++level;
|
427
|
+
}
|
428
|
+
// Check all references swapped
|
429
|
+
assert(! thatRefs.canSwap());
|
430
|
+
// Check that all 'this' pointers created on construction have been moved
|
431
|
+
assert(thatRefs.noNodePointerMatches(pNode));
|
432
|
+
}
|
433
|
+
if (level < thatRefs.swapLevel()) {
|
434
|
+
// Happens when we are, say 5 high then a node is created
|
435
|
+
// and consumed by the next node say 3 high. In that case this will be
|
436
|
+
// at level 2 and thatRefs.swapLevel() will be 3
|
437
|
+
assert(level + 1 == thatRefs.swapLevel());
|
438
|
+
++level;
|
439
|
+
}
|
440
|
+
// Increment my widths as my references are now going over the top of
|
441
|
+
// pNode.
|
442
|
+
while (level < _nodeRefs.height() && level >= thatRefs.height()) {
|
443
|
+
_nodeRefs[level++].width += 1;
|
444
|
+
}
|
445
|
+
++_count;
|
446
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
447
|
+
#ifdef SKIPLIST_THREAD_SUPPORT_TRACE
|
448
|
+
std::cout << "HeadNode insert() thread: " << std::this_thread::get_id() << " DONE" << std::endl;
|
449
|
+
#endif
|
450
|
+
#endif
|
451
|
+
}
|
452
|
+
|
453
|
+
/**
|
454
|
+
* Adjust references >= level for removal of the node pNode.
|
455
|
+
*
|
456
|
+
* @tparam T Type of the values in the Skip List.
|
457
|
+
* @tparam _Compare Compare function.
|
458
|
+
* @param level Current level.
|
459
|
+
* @param pNode Node to swap references with.
|
460
|
+
*/
|
461
|
+
template <typename T, typename _Compare>
|
462
|
+
void HeadNode<T, _Compare>::_adjRemoveRefs(size_t level,
|
463
|
+
Node<T, _Compare> *pNode) {
|
464
|
+
assert(pNode);
|
465
|
+
SwappableNodeRefStack<T, _Compare> &thatRefs = pNode->nodeRefs();
|
466
|
+
|
467
|
+
// Swap all remaining levels
|
468
|
+
// This assertion checks that if swapping can take place we must be at the
|
469
|
+
// same level.
|
470
|
+
assert(! thatRefs.canSwap() || level == thatRefs.swapLevel());
|
471
|
+
while (level < _nodeRefs.height() && thatRefs.canSwap()) {
|
472
|
+
assert(level == thatRefs.swapLevel());
|
473
|
+
// Compute the new width for the new node
|
474
|
+
thatRefs[level].width += _nodeRefs[level].width - 1;
|
475
|
+
thatRefs.swap(_nodeRefs);
|
476
|
+
++level;
|
477
|
+
if (! thatRefs.canSwap()) {
|
478
|
+
break;
|
479
|
+
}
|
480
|
+
}
|
481
|
+
assert(! thatRefs.canSwap());
|
482
|
+
// Decrement my widths as my references are now going over the top of
|
483
|
+
// pNode.
|
484
|
+
while (level < _nodeRefs.height()) {
|
485
|
+
_nodeRefs[level++].width -= 1;
|
486
|
+
}
|
487
|
+
// Decrement my stack while top has a NULL pointer.
|
488
|
+
while (_nodeRefs.height() && ! _nodeRefs[_nodeRefs.height() - 1].pNode) {
|
489
|
+
_nodeRefs.pop_back();
|
490
|
+
}
|
491
|
+
}
|
492
|
+
|
493
|
+
/**
|
494
|
+
* Remove a Node with a value.
|
495
|
+
* May throw a ValueError if the value is not found.
|
496
|
+
*
|
497
|
+
* @tparam T Type of the values in the Skip List.
|
498
|
+
* @tparam _Compare Compare function.
|
499
|
+
* @param value The value in the Node to remove.
|
500
|
+
* @return The value removed.
|
501
|
+
*/
|
502
|
+
template <typename T, typename _Compare>
|
503
|
+
T HeadNode<T, _Compare>::remove(const T &value) {
|
504
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
505
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
506
|
+
#ifdef SKIPLIST_THREAD_SUPPORT_TRACE
|
507
|
+
std::cout << "HeadNode remove() thread: " << std::this_thread::get_id() << std::endl;
|
508
|
+
#endif
|
509
|
+
#endif
|
510
|
+
Node<T, _Compare> *pNode = nullptr;
|
511
|
+
size_t level;
|
512
|
+
|
513
|
+
_throwIfValueDoesNotCompare(value);
|
514
|
+
for (level = _nodeRefs.height(); level-- > 0;) {
|
515
|
+
assert(_nodeRefs[level].pNode);
|
516
|
+
pNode = _nodeRefs[level].pNode->remove(level, value);
|
517
|
+
if (pNode) {
|
518
|
+
break;
|
519
|
+
}
|
520
|
+
}
|
521
|
+
if (! pNode) {
|
522
|
+
_throwValueErrorNotFound(value);
|
523
|
+
}
|
524
|
+
// Take swap level as some swaps will have been dealt with by the remove() above.
|
525
|
+
_adjRemoveRefs(pNode->nodeRefs().swapLevel(), pNode);
|
526
|
+
--_count;
|
527
|
+
T ret_val = _pool.Release(pNode);
|
528
|
+
#ifdef SKIPLIST_THREAD_SUPPORT_TRACE
|
529
|
+
std::cout << "HeadNode remove() thread: " << std::this_thread::get_id() << " DONE" << std::endl;
|
530
|
+
#endif
|
531
|
+
return ret_val;
|
532
|
+
}
|
533
|
+
|
534
|
+
/**
|
535
|
+
* Throw a ValueError in a consistent fashion.
|
536
|
+
*
|
537
|
+
* @tparam T Type of the values in the Skip List.
|
538
|
+
* @tparam _Compare Compare function.
|
539
|
+
* @param value The value to put into the ValueError.
|
540
|
+
*/
|
541
|
+
template <typename T, typename _Compare>
|
542
|
+
void HeadNode<T, _Compare>::_throwValueErrorNotFound(const T &value) const {
|
543
|
+
#ifdef INCLUDE_METHODS_THAT_USE_STREAMS
|
544
|
+
std::ostringstream oss;
|
545
|
+
oss << "Value " << value << " not found.";
|
546
|
+
std::string err_msg = oss.str();
|
547
|
+
#else
|
548
|
+
std::string err_msg = "Value not found.";
|
549
|
+
#endif
|
550
|
+
throw ValueError(err_msg);
|
551
|
+
}
|
552
|
+
|
553
|
+
/**
|
554
|
+
* Checks that the value == value.
|
555
|
+
* This will throw a FailedComparison if that is not the case, for example NaN.
|
556
|
+
*
|
557
|
+
* @note
|
558
|
+
* The Node class is (should be) not directly accessible by the user so we can just assert(value == value) in Node.
|
559
|
+
*
|
560
|
+
* @tparam T Type of the values in the Skip List.
|
561
|
+
* @tparam _Compare Compare function.
|
562
|
+
* @param value
|
563
|
+
*/
|
564
|
+
template <typename T, typename _Compare>
|
565
|
+
void HeadNode<T, _Compare>::_throwIfValueDoesNotCompare(const T &value) const {
|
566
|
+
if (value != value) {
|
567
|
+
throw FailedComparison(
|
568
|
+
"Can not work with something that does not compare equal to itself.");
|
569
|
+
}
|
570
|
+
}
|
571
|
+
|
572
|
+
/**
|
573
|
+
* This tests that at every level >= 0 the sequence of node pointers
|
574
|
+
* at that level does not contain a cyclic reference.
|
575
|
+
*
|
576
|
+
* @tparam T Type of the values in the Skip List.
|
577
|
+
* @tparam _Compare Compare function.
|
578
|
+
* @return An IntegrityCheck enum.
|
579
|
+
*/
|
580
|
+
template <typename T, typename _Compare>
|
581
|
+
IntegrityCheck HeadNode<T, _Compare>::_lacksIntegrityCyclicReferences() const {
|
582
|
+
assert(_nodeRefs.height());
|
583
|
+
// Check for cyclic references at each level
|
584
|
+
for (size_t level = 0; level < _nodeRefs.height(); ++level) {
|
585
|
+
Node<T, _Compare> *p1 = _nodeRefs[level].pNode;
|
586
|
+
Node<T, _Compare> *p2 = _nodeRefs[level].pNode;
|
587
|
+
while (p1 && p2) {
|
588
|
+
p1 = p1->nodeRefs()[level].pNode;
|
589
|
+
if (p2->nodeRefs()[level].pNode) {
|
590
|
+
p2 = p2->nodeRefs()[level].pNode->nodeRefs()[level].pNode;
|
591
|
+
} else {
|
592
|
+
p2 = nullptr;
|
593
|
+
}
|
594
|
+
if (p1 && p2 && p1 == p2) {
|
595
|
+
return HEADNODE_DETECTS_CYCLIC_REFERENCE;
|
596
|
+
}
|
597
|
+
}
|
598
|
+
}
|
599
|
+
return INTEGRITY_SUCCESS;
|
600
|
+
}
|
601
|
+
|
602
|
+
/**
|
603
|
+
* This tests that at every level > 0 the node to node width is the same
|
604
|
+
* as the accumulated node to node widths at level - 1.
|
605
|
+
*
|
606
|
+
* @tparam T Type of the values in the Skip List.
|
607
|
+
* @tparam _Compare Compare function.
|
608
|
+
* @return An IntegrityCheck enum.
|
609
|
+
*/
|
610
|
+
template <typename T, typename _Compare>
|
611
|
+
IntegrityCheck HeadNode<T, _Compare>::_lacksIntegrityWidthAccumulation() const {
|
612
|
+
assert(_nodeRefs.height());
|
613
|
+
for (size_t level = 1; level < _nodeRefs.height(); ++level) {
|
614
|
+
const Node<T, _Compare> *pl = _nodeRefs[level].pNode;
|
615
|
+
const Node<T, _Compare> *pl_1 = _nodeRefs[level - 1].pNode;
|
616
|
+
assert(pl && pl_1); // No nulls allowed in HeadNode
|
617
|
+
size_t wl = _nodeRefs[level].width;
|
618
|
+
size_t wl_1 = _nodeRefs[level - 1].width;
|
619
|
+
while (true) {
|
620
|
+
while (pl != pl_1) {
|
621
|
+
assert(pl_1); // Could only happen if a lower reference was NULL and the higher non-NULL.
|
622
|
+
wl_1 += pl_1->width(level - 1);
|
623
|
+
pl_1 = pl_1->pNode(level - 1);
|
624
|
+
}
|
625
|
+
if (wl != wl_1) {
|
626
|
+
return HEADNODE_LEVEL_WIDTHS_MISMATCH;
|
627
|
+
}
|
628
|
+
if (pl == nullptr && pl_1 == nullptr) {
|
629
|
+
break;
|
630
|
+
}
|
631
|
+
wl = pl->width(level);
|
632
|
+
wl_1 = pl_1->width(level - 1);
|
633
|
+
pl = pl->pNode(level);
|
634
|
+
pl_1 = pl_1->pNode(level - 1);
|
635
|
+
}
|
636
|
+
}
|
637
|
+
return INTEGRITY_SUCCESS;
|
638
|
+
}
|
639
|
+
|
640
|
+
/**
|
641
|
+
* This tests the integrity of each Node.
|
642
|
+
*
|
643
|
+
* @tparam T Type of the values in the Skip List.
|
644
|
+
* @tparam _Compare Compare function.
|
645
|
+
* @return An IntegrityCheck enum.
|
646
|
+
*/
|
647
|
+
template <typename T, typename _Compare>
|
648
|
+
IntegrityCheck HeadNode<T, _Compare>::_lacksIntegrityNodeReferencesNotInList() const {
|
649
|
+
assert(_nodeRefs.height());
|
650
|
+
|
651
|
+
IntegrityCheck result;
|
652
|
+
std::set<const Node<T, _Compare>*> nodeSet;
|
653
|
+
const Node<T, _Compare> *pNode = _nodeRefs[0].pNode;
|
654
|
+
assert(pNode);
|
655
|
+
|
656
|
+
// First gather all nodes, slightly awkward code here is so that
|
657
|
+
// NULL is always included.
|
658
|
+
nodeSet.insert(pNode);
|
659
|
+
do {
|
660
|
+
pNode = pNode->next();
|
661
|
+
nodeSet.insert(pNode);
|
662
|
+
} while (pNode);
|
663
|
+
assert(nodeSet.size() == _count + 1); // All nodes plus NULL
|
664
|
+
// Then test each node does not have pointers that are not in nodeSet
|
665
|
+
pNode = _nodeRefs[0].pNode;
|
666
|
+
while (pNode) {
|
667
|
+
result = pNode->lacksIntegrityRefsInSet(nodeSet);
|
668
|
+
if (result) {
|
669
|
+
return result;
|
670
|
+
}
|
671
|
+
pNode = pNode->next();
|
672
|
+
}
|
673
|
+
return INTEGRITY_SUCCESS;
|
674
|
+
}
|
675
|
+
|
676
|
+
/**
|
677
|
+
* Integrity check. Traverse the lowest level and check that the ordering
|
678
|
+
* is correct according to the compare function. The HeadNode checks that the
|
679
|
+
* Node(s) have correctly applied the compare function.
|
680
|
+
*
|
681
|
+
* @tparam T Type of the values in the Skip List.
|
682
|
+
* @tparam _Compare Compare function.
|
683
|
+
* @return An IntegrityCheck enum.
|
684
|
+
*/
|
685
|
+
template <typename T, typename _Compare>
|
686
|
+
IntegrityCheck HeadNode<T, _Compare>::_lacksIntegrityOrder() const {
|
687
|
+
if (_nodeRefs.height()) {
|
688
|
+
// Traverse the lowest level list iteratively deleting as we go
|
689
|
+
// Doing this recursivley could be expensive as we are at level 0.
|
690
|
+
const Node<T, _Compare> *node = _nodeRefs[0].pNode;
|
691
|
+
const Node<T, _Compare> *next;
|
692
|
+
while (node) {
|
693
|
+
next = node->next();
|
694
|
+
if (next && _compare(next->value(), node->value())) {
|
695
|
+
return HEADNODE_DETECTS_OUT_OF_ORDER;
|
696
|
+
}
|
697
|
+
node = next;
|
698
|
+
}
|
699
|
+
}
|
700
|
+
return INTEGRITY_SUCCESS;
|
701
|
+
}
|
702
|
+
|
703
|
+
/**
|
704
|
+
* Full integrity check.
|
705
|
+
* This calls the other integrity check functions.
|
706
|
+
*
|
707
|
+
* @tparam T Type of the values in the Skip List.
|
708
|
+
* @tparam _Compare Compare function.
|
709
|
+
* @return An IntegrityCheck enum.
|
710
|
+
*/
|
711
|
+
template <typename T, typename _Compare>
|
712
|
+
IntegrityCheck HeadNode<T, _Compare>::lacksIntegrity() const {
|
713
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
714
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
715
|
+
#endif
|
716
|
+
if (_nodeRefs.height()) {
|
717
|
+
IntegrityCheck result = _nodeRefs.lacksIntegrity();
|
718
|
+
if (result) {
|
719
|
+
return result;
|
720
|
+
}
|
721
|
+
if (! _nodeRefs.noNodePointerMatches(nullptr)) {
|
722
|
+
return HEADNODE_CONTAINS_NULL;
|
723
|
+
}
|
724
|
+
// Check all nodes for integrity
|
725
|
+
const Node<T, _Compare> *pNode = _nodeRefs[0].pNode;
|
726
|
+
while (pNode) {
|
727
|
+
result = pNode->lacksIntegrity(_nodeRefs.height());
|
728
|
+
if (result) {
|
729
|
+
return result;
|
730
|
+
}
|
731
|
+
pNode = pNode->next();
|
732
|
+
}
|
733
|
+
// Check count against total number of nodes
|
734
|
+
pNode = _nodeRefs[0].pNode;
|
735
|
+
size_t total = 0;
|
736
|
+
while (pNode) {
|
737
|
+
total += pNode->nodeRefs()[0].width;
|
738
|
+
pNode = pNode->next();
|
739
|
+
}
|
740
|
+
if (total != _count) {
|
741
|
+
return HEADNODE_COUNT_MISMATCH;
|
742
|
+
}
|
743
|
+
result = _lacksIntegrityWidthAccumulation();
|
744
|
+
if (result) {
|
745
|
+
return result;
|
746
|
+
}
|
747
|
+
result = _lacksIntegrityCyclicReferences();
|
748
|
+
if (result) {
|
749
|
+
return result;
|
750
|
+
}
|
751
|
+
result = _lacksIntegrityNodeReferencesNotInList();
|
752
|
+
if (result) {
|
753
|
+
return result;
|
754
|
+
}
|
755
|
+
result = _lacksIntegrityOrder();
|
756
|
+
if (result) {
|
757
|
+
return result;
|
758
|
+
}
|
759
|
+
}
|
760
|
+
return INTEGRITY_SUCCESS;
|
761
|
+
}
|
762
|
+
|
763
|
+
/**
|
764
|
+
* Returns an estimate of the memory usage of an instance.
|
765
|
+
*
|
766
|
+
* @tparam T Type of the values in the Skip List.
|
767
|
+
* @tparam _Compare Compare function.
|
768
|
+
* @return The size of the memory estimate.
|
769
|
+
*/
|
770
|
+
template <typename T, typename _Compare>
|
771
|
+
size_t HeadNode<T, _Compare>::size_of() const {
|
772
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
773
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
774
|
+
#endif
|
775
|
+
// sizeof(*this) includes the size of _nodeRefs but _nodeRefs.size_of()
|
776
|
+
// includes sizeof(_nodeRefs) so we need to subtract to avoid double counting
|
777
|
+
size_t ret_val = sizeof(*this) + _nodeRefs.size_of() - sizeof(_nodeRefs);
|
778
|
+
if (_nodeRefs.height()) {
|
779
|
+
const Node<T, _Compare> *node = _nodeRefs[0].pNode;
|
780
|
+
while (node) {
|
781
|
+
ret_val += node->size_of();
|
782
|
+
node = node->next();
|
783
|
+
}
|
784
|
+
}
|
785
|
+
return ret_val;
|
786
|
+
}
|
787
|
+
|
788
|
+
/**
|
789
|
+
* Destructor.
|
790
|
+
* This deletes all Nodes.
|
791
|
+
*
|
792
|
+
* @tparam T Type of the values in the Skip List.
|
793
|
+
* @tparam _Compare Compare function.
|
794
|
+
*/
|
795
|
+
template <typename T, typename _Compare>
|
796
|
+
HeadNode<T, _Compare>::~HeadNode() {
|
797
|
+
// Hmm could this deadlock?
|
798
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
799
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
800
|
+
#endif
|
801
|
+
if (_nodeRefs.height()) {
|
802
|
+
// Traverse the lowest level list iteratively deleting as we go
|
803
|
+
// Doing this recursivley could be expensive as we are at level 0.
|
804
|
+
const Node<T, _Compare> *node = _nodeRefs[0].pNode;
|
805
|
+
const Node<T, _Compare> *next;
|
806
|
+
while (node) {
|
807
|
+
next = node->next();
|
808
|
+
delete node;
|
809
|
+
--_count;
|
810
|
+
node = next;
|
811
|
+
}
|
812
|
+
}
|
813
|
+
assert(_count == 0);
|
814
|
+
}
|
815
|
+
|
816
|
+
#ifdef INCLUDE_METHODS_THAT_USE_STREAMS
|
817
|
+
|
818
|
+
/**
|
819
|
+
* Create a DOT file of the internal representation.
|
820
|
+
*
|
821
|
+
* @tparam T Type of the values in the Skip List.
|
822
|
+
* @tparam _Compare Compare function.
|
823
|
+
* @param os Where to write the DOT file.
|
824
|
+
*/
|
825
|
+
template <typename T, typename _Compare>
|
826
|
+
void HeadNode<T, _Compare>::dotFile(std::ostream &os) const {
|
827
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
828
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
829
|
+
#endif
|
830
|
+
if (_dot_file_subgraph == 0) {
|
831
|
+
os << "digraph SkipList {" << std::endl;
|
832
|
+
os << "label = \"SkipList.\"" << std::endl;
|
833
|
+
os << "graph [rankdir = \"LR\"];" << std::endl;
|
834
|
+
os << "node [fontsize = \"12\" shape = \"ellipse\"];" << std::endl;
|
835
|
+
os << "edge [];" << std::endl;
|
836
|
+
os << std::endl;
|
837
|
+
}
|
838
|
+
os << "subgraph cluster" << _dot_file_subgraph << " {" << std::endl;
|
839
|
+
os << "style=dashed" << std::endl;
|
840
|
+
os << "label=\"Skip list iteration " << _dot_file_subgraph << "\"" << std::endl;
|
841
|
+
os << std::endl;
|
842
|
+
os << "\"HeadNode" << _dot_file_subgraph;
|
843
|
+
os << "\" [" << std::endl;
|
844
|
+
os << "label = \"";
|
845
|
+
// Write out the fields
|
846
|
+
if (_nodeRefs.height()) {
|
847
|
+
for (size_t level = _nodeRefs.height(); level-- > 0;) {
|
848
|
+
os << "{ " << _nodeRefs[level].width << " | ";
|
849
|
+
os << "<f" << level + 1 << "> ";
|
850
|
+
os << std::hex << _nodeRefs[level].pNode << std::dec;
|
851
|
+
os << "}";
|
852
|
+
if (level > 0) {
|
853
|
+
os << " | ";
|
854
|
+
}
|
855
|
+
}
|
856
|
+
} else {
|
857
|
+
os << "Empty HeadNode";
|
858
|
+
}
|
859
|
+
os << "\"" << std::endl;
|
860
|
+
os << "shape = \"record\"" << std::endl;
|
861
|
+
os << "];" << std::endl;
|
862
|
+
// Edges for head node
|
863
|
+
for (size_t level = 0; level < _nodeRefs.height(); ++level) {
|
864
|
+
os << "\"HeadNode";
|
865
|
+
os << _dot_file_subgraph;
|
866
|
+
os << "\":f" << level + 1 << " -> ";
|
867
|
+
_nodeRefs[level].pNode->writeNode(os, _dot_file_subgraph);
|
868
|
+
os << ":w" << level + 1 << " [];" << std::endl;
|
869
|
+
}
|
870
|
+
os << std::endl;
|
871
|
+
// Now all nodes via level 0, if non-empty
|
872
|
+
if (_nodeRefs.height()) {
|
873
|
+
Node<T, _Compare> *pNode = this->_nodeRefs[0].pNode;
|
874
|
+
pNode->dotFile(os, _dot_file_subgraph);
|
875
|
+
}
|
876
|
+
os << std::endl;
|
877
|
+
// NULL, the sentinal node
|
878
|
+
if (_nodeRefs.height()) {
|
879
|
+
os << "\"node";
|
880
|
+
os << _dot_file_subgraph;
|
881
|
+
os << "0x0\" [label = \"";
|
882
|
+
for (size_t level = _nodeRefs.height(); level-- > 0;) {
|
883
|
+
os << "<w" << level + 1 << "> NULL";
|
884
|
+
if (level) {
|
885
|
+
os << " | ";
|
886
|
+
}
|
887
|
+
}
|
888
|
+
os << "\" shape = \"record\"];" << std::endl;
|
889
|
+
}
|
890
|
+
// End: "subgraph cluster1 {"
|
891
|
+
os << "}" << std::endl;
|
892
|
+
os << std::endl;
|
893
|
+
_dot_file_subgraph += 1;
|
894
|
+
}
|
895
|
+
|
896
|
+
/**
|
897
|
+
* Finalise the DOT file of the internal representation.
|
898
|
+
*
|
899
|
+
* @tparam T Type of the values in the Skip List.
|
900
|
+
* @tparam _Compare Compare function.
|
901
|
+
* @param os Where to write the DOT file.
|
902
|
+
*/
|
903
|
+
template <typename T, typename _Compare>
|
904
|
+
void HeadNode<T, _Compare>::dotFileFinalise(std::ostream &os) const {
|
905
|
+
#ifdef SKIPLIST_THREAD_SUPPORT
|
906
|
+
std::lock_guard<std::mutex> lock(gSkipListMutex);
|
907
|
+
#endif
|
908
|
+
if (_dot_file_subgraph > 0) {
|
909
|
+
// Link the nodes together with an invisible node.
|
910
|
+
// node0 [shape=record, label = "<f0> | <f1> | <f2> | <f3> | <f4> | <f5> | <f6> | <f7> | <f8> | ",
|
911
|
+
// style=invis,
|
912
|
+
// width=0.01];
|
913
|
+
os << "node0 [shape=record, label = \"";
|
914
|
+
for (size_t i = 0; i < _dot_file_subgraph; ++i) {
|
915
|
+
os << "<f" << i << "> | ";
|
916
|
+
}
|
917
|
+
os << "\", style=invis, width=0.01];" << std::endl;
|
918
|
+
// Now:
|
919
|
+
// node0:f0 -> HeadNode [style=invis];
|
920
|
+
// node0:f1 -> HeadNode1 [style=invis];
|
921
|
+
for (size_t i = 0; i < _dot_file_subgraph; ++i) {
|
922
|
+
os << "node0:f" << i << " -> HeadNode" << i;
|
923
|
+
os << " [style=invis];" << std::endl;
|
924
|
+
}
|
925
|
+
_dot_file_subgraph = 0;
|
926
|
+
}
|
927
|
+
os << "}" << std::endl;
|
928
|
+
}
|
929
|
+
|
930
|
+
#endif // INCLUDE_METHODS_THAT_USE_STREAMS
|
931
|
+
|
932
|
+
/************************** END: HeadNode *******************************/
|
933
|
+
|
934
|
+
#endif // SkipList_HeadNode_h
|