duckdb 0.9.3-dev0.0 → 0.9.3-dev14.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 +12 -10
- package/src/duckdb/extension/icu/icu-datefunc.cpp +22 -10
- package/src/duckdb/extension/icu/icu-datepart.cpp +42 -22
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +40 -7
- package/src/duckdb/extension/icu/icu-strptime.cpp +14 -8
- package/src/duckdb/extension/icu/icu-table-range.cpp +1 -1
- package/src/duckdb/extension/icu/icu-timezone.cpp +43 -16
- package/src/duckdb/extension/icu/icu_extension.cpp +1 -1
- package/src/duckdb/extension/icu/include/icu-datefunc.hpp +3 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/buffered_json_reader.cpp +78 -62
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +11 -7
- package/src/duckdb/extension/json/include/json_common.hpp +0 -14
- package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
- package/src/duckdb/extension/json/include/json_scan.hpp +19 -5
- package/src/duckdb/extension/json/include/json_serializer.hpp +2 -1
- package/src/duckdb/extension/json/include/json_structure.hpp +12 -10
- package/src/duckdb/extension/json/json_common.cpp +1 -0
- package/src/duckdb/extension/json/json_deserializer.cpp +13 -0
- package/src/duckdb/extension/json/json_extension.cpp +3 -3
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +8 -4
- package/src/duckdb/extension/json/json_functions/json_array_length.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_contains.cpp +3 -3
- package/src/duckdb/extension/json/json_functions/json_create.cpp +53 -8
- package/src/duckdb/extension/json/json_functions/json_extract.cpp +10 -6
- package/src/duckdb/extension/json/json_functions/json_keys.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -3
- package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +210 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +22 -19
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +71 -43
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +105 -8
- package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_valid.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/read_json.cpp +43 -18
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +9 -5
- package/src/duckdb/extension/json/json_scan.cpp +147 -125
- package/src/duckdb/extension/json/json_serializer.cpp +9 -0
- package/src/duckdb/extension/json/serialize_json.cpp +6 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +53 -18
- package/src/duckdb/extension/parquet/column_writer.cpp +29 -6
- package/src/duckdb/extension/parquet/include/column_reader.hpp +0 -1
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +87 -0
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -3
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +16 -3
- package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +10 -0
- package/src/duckdb/extension/parquet/include/parquet_reader.hpp +34 -6
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +3 -2
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -0
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +21 -1
- package/src/duckdb/extension/parquet/parquet_crypto.cpp +370 -0
- package/src/duckdb/extension/parquet/parquet_extension.cpp +254 -24
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +204 -16
- package/src/duckdb/extension/parquet/parquet_reader.cpp +108 -34
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +75 -30
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +15 -8
- package/src/duckdb/extension/parquet/parquet_writer.cpp +62 -10
- package/src/duckdb/extension/parquet/serialize_parquet.cpp +60 -0
- package/src/duckdb/src/catalog/catalog.cpp +23 -25
- package/src/duckdb/src/catalog/catalog_entry/column_dependency_manager.cpp +1 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_dependent_entry.cpp +31 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_entry.cpp +44 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_subject_entry.cpp +31 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +35 -10
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +22 -6
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +110 -33
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +33 -17
- package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +16 -0
- package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +88 -14
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -15
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +20 -20
- package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry.cpp +29 -0
- package/src/duckdb/src/catalog/catalog_set.cpp +358 -343
- package/src/duckdb/src/catalog/catalog_transaction.cpp +4 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +13 -4
- package/src/duckdb/src/catalog/default/default_schemas.cpp +5 -1
- package/src/duckdb/src/catalog/default/default_views.cpp +6 -2
- package/src/duckdb/src/catalog/dependency_catalog_set.cpp +51 -0
- package/src/duckdb/src/catalog/dependency_manager.cpp +510 -114
- package/src/duckdb/src/catalog/duck_catalog.cpp +4 -4
- package/src/duckdb/src/common/adbc/adbc.cpp +73 -53
- package/src/duckdb/src/common/adbc/driver_manager.cpp +1101 -268
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +20 -9
- package/src/duckdb/src/common/bind_helpers.cpp +1 -0
- package/src/duckdb/src/common/box_renderer.cpp +52 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
- package/src/duckdb/src/common/constants.cpp +0 -1
- package/src/duckdb/src/common/enum_util.cpp +522 -107
- package/src/duckdb/src/common/enums/catalog_type.cpp +64 -1
- package/src/duckdb/src/common/enums/compression_type.cpp +14 -0
- package/src/duckdb/src/common/enums/date_part_specifier.cpp +1 -0
- package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
- package/src/duckdb/src/common/enums/file_compression_type.cpp +1 -0
- package/src/duckdb/src/common/enums/join_type.cpp +33 -0
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +5 -3
- package/src/duckdb/src/common/enums/optimizer_type.cpp +9 -1
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +8 -4
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -2
- package/src/duckdb/src/common/error_data.cpp +113 -0
- package/src/duckdb/src/common/exception/binder_exception.cpp +47 -0
- package/src/duckdb/src/common/exception/catalog_exception.cpp +55 -0
- package/src/duckdb/src/common/exception/parser_exception.cpp +19 -0
- package/src/duckdb/src/common/exception.cpp +110 -121
- package/src/duckdb/src/common/exception_format_value.cpp +9 -1
- package/src/duckdb/src/common/extra_type_info.cpp +48 -0
- package/src/duckdb/src/common/file_system.cpp +12 -7
- package/src/duckdb/src/common/gzip_file_system.cpp +18 -18
- package/src/duckdb/src/common/hive_partitioning.cpp +5 -1
- package/src/duckdb/src/common/http_state.cpp +20 -3
- package/src/duckdb/src/common/local_file_system.cpp +214 -15
- package/src/duckdb/src/common/multi_file_reader.cpp +20 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +397 -414
- package/src/duckdb/src/common/operator/convert_to_string.cpp +4 -0
- package/src/duckdb/src/common/operator/string_cast.cpp +5 -0
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +61 -12
- package/src/duckdb/src/common/progress_bar/terminal_progress_bar_display.cpp +13 -4
- package/src/duckdb/src/common/radix_partitioning.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_aggregate.cpp +2 -1
- package/src/duckdb/src/common/row_operations/row_gather.cpp +7 -1
- package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +78 -12
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +222 -61
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +6 -1
- package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +51 -0
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +8 -1
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +6 -0
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +5 -0
- package/src/duckdb/src/common/serializer/serializer.cpp +19 -0
- package/src/duckdb/src/common/sort/comparators.cpp +126 -0
- package/src/duckdb/src/common/sort/partition_state.cpp +17 -17
- package/src/duckdb/src/common/sort/radix_sort.cpp +2 -1
- package/src/duckdb/src/common/sort/sort_state.cpp +10 -5
- package/src/duckdb/src/common/sort/sorted_block.cpp +7 -6
- package/src/duckdb/src/common/string_util.cpp +302 -24
- package/src/duckdb/src/common/tree_renderer.cpp +8 -6
- package/src/duckdb/src/common/types/cast_helpers.cpp +6 -0
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +58 -0
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +8 -1
- package/src/duckdb/src/common/types/data_chunk.cpp +9 -0
- package/src/duckdb/src/common/types/date.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +9 -1
- package/src/duckdb/src/common/types/hugeint.cpp +229 -51
- package/src/duckdb/src/common/types/hyperloglog.cpp +10 -3
- package/src/duckdb/src/common/types/interval.cpp +67 -12
- package/src/duckdb/src/common/types/list_segment.cpp +98 -4
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +11 -1
- package/src/duckdb/src/common/types/row/row_data_collection.cpp +1 -1
- package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +2 -2
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +3 -2
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +63 -3
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +331 -127
- package/src/duckdb/src/common/types/time.cpp +47 -75
- package/src/duckdb/src/common/types/timestamp.cpp +16 -3
- package/src/duckdb/src/common/types/uhugeint.cpp +746 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +6 -2
- package/src/duckdb/src/common/types/value.cpp +183 -27
- package/src/duckdb/src/common/types/vector.cpp +331 -30
- package/src/duckdb/src/common/types/vector_buffer.cpp +29 -1
- package/src/duckdb/src/common/types/vector_cache.cpp +22 -1
- package/src/duckdb/src/common/types.cpp +606 -90
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +21 -1
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +5 -0
- package/src/duckdb/src/common/vector_operations/generators.cpp +2 -2
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +131 -2
- package/src/duckdb/src/common/vector_operations/vector_copy.cpp +26 -4
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +41 -0
- package/src/duckdb/src/common/vector_operations/vector_storage.cpp +7 -0
- package/src/duckdb/src/common/virtual_file_system.cpp +0 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +144 -56
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +2 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +27 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +4 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +25 -5
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +100 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +9 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +83 -52
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +485 -289
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +3 -3
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +34 -37
- package/src/duckdb/src/core_functions/function_list.cpp +30 -1
- package/src/duckdb/src/core_functions/lambda_functions.cpp +416 -0
- package/src/duckdb/src/core_functions/scalar/array/array_functions.cpp +294 -0
- package/src/duckdb/src/core_functions/scalar/array/array_value.cpp +87 -0
- package/src/duckdb/src/core_functions/scalar/blob/create_sort_key.cpp +686 -0
- package/src/duckdb/src/core_functions/scalar/blob/encode.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/current.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +295 -20
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +8 -7
- package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +84 -23
- package/src/duckdb/src/core_functions/scalar/generic/error.cpp +4 -4
- package/src/duckdb/src/core_functions/scalar/generic/least.cpp +7 -8
- package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +17 -6
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +8 -0
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +28 -14
- package/src/duckdb/src/core_functions/scalar/list/list_filter.cpp +49 -0
- package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +230 -0
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +85 -16
- package/src/duckdb/src/core_functions/scalar/list/list_transform.cpp +41 -0
- package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +21 -2
- package/src/duckdb/src/core_functions/scalar/map/map.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/map/map_from_entries.cpp +1 -2
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +24 -4
- package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +6 -0
- package/src/duckdb/src/core_functions/scalar/random/random.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/random/setseed.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +28 -0
- package/src/duckdb/src/core_functions/scalar/string/bar.cpp +9 -4
- package/src/duckdb/src/core_functions/scalar/string/format_bytes.cpp +7 -2
- package/src/duckdb/src/core_functions/scalar/string/hex.cpp +63 -4
- package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/string/parse_path.cpp +348 -0
- package/src/duckdb/src/core_functions/scalar/string/regexp_escape.cpp +22 -0
- package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/struct/struct_insert.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/struct/struct_pack.cpp +1 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +9 -2
- package/src/duckdb/src/execution/column_binding_resolver.cpp +44 -10
- package/src/duckdb/src/execution/expression_executor/execute_between.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor/execute_case.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor.cpp +2 -1
- package/src/duckdb/src/execution/index/art/art.cpp +202 -53
- package/src/duckdb/src/execution/index/art/art_key.cpp +20 -27
- package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +52 -17
- package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -8
- package/src/duckdb/src/execution/index/index_type_set.cpp +32 -0
- package/src/duckdb/src/execution/index/unknown_index.cpp +65 -0
- package/src/duckdb/src/execution/join_hashtable.cpp +151 -174
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -0
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +4 -0
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +2 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +82 -36
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +58 -32
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +35 -19
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +90 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +124 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +97 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +71 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +98 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +105 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +63 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +1091 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +124 -26
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +117 -129
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +46 -22
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +83 -199
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +21 -122
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +18 -17
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +22 -0
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +201 -0
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +221 -0
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +204 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +186 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +532 -0
- package/src/duckdb/src/execution/operator/helper/physical_buffered_collector.cpp +85 -0
- package/src/duckdb/src/execution/operator/helper/physical_create_secret.cpp +21 -0
- package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +1 -1
- package/src/duckdb/src/execution/operator/helper/physical_pragma.cpp +2 -2
- package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +34 -9
- package/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp +10 -0
- package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +1 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +25 -10
- package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +7 -8
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +5 -2
- package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +5 -127
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +221 -61
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +18 -21
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +10 -5
- package/src/duckdb/src/execution/operator/join/physical_left_delim_join.cpp +137 -0
- package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +11 -4
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +19 -4
- package/src/duckdb/src/execution/operator/join/physical_right_delim_join.cpp +121 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +59 -0
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +132 -92
- package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +54 -54
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +4 -0
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +21 -3
- package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -0
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +61 -43
- package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +15 -13
- package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -0
- package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +10 -0
- package/src/duckdb/src/execution/operator/set/physical_cte.cpp +44 -90
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +3 -0
- package/src/duckdb/src/execution/operator/set/physical_union.cpp +8 -4
- package/src/duckdb/src/execution/physical_operator.cpp +3 -1
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +30 -143
- package/src/duckdb/src/execution/physical_plan/plan_copy_database.cpp +12 -0
- package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +11 -4
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +8 -8
- package/src/duckdb/src/execution/physical_plan/plan_create_secret.cpp +11 -0
- package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +9 -8
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +5 -3
- package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +15 -6
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +1 -0
- package/src/duckdb/src/execution/physical_plan/plan_pragma.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +3 -1
- package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +90 -12
- package/src/duckdb/src/execution/physical_plan/plan_window.cpp +67 -22
- package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -3
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +163 -32
- package/src/duckdb/src/execution/reservoir_sample.cpp +112 -32
- package/src/duckdb/src/execution/window_executor.cpp +291 -26
- package/src/duckdb/src/execution/window_segment_tree.cpp +958 -114
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +18 -16
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +11 -4
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +303 -131
- package/src/duckdb/src/function/cast/array_casts.cpp +226 -0
- package/src/duckdb/src/function/cast/bit_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/cast_function_set.cpp +13 -2
- package/src/duckdb/src/function/cast/decimal_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/default_casts.cpp +4 -1
- package/src/duckdb/src/function/cast/list_casts.cpp +151 -6
- package/src/duckdb/src/function/cast/numeric_casts.cpp +4 -0
- package/src/duckdb/src/function/cast/string_cast.cpp +95 -5
- package/src/duckdb/src/function/cast/struct_cast.cpp +53 -19
- package/src/duckdb/src/function/cast/time_casts.cpp +23 -1
- package/src/duckdb/src/function/cast/union/from_struct.cpp +1 -0
- package/src/duckdb/src/function/cast/union_casts.cpp +4 -3
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +8 -4
- package/src/duckdb/src/function/cast_rules.cpp +197 -31
- package/src/duckdb/src/function/compression_config.cpp +4 -0
- package/src/duckdb/src/function/function.cpp +15 -9
- package/src/duckdb/src/function/function_binder.cpp +80 -29
- package/src/duckdb/src/function/function_set.cpp +6 -6
- package/src/duckdb/src/function/pragma/pragma_functions.cpp +10 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +34 -38
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +12 -0
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +10 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +11 -1
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +14 -3
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +4 -0
- package/src/duckdb/src/function/scalar/list/list_select.cpp +176 -0
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +165 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +33 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +53 -6
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +48 -14
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +9 -1
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +19 -4
- package/src/duckdb/src/function/scalar/sequence/nextval.cpp +28 -55
- package/src/duckdb/src/function/scalar/strftime_format.cpp +242 -19
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/concat.cpp +16 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +124 -24
- package/src/duckdb/src/function/scalar/string/regexp.cpp +27 -27
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +64 -15
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +4 -3
- package/src/duckdb/src/function/scalar_function.cpp +8 -7
- package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +12 -0
- package/src/duckdb/src/function/table/arrow.cpp +20 -27
- package/src/duckdb/src/function/table/arrow_conversion.cpp +433 -150
- package/src/duckdb/src/function/table/copy_csv.cpp +62 -62
- package/src/duckdb/src/function/table/range.cpp +6 -3
- package/src/duckdb/src/function/table/read_csv.cpp +107 -759
- package/src/duckdb/src/function/table/read_file.cpp +242 -0
- package/src/duckdb/src/function/table/sniff_csv.cpp +275 -0
- package/src/duckdb/src/function/table/system/duckdb_columns.cpp +15 -3
- package/src/duckdb/src/function/table/system/duckdb_databases.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +9 -13
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +67 -14
- package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +12 -15
- package/src/duckdb/src/function/table/system/duckdb_memory.cpp +63 -0
- package/src/duckdb/src/function/table/system/duckdb_optimizers.cpp +57 -0
- package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +128 -0
- package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +12 -6
- package/src/duckdb/src/function/table/system/duckdb_settings.cpp +0 -1
- package/src/duckdb/src/function/table/system/duckdb_tables.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_types.cpp +6 -0
- package/src/duckdb/src/function/table/system/duckdb_views.cpp +5 -0
- package/src/duckdb/src/function/table/system/pragma_table_info.cpp +166 -64
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -1
- package/src/duckdb/src/function/table/system_functions.cpp +3 -2
- package/src/duckdb/src/function/table/table_scan.cpp +50 -110
- package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -44
- package/src/duckdb/src/function/table_function.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_dependent_entry.hpp +27 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_entry.hpp +66 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_subject_entry.hpp +27 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +25 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +19 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +26 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +15 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +41 -49
- package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +120 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_catalog_set.hpp +32 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +92 -12
- package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/adbc/adbc-init.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1153 -12
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/adbc/driver_manager.h +0 -2
- package/src/duckdb/src/include/duckdb/common/adbc/options.h +64 -0
- package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow.hpp +25 -6
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +30 -0
- package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/constants.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +75 -19
- package/src/duckdb/src/include/duckdb/common/enums/catalog_type.hpp +11 -1
- package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/index_constraint_type.hpp +35 -0
- package/src/duckdb/src/include/duckdb/common/enums/join_type.hpp +16 -3
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +32 -0
- package/src/duckdb/src/include/duckdb/common/enums/on_create_conflict.hpp +26 -0
- package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/pending_execution_result.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +9 -3
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/error_data.hpp +72 -0
- package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +47 -0
- package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +39 -0
- package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +62 -0
- package/src/duckdb/src/include/duckdb/common/exception/list.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +29 -0
- package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +52 -166
- package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +53 -1
- package/src/duckdb/src/include/duckdb/common/helper.hpp +13 -3
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +18 -4
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/limits.hpp +19 -1
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +16 -3
- package/src/duckdb/src/include/duckdb/common/operator/add.hpp +13 -2
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +114 -5
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +0 -4
- package/src/duckdb/src/include/duckdb/common/operator/convert_to_string.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +29 -0
- package/src/duckdb/src/include/duckdb/common/operator/double_cast_operator.hpp +52 -0
- package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +459 -0
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +136 -0
- package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/platform.h +53 -0
- package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +22 -6
- package/src/duckdb/src/include/duckdb/common/radix.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +20 -6
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +43 -4
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +15 -0
- package/src/duckdb/src/include/duckdb/common/sort/comparators.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +12 -2
- package/src/duckdb/src/include/duckdb/common/sort/sort.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/sort/sorted_block.hpp +0 -78
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +23 -1
- package/src/duckdb/src/include/duckdb/common/type_util.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +26 -3
- package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +5 -3
- package/src/duckdb/src/include/duckdb/common/types/hash.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/hugeint.hpp +81 -15
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +57 -29
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +26 -22
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/uhugeint.hpp +216 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +18 -10
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +31 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +18 -2
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +22 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +151 -49
- package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +70 -6
- package/src/duckdb/src/include/duckdb/common/vector_size.hpp +6 -6
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +29 -2
- package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +131 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/array_functions.hpp +69 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +9 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -4
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +42 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/secret_functions.hpp +27 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +56 -2
- package/src/duckdb/src/include/duckdb/core_functions/to_interval.hpp +29 -0
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +11 -13
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +34 -19
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +18 -14
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/index/index_type.hpp +57 -0
- package/src/duckdb/src/include/duckdb/execution/index/index_type_set.hpp +29 -0
- package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +65 -0
- package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +35 -24
- package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +630 -0
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +3 -2
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +103 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +74 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +155 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +163 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +228 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +93 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +197 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +189 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +21 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +30 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +99 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +87 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +80 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +137 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +104 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +0 -4
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_collector.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_create_secret.hpp +38 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_pragma.hpp +4 -7
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +5 -18
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +14 -5
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_join.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_left_delim_join.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_right_delim_join.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_database.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +8 -3
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +14 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +1 -4
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +17 -12
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_union.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +32 -18
- package/src/duckdb/src/include/duckdb/execution/task_error_manager.hpp +57 -0
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +101 -19
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +46 -14
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +6 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +26 -1
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +7 -1
- package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +10 -0
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +16 -4
- package/src/duckdb/src/include/duckdb/function/function.hpp +12 -7
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +15 -12
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -3
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/pragma/pragma_functions.hpp +4 -1
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +21 -1
- package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +22 -0
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +16 -2
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +22 -8
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +6 -0
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +35 -3
- package/src/duckdb/src/include/duckdb/function/table/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/table/range.hpp +12 -0
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +14 -16
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +12 -8
- package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +0 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -3
- package/src/duckdb/src/include/duckdb/main/appender.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +89 -0
- package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +53 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/capi/cast/generic.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +8 -10
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +22 -23
- package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +37 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -7
- package/src/duckdb/src/include/duckdb/main/config.hpp +24 -7
- package/src/duckdb/src/include/duckdb/main/connection.hpp +8 -1
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +17 -26
- package/src/duckdb/src/include/duckdb/main/database.hpp +4 -2
- package/src/duckdb/src/include/duckdb/main/database_manager.hpp +39 -7
- package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +5 -4
- package/src/duckdb/src/include/duckdb/main/error_manager.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +203 -197
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +42 -16
- package/src/duckdb/src/include/duckdb/main/extension_util.hpp +8 -1
- package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -2
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +0 -32
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +13 -12
- package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/relation/setop_relation.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +206 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +211 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +164 -0
- package/src/duckdb/src/include/duckdb/main/settings.hpp +52 -13
- package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +9 -1
- package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +4 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +14 -22
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +20 -0
- package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -5
- package/src/duckdb/src/include/duckdb/parallel/task.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +10 -4
- package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +8 -1
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +11 -4
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +16 -9
- package/src/duckdb/src/include/duckdb/parser/expression/lambdaref_expression.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/expression/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +29 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +47 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/bound_pragma_info.hpp +29 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +45 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +21 -22
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +5 -11
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +23 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +66 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +8 -4
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +1 -3
- package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +5 -22
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/statement/copy_database_statement.hpp +40 -0
- package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +4 -3
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/showref.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +20 -3
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +5 -1
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +24 -27
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +5 -6
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +11 -0
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +65 -22
- package/src/duckdb/src/include/duckdb/planner/filter/struct_filter.hpp +41 -0
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +45 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +43 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +5 -10
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +11 -4
- package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_set_operation_node.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_cte_scan.hpp +29 -0
- package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +9 -7
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_dummytableref.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +9 -5
- package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +23 -6
- package/src/duckdb/src/include/duckdb/storage/buffer/temporary_file_information.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +11 -4
- package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +0 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +7 -7
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +408 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +173 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +283 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +134 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +244 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +103 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +235 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +134 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +301 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_constants.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +252 -0
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +7 -103
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +5 -234
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +7 -107
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +5 -184
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +12 -17
- package/src/duckdb/src/include/duckdb/storage/database_size.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/index.hpp +40 -42
- package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +77 -0
- package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +6 -2
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +12 -6
- package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +17 -17
- package/src/duckdb/src/include/duckdb/storage/statistics/array_stats.hpp +40 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +12 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +49 -24
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +8 -4
- package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +67 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +1 -2
- package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +12 -1
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +16 -12
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +6 -9
- package/src/duckdb/src/include/duckdb/storage/temporary_memory_manager.hpp +119 -0
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +13 -55
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +4 -5
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
- package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -3
- package/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp +4 -4
- package/src/duckdb/src/include/duckdb/transaction/transaction_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +25 -0
- package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +5 -0
- package/src/duckdb/src/include/duckdb.h +571 -143
- package/src/duckdb/src/main/appender.cpp +17 -2
- package/src/duckdb/src/main/attached_database.cpp +24 -12
- package/src/duckdb/src/main/buffered_data/simple_buffered_data.cpp +96 -0
- package/src/duckdb/src/main/capi/appender-c.cpp +42 -3
- package/src/duckdb/src/main/capi/arrow-c.cpp +32 -9
- package/src/duckdb/src/main/capi/datetime-c.cpp +22 -0
- package/src/duckdb/src/main/capi/duckdb-c.cpp +14 -4
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +66 -2
- package/src/duckdb/src/main/capi/helper-c.cpp +76 -2
- package/src/duckdb/src/main/capi/hugeint-c.cpp +23 -0
- package/src/duckdb/src/main/capi/logical_types-c.cpp +27 -3
- package/src/duckdb/src/main/capi/pending-c.cpp +43 -9
- package/src/duckdb/src/main/capi/prepared-c.cpp +38 -2
- package/src/duckdb/src/main/capi/result-c.cpp +54 -3
- package/src/duckdb/src/main/capi/table_function-c.cpp +4 -4
- package/src/duckdb/src/main/capi/value-c.cpp +10 -0
- package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +3 -3
- package/src/duckdb/src/main/client_context.cpp +259 -250
- package/src/duckdb/src/main/client_data.cpp +0 -1
- package/src/duckdb/src/main/client_verify.cpp +26 -8
- package/src/duckdb/src/main/config.cpp +34 -13
- package/src/duckdb/src/main/connection.cpp +27 -6
- package/src/duckdb/src/main/connection_manager.cpp +54 -0
- package/src/duckdb/src/main/database.cpp +44 -39
- package/src/duckdb/src/main/database_manager.cpp +106 -8
- package/src/duckdb/src/main/database_path_and_type.cpp +27 -8
- package/src/duckdb/src/main/db_instance_cache.cpp +4 -4
- package/src/duckdb/src/main/error_manager.cpp +12 -3
- package/src/duckdb/src/main/extension/extension_alias.cpp +2 -2
- package/src/duckdb/src/main/extension/extension_helper.cpp +15 -16
- package/src/duckdb/src/main/extension/extension_install.cpp +33 -24
- package/src/duckdb/src/main/extension/extension_load.cpp +22 -21
- package/src/duckdb/src/main/extension/extension_util.cpp +12 -0
- package/src/duckdb/src/main/materialized_query_result.cpp +1 -1
- package/src/duckdb/src/main/pending_query_result.cpp +25 -8
- package/src/duckdb/src/main/prepared_statement.cpp +5 -5
- package/src/duckdb/src/main/prepared_statement_data.cpp +8 -1
- package/src/duckdb/src/main/query_profiler.cpp +11 -11
- package/src/duckdb/src/main/query_result.cpp +32 -6
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/join_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +38 -32
- package/src/duckdb/src/main/relation/setop_relation.cpp +5 -3
- package/src/duckdb/src/main/relation.cpp +5 -5
- package/src/duckdb/src/main/secret/secret.cpp +135 -0
- package/src/duckdb/src/main/secret/secret_manager.cpp +634 -0
- package/src/duckdb/src/main/secret/secret_storage.cpp +233 -0
- package/src/duckdb/src/main/settings/settings.cpp +133 -38
- package/src/duckdb/src/main/stream_query_result.cpp +53 -14
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +1 -1
- package/src/duckdb/src/optimizer/deliminator.cpp +136 -14
- package/src/duckdb/src/optimizer/filter_combiner.cpp +72 -26
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +3 -0
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +2 -1
- package/src/duckdb/src/optimizer/join_order/cost_model.cpp +0 -1
- package/src/duckdb/src/optimizer/join_order/join_node.cpp +4 -0
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -6
- package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +20 -0
- package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +71 -40
- package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +12 -3
- package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +77 -3
- package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +7 -7
- package/src/duckdb/src/optimizer/pushdown/pushdown_semi_anti_join.cpp +56 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +21 -0
- package/src/duckdb/src/optimizer/rule/date_part_simplification.cpp +2 -2
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +15 -10
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +70 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +17 -5
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -0
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +22 -9
- package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +28 -4
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +12 -7
- package/src/duckdb/src/parallel/event.cpp +2 -2
- package/src/duckdb/src/parallel/executor.cpp +114 -81
- package/src/duckdb/src/parallel/executor_task.cpp +2 -4
- package/src/duckdb/src/parallel/meta_pipeline.cpp +28 -29
- package/src/duckdb/src/parallel/pipeline.cpp +41 -41
- package/src/duckdb/src/parallel/pipeline_event.cpp +2 -4
- package/src/duckdb/src/parallel/pipeline_executor.cpp +13 -75
- package/src/duckdb/src/parallel/task_scheduler.cpp +22 -13
- package/src/duckdb/src/parser/column_definition.cpp +22 -4
- package/src/duckdb/src/parser/column_list.cpp +2 -1
- package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +51 -0
- package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +59 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +9 -1
- package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +40 -0
- package/src/duckdb/src/parser/parsed_data/attach_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +19 -0
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +11 -9
- package/src/duckdb/src/parser/parsed_data/create_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/create_secret_info.cpp +22 -0
- package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +17 -0
- package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +19 -0
- package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +13 -9
- package/src/duckdb/src/parser/parsed_data/drop_info.cpp +8 -9
- package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +16 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +3 -1
- package/src/duckdb/src/parser/parser.cpp +14 -8
- package/src/duckdb/src/parser/query_error_context.cpp +12 -13
- package/src/duckdb/src/parser/query_node/select_node.cpp +5 -1
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +8 -13
- package/src/duckdb/src/parser/statement/copy_database_statement.cpp +41 -0
- package/src/duckdb/src/parser/statement/set_statement.cpp +5 -1
- package/src/duckdb/src/parser/tableref/basetableref.cpp +1 -0
- package/src/duckdb/src/parser/tableref/showref.cpp +47 -0
- package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +6 -2
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +30 -15
- package/src/duckdb/src/parser/transform/expression/transform_case.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +3 -2
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +34 -4
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +26 -12
- package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +34 -5
- package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +3 -1
- package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +3 -1
- package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +3 -3
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -3
- package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +13 -13
- package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +2 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +32 -1
- package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +1 -0
- package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +108 -0
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +45 -37
- package/src/duckdb/src/parser/transform/statement/transform_copy_database.cpp +29 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +5 -14
- package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +0 -1
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +25 -6
- package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -1
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +6 -14
- package/src/duckdb/src/parser/transform/statement/transform_secret.cpp +103 -0
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -1
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +4 -8
- package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -5
- package/src/duckdb/src/parser/transform/statement/transform_show.cpp +14 -41
- package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +13 -6
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -1
- package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +1 -1
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +1 -2
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +6 -5
- package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +1 -1
- package/src/duckdb/src/parser/transformer.cpp +22 -0
- package/src/duckdb/src/planner/bind_context.cpp +23 -14
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +15 -14
- package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +20 -9
- package/src/duckdb/src/planner/binder/expression/bind_case_expression.cpp +12 -7
- package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +4 -4
- package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +3 -3
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +279 -195
- package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +103 -17
- package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +3 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +91 -68
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +116 -84
- package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +85 -15
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +68 -31
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +7 -7
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +11 -7
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +42 -19
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +38 -16
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +16 -7
- package/src/duckdb/src/planner/binder/query_node/bind_recursive_cte_node.cpp +3 -0
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +83 -12
- package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -37
- package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +3 -4
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +3 -3
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +7 -5
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -0
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +48 -50
- package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +187 -0
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +38 -22
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +8 -15
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +6 -1
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +2 -2
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -10
- package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +37 -13
- package/src/duckdb/src/planner/binder/statement/bind_set.cpp +8 -2
- package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +2 -0
- package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +29 -14
- package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +16 -6
- package/src/duckdb/src/planner/binder/tableref/bind_expressionlistref.cpp +11 -4
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_named_parameters.cpp +2 -2
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +18 -17
- package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +85 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -17
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -9
- package/src/duckdb/src/planner/binder.cpp +31 -26
- package/src/duckdb/src/planner/bound_result_modifier.cpp +24 -0
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +10 -1
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +20 -4
- package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +9 -10
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +65 -3
- package/src/duckdb/src/planner/expression.cpp +15 -5
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +5 -6
- package/src/duckdb/src/planner/expression_binder/check_binder.cpp +9 -8
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +10 -7
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +9 -4
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +0 -25
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -11
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -2
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +15 -8
- package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -4
- package/src/duckdb/src/planner/expression_binder.cpp +51 -25
- package/src/duckdb/src/planner/expression_iterator.cpp +2 -1
- package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -0
- package/src/duckdb/src/planner/filter/struct_filter.cpp +33 -0
- package/src/duckdb/src/planner/joinside.cpp +1 -1
- package/src/duckdb/src/planner/logical_operator.cpp +2 -1
- package/src/duckdb/src/planner/operator/logical_copy_database.cpp +32 -0
- package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +13 -4
- package/src/duckdb/src/planner/operator/logical_create_table.cpp +2 -0
- package/src/duckdb/src/planner/operator/logical_get.cpp +4 -1
- package/src/duckdb/src/planner/operator/logical_join.cpp +8 -0
- package/src/duckdb/src/planner/planner.cpp +24 -23
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -19
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +99 -6
- package/src/duckdb/src/planner/subquery/rewrite_cte_scan.cpp +36 -0
- package/src/duckdb/src/planner/table_binding.cpp +14 -12
- package/src/duckdb/src/storage/buffer/block_handle.cpp +12 -10
- package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -1
- package/src/duckdb/src/storage/buffer/buffer_pool.cpp +25 -9
- package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +4 -3
- package/src/duckdb/src/storage/buffer_manager.cpp +14 -3
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +0 -8
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +15 -7
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint_manager.cpp +94 -41
- package/src/duckdb/src/storage/compression/alp/alp.cpp +57 -0
- package/src/duckdb/src/storage/compression/alp/alp_constants.cpp +13 -0
- package/src/duckdb/src/storage/compression/alprd.cpp +57 -0
- package/src/duckdb/src/storage/compression/bitpacking.cpp +86 -55
- package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +41 -41
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -3
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +2 -0
- package/src/duckdb/src/storage/compression/fsst.cpp +4 -4
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +3 -0
- package/src/duckdb/src/storage/compression/rle.cpp +6 -4
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +7 -7
- package/src/duckdb/src/storage/compression/uncompressed.cpp +1 -0
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +32 -96
- package/src/duckdb/src/storage/index.cpp +23 -11
- package/src/duckdb/src/storage/local_storage.cpp +36 -19
- package/src/duckdb/src/storage/metadata/metadata_manager.cpp +2 -2
- package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +9 -4
- package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_extra_drop_info.cpp +42 -0
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -17
- package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +84 -77
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +63 -4
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +23 -0
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +2 -0
- package/src/duckdb/src/storage/serialization/serialize_storage.cpp +35 -0
- package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +19 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +22 -1
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +50 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -7
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +57 -28
- package/src/duckdb/src/storage/statistics/array_stats.cpp +131 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +62 -4
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +1 -0
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +3 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +21 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +5 -0
- package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/storage_manager.cpp +47 -22
- package/src/duckdb/src/storage/table/array_column_data.cpp +241 -0
- package/src/duckdb/src/storage/table/chunk_info.cpp +2 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -1
- package/src/duckdb/src/storage/table/column_data.cpp +41 -18
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +12 -3
- package/src/duckdb/src/storage/table/column_segment.cpp +40 -6
- package/src/duckdb/src/storage/table/list_column_data.cpp +18 -15
- package/src/duckdb/src/storage/table/row_group.cpp +73 -21
- package/src/duckdb/src/storage/table/row_group_collection.cpp +395 -20
- package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -1
- package/src/duckdb/src/storage/table/scan_state.cpp +4 -0
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -5
- package/src/duckdb/src/storage/table/struct_column_data.cpp +30 -10
- package/src/duckdb/src/storage/table/table_statistics.cpp +7 -1
- package/src/duckdb/src/storage/table/update_segment.cpp +18 -2
- package/src/duckdb/src/storage/table_index_list.cpp +73 -7
- package/src/duckdb/src/storage/temporary_memory_manager.cpp +148 -0
- package/src/duckdb/src/storage/wal_replay.cpp +329 -152
- package/src/duckdb/src/storage/write_ahead_log.cpp +157 -137
- package/src/duckdb/src/transaction/cleanup_state.cpp +3 -2
- package/src/duckdb/src/transaction/commit_state.cpp +89 -63
- package/src/duckdb/src/transaction/duck_transaction.cpp +5 -3
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +26 -54
- package/src/duckdb/src/transaction/meta_transaction.cpp +37 -23
- package/src/duckdb/src/transaction/transaction_context.cpp +23 -4
- package/src/duckdb/src/transaction/undo_buffer.cpp +16 -2
- package/src/duckdb/src/verification/fetch_row_verifier.cpp +13 -0
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +5 -7
- package/src/duckdb/src/verification/statement_verifier.cpp +6 -5
- package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +100 -29
- package/src/duckdb/third_party/fmt/include/fmt/format-inl.h +1 -1
- package/src/duckdb/third_party/fmt/include/fmt/format.h +4 -2
- package/src/duckdb/third_party/fmt/include/fmt/printf.h +5 -5
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +4 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +82 -21
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +551 -1004
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +17 -3
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24861 -23465
- package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +420 -389
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aes.h +640 -1
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aes_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aria.h +358 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aria_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia.h +316 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm.h +1 -1
- package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/chacha20.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/chachapoly.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/cipher.h +124 -124
- package/src/duckdb/third_party/mbedtls/include/mbedtls/cmac.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/entropy.h +293 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm.h +383 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +9 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/nist_kw.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/timing.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +35 -6
- package/src/duckdb/third_party/mbedtls/library/aes.cpp +2171 -0
- package/src/duckdb/third_party/mbedtls/library/aesni.h +1 -0
- package/src/duckdb/third_party/mbedtls/library/aria.cpp +1058 -0
- package/src/duckdb/third_party/mbedtls/library/camellia.cpp +1087 -0
- package/src/duckdb/third_party/mbedtls/library/cipher.cpp +1633 -0
- package/src/duckdb/third_party/mbedtls/library/cipher_wrap.cpp +2270 -0
- package/src/duckdb/third_party/mbedtls/library/cipher_wrap.h +146 -0
- package/src/duckdb/third_party/mbedtls/library/entropy.cpp +701 -0
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +237 -0
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.h +76 -0
- package/src/duckdb/third_party/mbedtls/library/gcm.cpp +1161 -0
- package/src/duckdb/third_party/mbedtls/library/padlock.h +1 -0
- package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +132 -24
- package/src/duckdb/third_party/pcg/pcg_uint128.hpp +1 -1
- package/src/duckdb/third_party/skiplist/HeadNode.h +934 -0
- package/src/duckdb/third_party/skiplist/IntegrityEnums.h +62 -0
- package/src/duckdb/third_party/skiplist/Node.h +641 -0
- package/src/duckdb/third_party/skiplist/NodeRefs.h +251 -0
- package/src/duckdb/third_party/skiplist/RollingMedian.h +202 -0
- package/src/duckdb/third_party/skiplist/SkipList.cpp +40 -0
- package/src/duckdb/third_party/skiplist/SkipList.h +549 -0
- package/src/duckdb/third_party/thrift/thrift/thrift-config.h +1 -1
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_catalog.cpp +3 -1
- package/src/duckdb/ub_src_catalog_catalog_entry_dependency.cpp +6 -0
- package/src/duckdb/ub_src_common.cpp +1 -1
- package/src/duckdb/ub_src_common_exception.cpp +6 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -2
- package/src/duckdb/ub_src_core_functions.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_array.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_list.cpp +7 -3
- package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_string.cpp +4 -0
- package/src/duckdb/ub_src_execution_index.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_buffer_manager.cpp +6 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_scanner.cpp +10 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_state_machine.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_table_function.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_helper.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_join.cpp +4 -2
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +4 -2
- package/src/duckdb/ub_src_function_cast.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_list.cpp +4 -0
- package/src/duckdb/ub_src_function_table.cpp +4 -4
- package/src/duckdb/ub_src_function_table_system.cpp +6 -0
- package/src/duckdb/ub_src_main.cpp +2 -0
- package/src/duckdb/ub_src_main_buffered_data.cpp +2 -0
- package/src/duckdb/ub_src_main_secret.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
- package/src/duckdb/ub_src_parser_expression.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +6 -0
- package/src/duckdb/ub_src_parser_statement.cpp +2 -2
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +6 -0
- package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -2
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_filter.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_planner_subquery.cpp +2 -0
- package/src/duckdb/ub_src_storage.cpp +2 -0
- package/src/duckdb/ub_src_storage_compression.cpp +2 -0
- package/src/duckdb/ub_src_storage_compression_alp.cpp +4 -0
- package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
- package/src/duckdb/ub_src_storage_table.cpp +2 -0
- package/src/duckdb_node.hpp +1 -1
- package/src/statement.cpp +18 -8
- package/src/utils.cpp +1 -15
- package/test/columns.test.ts +2 -1
- package/test/config.test.ts +30 -0
- package/test/test_all_types.test.ts +9 -4
@@ -4,6 +4,8 @@
|
|
4
4
|
#include "duckdb/common/operator/numeric_cast.hpp"
|
5
5
|
#include "duckdb/common/operator/decimal_cast_operators.hpp"
|
6
6
|
#include "duckdb/common/operator/multiply.hpp"
|
7
|
+
#include "duckdb/common/operator/add.hpp"
|
8
|
+
#include "duckdb/common/operator/subtract.hpp"
|
7
9
|
|
8
10
|
#include "duckdb/common/exception.hpp"
|
9
11
|
#include "duckdb/common/limits.hpp"
|
@@ -22,6 +24,8 @@
|
|
22
24
|
#include "fast_float/fast_float.h"
|
23
25
|
#include "fmt/format.h"
|
24
26
|
#include "duckdb/common/types/bit.hpp"
|
27
|
+
#include "duckdb/common/operator/integer_cast_operator.hpp"
|
28
|
+
#include "duckdb/common/operator/double_cast_operator.hpp"
|
25
29
|
|
26
30
|
#include <cctype>
|
27
31
|
#include <cmath>
|
@@ -62,6 +66,11 @@ bool TryCast::Operation(bool input, hugeint_t &result, bool strict) {
|
|
62
66
|
return NumericTryCast::Operation<bool, hugeint_t>(input, result, strict);
|
63
67
|
}
|
64
68
|
|
69
|
+
template <>
|
70
|
+
bool TryCast::Operation(bool input, uhugeint_t &result, bool strict) {
|
71
|
+
return NumericTryCast::Operation<bool, uhugeint_t>(input, result, strict);
|
72
|
+
}
|
73
|
+
|
65
74
|
template <>
|
66
75
|
bool TryCast::Operation(bool input, uint8_t &result, bool strict) {
|
67
76
|
return NumericTryCast::Operation<bool, uint8_t>(input, result, strict);
|
@@ -125,6 +134,11 @@ bool TryCast::Operation(int8_t input, hugeint_t &result, bool strict) {
|
|
125
134
|
return NumericTryCast::Operation<int8_t, hugeint_t>(input, result, strict);
|
126
135
|
}
|
127
136
|
|
137
|
+
template <>
|
138
|
+
bool TryCast::Operation(int8_t input, uhugeint_t &result, bool strict) {
|
139
|
+
return NumericTryCast::Operation<int8_t, uhugeint_t>(input, result, strict);
|
140
|
+
}
|
141
|
+
|
128
142
|
template <>
|
129
143
|
bool TryCast::Operation(int8_t input, uint8_t &result, bool strict) {
|
130
144
|
return NumericTryCast::Operation<int8_t, uint8_t>(input, result, strict);
|
@@ -188,6 +202,11 @@ bool TryCast::Operation(int16_t input, hugeint_t &result, bool strict) {
|
|
188
202
|
return NumericTryCast::Operation<int16_t, hugeint_t>(input, result, strict);
|
189
203
|
}
|
190
204
|
|
205
|
+
template <>
|
206
|
+
bool TryCast::Operation(int16_t input, uhugeint_t &result, bool strict) {
|
207
|
+
return NumericTryCast::Operation<int16_t, uhugeint_t>(input, result, strict);
|
208
|
+
}
|
209
|
+
|
191
210
|
template <>
|
192
211
|
bool TryCast::Operation(int16_t input, uint8_t &result, bool strict) {
|
193
212
|
return NumericTryCast::Operation<int16_t, uint8_t>(input, result, strict);
|
@@ -251,6 +270,11 @@ bool TryCast::Operation(int32_t input, hugeint_t &result, bool strict) {
|
|
251
270
|
return NumericTryCast::Operation<int32_t, hugeint_t>(input, result, strict);
|
252
271
|
}
|
253
272
|
|
273
|
+
template <>
|
274
|
+
bool TryCast::Operation(int32_t input, uhugeint_t &result, bool strict) {
|
275
|
+
return NumericTryCast::Operation<int32_t, uhugeint_t>(input, result, strict);
|
276
|
+
}
|
277
|
+
|
254
278
|
template <>
|
255
279
|
bool TryCast::Operation(int32_t input, uint8_t &result, bool strict) {
|
256
280
|
return NumericTryCast::Operation<int32_t, uint8_t>(input, result, strict);
|
@@ -314,6 +338,11 @@ bool TryCast::Operation(int64_t input, hugeint_t &result, bool strict) {
|
|
314
338
|
return NumericTryCast::Operation<int64_t, hugeint_t>(input, result, strict);
|
315
339
|
}
|
316
340
|
|
341
|
+
template <>
|
342
|
+
bool TryCast::Operation(int64_t input, uhugeint_t &result, bool strict) {
|
343
|
+
return NumericTryCast::Operation<int64_t, uhugeint_t>(input, result, strict);
|
344
|
+
}
|
345
|
+
|
317
346
|
template <>
|
318
347
|
bool TryCast::Operation(int64_t input, uint8_t &result, bool strict) {
|
319
348
|
return NumericTryCast::Operation<int64_t, uint8_t>(input, result, strict);
|
@@ -377,6 +406,11 @@ bool TryCast::Operation(hugeint_t input, hugeint_t &result, bool strict) {
|
|
377
406
|
return NumericTryCast::Operation<hugeint_t, hugeint_t>(input, result, strict);
|
378
407
|
}
|
379
408
|
|
409
|
+
template <>
|
410
|
+
bool TryCast::Operation(hugeint_t input, uhugeint_t &result, bool strict) {
|
411
|
+
return NumericTryCast::Operation<hugeint_t, uhugeint_t>(input, result, strict);
|
412
|
+
}
|
413
|
+
|
380
414
|
template <>
|
381
415
|
bool TryCast::Operation(hugeint_t input, uint8_t &result, bool strict) {
|
382
416
|
return NumericTryCast::Operation<hugeint_t, uint8_t>(input, result, strict);
|
@@ -407,6 +441,74 @@ bool TryCast::Operation(hugeint_t input, double &result, bool strict) {
|
|
407
441
|
return NumericTryCast::Operation<hugeint_t, double>(input, result, strict);
|
408
442
|
}
|
409
443
|
|
444
|
+
//===--------------------------------------------------------------------===//
|
445
|
+
// Cast uhugeint_t -> Numeric
|
446
|
+
//===--------------------------------------------------------------------===//
|
447
|
+
template <>
|
448
|
+
bool TryCast::Operation(uhugeint_t input, bool &result, bool strict) {
|
449
|
+
return NumericTryCast::Operation<uhugeint_t, bool>(input, result, strict);
|
450
|
+
}
|
451
|
+
|
452
|
+
template <>
|
453
|
+
bool TryCast::Operation(uhugeint_t input, int8_t &result, bool strict) {
|
454
|
+
return NumericTryCast::Operation<uhugeint_t, int8_t>(input, result, strict);
|
455
|
+
}
|
456
|
+
|
457
|
+
template <>
|
458
|
+
bool TryCast::Operation(uhugeint_t input, int16_t &result, bool strict) {
|
459
|
+
return NumericTryCast::Operation<uhugeint_t, int16_t>(input, result, strict);
|
460
|
+
}
|
461
|
+
|
462
|
+
template <>
|
463
|
+
bool TryCast::Operation(uhugeint_t input, int32_t &result, bool strict) {
|
464
|
+
return NumericTryCast::Operation<uhugeint_t, int32_t>(input, result, strict);
|
465
|
+
}
|
466
|
+
|
467
|
+
template <>
|
468
|
+
bool TryCast::Operation(uhugeint_t input, int64_t &result, bool strict) {
|
469
|
+
return NumericTryCast::Operation<uhugeint_t, int64_t>(input, result, strict);
|
470
|
+
}
|
471
|
+
|
472
|
+
template <>
|
473
|
+
bool TryCast::Operation(uhugeint_t input, uhugeint_t &result, bool strict) {
|
474
|
+
return NumericTryCast::Operation<uhugeint_t, uhugeint_t>(input, result, strict);
|
475
|
+
}
|
476
|
+
|
477
|
+
template <>
|
478
|
+
bool TryCast::Operation(uhugeint_t input, hugeint_t &result, bool strict) {
|
479
|
+
return NumericTryCast::Operation<uhugeint_t, hugeint_t>(input, result, strict);
|
480
|
+
}
|
481
|
+
|
482
|
+
template <>
|
483
|
+
bool TryCast::Operation(uhugeint_t input, uint8_t &result, bool strict) {
|
484
|
+
return NumericTryCast::Operation<uhugeint_t, uint8_t>(input, result, strict);
|
485
|
+
}
|
486
|
+
|
487
|
+
template <>
|
488
|
+
bool TryCast::Operation(uhugeint_t input, uint16_t &result, bool strict) {
|
489
|
+
return NumericTryCast::Operation<uhugeint_t, uint16_t>(input, result, strict);
|
490
|
+
}
|
491
|
+
|
492
|
+
template <>
|
493
|
+
bool TryCast::Operation(uhugeint_t input, uint32_t &result, bool strict) {
|
494
|
+
return NumericTryCast::Operation<uhugeint_t, uint32_t>(input, result, strict);
|
495
|
+
}
|
496
|
+
|
497
|
+
template <>
|
498
|
+
bool TryCast::Operation(uhugeint_t input, uint64_t &result, bool strict) {
|
499
|
+
return NumericTryCast::Operation<uhugeint_t, uint64_t>(input, result, strict);
|
500
|
+
}
|
501
|
+
|
502
|
+
template <>
|
503
|
+
bool TryCast::Operation(uhugeint_t input, float &result, bool strict) {
|
504
|
+
return NumericTryCast::Operation<uhugeint_t, float>(input, result, strict);
|
505
|
+
}
|
506
|
+
|
507
|
+
template <>
|
508
|
+
bool TryCast::Operation(uhugeint_t input, double &result, bool strict) {
|
509
|
+
return NumericTryCast::Operation<uhugeint_t, double>(input, result, strict);
|
510
|
+
}
|
511
|
+
|
410
512
|
//===--------------------------------------------------------------------===//
|
411
513
|
// Cast uint8_t -> Numeric
|
412
514
|
//===--------------------------------------------------------------------===//
|
@@ -440,6 +542,11 @@ bool TryCast::Operation(uint8_t input, hugeint_t &result, bool strict) {
|
|
440
542
|
return NumericTryCast::Operation<uint8_t, hugeint_t>(input, result, strict);
|
441
543
|
}
|
442
544
|
|
545
|
+
template <>
|
546
|
+
bool TryCast::Operation(uint8_t input, uhugeint_t &result, bool strict) {
|
547
|
+
return NumericTryCast::Operation<uint8_t, uhugeint_t>(input, result, strict);
|
548
|
+
}
|
549
|
+
|
443
550
|
template <>
|
444
551
|
bool TryCast::Operation(uint8_t input, uint8_t &result, bool strict) {
|
445
552
|
return NumericTryCast::Operation<uint8_t, uint8_t>(input, result, strict);
|
@@ -503,6 +610,11 @@ bool TryCast::Operation(uint16_t input, hugeint_t &result, bool strict) {
|
|
503
610
|
return NumericTryCast::Operation<uint16_t, hugeint_t>(input, result, strict);
|
504
611
|
}
|
505
612
|
|
613
|
+
template <>
|
614
|
+
bool TryCast::Operation(uint16_t input, uhugeint_t &result, bool strict) {
|
615
|
+
return NumericTryCast::Operation<uint16_t, uhugeint_t>(input, result, strict);
|
616
|
+
}
|
617
|
+
|
506
618
|
template <>
|
507
619
|
bool TryCast::Operation(uint16_t input, uint8_t &result, bool strict) {
|
508
620
|
return NumericTryCast::Operation<uint16_t, uint8_t>(input, result, strict);
|
@@ -566,6 +678,11 @@ bool TryCast::Operation(uint32_t input, hugeint_t &result, bool strict) {
|
|
566
678
|
return NumericTryCast::Operation<uint32_t, hugeint_t>(input, result, strict);
|
567
679
|
}
|
568
680
|
|
681
|
+
template <>
|
682
|
+
bool TryCast::Operation(uint32_t input, uhugeint_t &result, bool strict) {
|
683
|
+
return NumericTryCast::Operation<uint32_t, uhugeint_t>(input, result, strict);
|
684
|
+
}
|
685
|
+
|
569
686
|
template <>
|
570
687
|
bool TryCast::Operation(uint32_t input, uint8_t &result, bool strict) {
|
571
688
|
return NumericTryCast::Operation<uint32_t, uint8_t>(input, result, strict);
|
@@ -629,6 +746,11 @@ bool TryCast::Operation(uint64_t input, hugeint_t &result, bool strict) {
|
|
629
746
|
return NumericTryCast::Operation<uint64_t, hugeint_t>(input, result, strict);
|
630
747
|
}
|
631
748
|
|
749
|
+
template <>
|
750
|
+
bool TryCast::Operation(uint64_t input, uhugeint_t &result, bool strict) {
|
751
|
+
return NumericTryCast::Operation<uint64_t, uhugeint_t>(input, result, strict);
|
752
|
+
}
|
753
|
+
|
632
754
|
template <>
|
633
755
|
bool TryCast::Operation(uint64_t input, uint8_t &result, bool strict) {
|
634
756
|
return NumericTryCast::Operation<uint64_t, uint8_t>(input, result, strict);
|
@@ -692,6 +814,11 @@ bool TryCast::Operation(float input, hugeint_t &result, bool strict) {
|
|
692
814
|
return NumericTryCast::Operation<float, hugeint_t>(input, result, strict);
|
693
815
|
}
|
694
816
|
|
817
|
+
template <>
|
818
|
+
bool TryCast::Operation(float input, uhugeint_t &result, bool strict) {
|
819
|
+
return NumericTryCast::Operation<float, uhugeint_t>(input, result, strict);
|
820
|
+
}
|
821
|
+
|
695
822
|
template <>
|
696
823
|
bool TryCast::Operation(float input, uint8_t &result, bool strict) {
|
697
824
|
return NumericTryCast::Operation<float, uint8_t>(input, result, strict);
|
@@ -755,6 +882,11 @@ bool TryCast::Operation(double input, hugeint_t &result, bool strict) {
|
|
755
882
|
return NumericTryCast::Operation<double, hugeint_t>(input, result, strict);
|
756
883
|
}
|
757
884
|
|
885
|
+
template <>
|
886
|
+
bool TryCast::Operation(double input, uhugeint_t &result, bool strict) {
|
887
|
+
return NumericTryCast::Operation<double, uhugeint_t>(input, result, strict);
|
888
|
+
}
|
889
|
+
|
758
890
|
template <>
|
759
891
|
bool TryCast::Operation(double input, uint8_t &result, bool strict) {
|
760
892
|
return NumericTryCast::Operation<double, uint8_t>(input, result, strict);
|
@@ -788,314 +920,6 @@ bool TryCast::Operation(double input, double &result, bool strict) {
|
|
788
920
|
//===--------------------------------------------------------------------===//
|
789
921
|
// Cast String -> Numeric
|
790
922
|
//===--------------------------------------------------------------------===//
|
791
|
-
template <typename T>
|
792
|
-
struct IntegerCastData {
|
793
|
-
using Result = T;
|
794
|
-
Result result;
|
795
|
-
bool seen_decimal;
|
796
|
-
};
|
797
|
-
|
798
|
-
struct IntegerCastOperation {
|
799
|
-
template <class T, bool NEGATIVE>
|
800
|
-
static bool HandleDigit(T &state, uint8_t digit) {
|
801
|
-
using result_t = typename T::Result;
|
802
|
-
if (NEGATIVE) {
|
803
|
-
if (state.result < (NumericLimits<result_t>::Minimum() + digit) / 10) {
|
804
|
-
return false;
|
805
|
-
}
|
806
|
-
state.result = state.result * 10 - digit;
|
807
|
-
} else {
|
808
|
-
if (state.result > (NumericLimits<result_t>::Maximum() - digit) / 10) {
|
809
|
-
return false;
|
810
|
-
}
|
811
|
-
state.result = state.result * 10 + digit;
|
812
|
-
}
|
813
|
-
return true;
|
814
|
-
}
|
815
|
-
|
816
|
-
template <class T, bool NEGATIVE>
|
817
|
-
static bool HandleHexDigit(T &state, uint8_t digit) {
|
818
|
-
using result_t = typename T::Result;
|
819
|
-
if (state.result > (NumericLimits<result_t>::Maximum() - digit) / 16) {
|
820
|
-
return false;
|
821
|
-
}
|
822
|
-
state.result = state.result * 16 + digit;
|
823
|
-
return true;
|
824
|
-
}
|
825
|
-
|
826
|
-
template <class T, bool NEGATIVE>
|
827
|
-
static bool HandleBinaryDigit(T &state, uint8_t digit) {
|
828
|
-
using result_t = typename T::Result;
|
829
|
-
if (state.result > (NumericLimits<result_t>::Maximum() - digit) / 2) {
|
830
|
-
return false;
|
831
|
-
}
|
832
|
-
state.result = state.result * 2 + digit;
|
833
|
-
return true;
|
834
|
-
}
|
835
|
-
|
836
|
-
template <class T, bool NEGATIVE>
|
837
|
-
static bool HandleExponent(T &state, int32_t exponent) {
|
838
|
-
using result_t = typename T::Result;
|
839
|
-
double dbl_res = state.result * std::pow(10.0L, exponent);
|
840
|
-
if (dbl_res < (double)NumericLimits<result_t>::Minimum() ||
|
841
|
-
dbl_res > (double)NumericLimits<result_t>::Maximum()) {
|
842
|
-
return false;
|
843
|
-
}
|
844
|
-
state.result = (result_t)std::nearbyint(dbl_res);
|
845
|
-
return true;
|
846
|
-
}
|
847
|
-
|
848
|
-
template <class T, bool NEGATIVE, bool ALLOW_EXPONENT>
|
849
|
-
static bool HandleDecimal(T &state, uint8_t digit) {
|
850
|
-
if (state.seen_decimal) {
|
851
|
-
return true;
|
852
|
-
}
|
853
|
-
state.seen_decimal = true;
|
854
|
-
// round the integer based on what is after the decimal point
|
855
|
-
// if digit >= 5, then we round up (or down in case of negative numbers)
|
856
|
-
auto increment = digit >= 5;
|
857
|
-
if (!increment) {
|
858
|
-
return true;
|
859
|
-
}
|
860
|
-
if (NEGATIVE) {
|
861
|
-
if (state.result == NumericLimits<typename T::Result>::Minimum()) {
|
862
|
-
return false;
|
863
|
-
}
|
864
|
-
state.result--;
|
865
|
-
} else {
|
866
|
-
if (state.result == NumericLimits<typename T::Result>::Maximum()) {
|
867
|
-
return false;
|
868
|
-
}
|
869
|
-
state.result++;
|
870
|
-
}
|
871
|
-
return true;
|
872
|
-
}
|
873
|
-
|
874
|
-
template <class T, bool NEGATIVE>
|
875
|
-
static bool Finalize(T &state) {
|
876
|
-
return true;
|
877
|
-
}
|
878
|
-
};
|
879
|
-
|
880
|
-
template <class T, bool NEGATIVE, bool ALLOW_EXPONENT, class OP = IntegerCastOperation, char decimal_separator = '.'>
|
881
|
-
static bool IntegerCastLoop(const char *buf, idx_t len, T &result, bool strict) {
|
882
|
-
idx_t start_pos;
|
883
|
-
if (NEGATIVE) {
|
884
|
-
start_pos = 1;
|
885
|
-
} else {
|
886
|
-
if (*buf == '+') {
|
887
|
-
if (strict) {
|
888
|
-
// leading plus is not allowed in strict mode
|
889
|
-
return false;
|
890
|
-
}
|
891
|
-
start_pos = 1;
|
892
|
-
} else {
|
893
|
-
start_pos = 0;
|
894
|
-
}
|
895
|
-
}
|
896
|
-
idx_t pos = start_pos;
|
897
|
-
while (pos < len) {
|
898
|
-
if (!StringUtil::CharacterIsDigit(buf[pos])) {
|
899
|
-
// not a digit!
|
900
|
-
if (buf[pos] == decimal_separator) {
|
901
|
-
if (strict) {
|
902
|
-
return false;
|
903
|
-
}
|
904
|
-
bool number_before_period = pos > start_pos;
|
905
|
-
// decimal point: we accept decimal values for integers as well
|
906
|
-
// we just truncate them
|
907
|
-
// make sure everything after the period is a number
|
908
|
-
pos++;
|
909
|
-
idx_t start_digit = pos;
|
910
|
-
while (pos < len) {
|
911
|
-
if (!StringUtil::CharacterIsDigit(buf[pos])) {
|
912
|
-
break;
|
913
|
-
}
|
914
|
-
if (!OP::template HandleDecimal<T, NEGATIVE, ALLOW_EXPONENT>(result, buf[pos] - '0')) {
|
915
|
-
return false;
|
916
|
-
}
|
917
|
-
pos++;
|
918
|
-
}
|
919
|
-
// make sure there is either (1) one number after the period, or (2) one number before the period
|
920
|
-
// i.e. we accept "1." and ".1" as valid numbers, but not "."
|
921
|
-
if (!(number_before_period || pos > start_digit)) {
|
922
|
-
return false;
|
923
|
-
}
|
924
|
-
if (pos >= len) {
|
925
|
-
break;
|
926
|
-
}
|
927
|
-
}
|
928
|
-
if (StringUtil::CharacterIsSpace(buf[pos])) {
|
929
|
-
// skip any trailing spaces
|
930
|
-
while (++pos < len) {
|
931
|
-
if (!StringUtil::CharacterIsSpace(buf[pos])) {
|
932
|
-
return false;
|
933
|
-
}
|
934
|
-
}
|
935
|
-
break;
|
936
|
-
}
|
937
|
-
if (ALLOW_EXPONENT) {
|
938
|
-
if (buf[pos] == 'e' || buf[pos] == 'E') {
|
939
|
-
if (pos == start_pos) {
|
940
|
-
return false;
|
941
|
-
}
|
942
|
-
pos++;
|
943
|
-
if (pos >= len) {
|
944
|
-
return false;
|
945
|
-
}
|
946
|
-
using ExponentData = IntegerCastData<int32_t>;
|
947
|
-
ExponentData exponent {0, false};
|
948
|
-
int negative = buf[pos] == '-';
|
949
|
-
if (negative) {
|
950
|
-
if (!IntegerCastLoop<ExponentData, true, false, IntegerCastOperation, decimal_separator>(
|
951
|
-
buf + pos, len - pos, exponent, strict)) {
|
952
|
-
return false;
|
953
|
-
}
|
954
|
-
} else {
|
955
|
-
if (!IntegerCastLoop<ExponentData, false, false, IntegerCastOperation, decimal_separator>(
|
956
|
-
buf + pos, len - pos, exponent, strict)) {
|
957
|
-
return false;
|
958
|
-
}
|
959
|
-
}
|
960
|
-
return OP::template HandleExponent<T, NEGATIVE>(result, exponent.result);
|
961
|
-
}
|
962
|
-
}
|
963
|
-
return false;
|
964
|
-
}
|
965
|
-
uint8_t digit = buf[pos++] - '0';
|
966
|
-
if (!OP::template HandleDigit<T, NEGATIVE>(result, digit)) {
|
967
|
-
return false;
|
968
|
-
}
|
969
|
-
}
|
970
|
-
if (!OP::template Finalize<T, NEGATIVE>(result)) {
|
971
|
-
return false;
|
972
|
-
}
|
973
|
-
return pos > start_pos;
|
974
|
-
}
|
975
|
-
|
976
|
-
template <class T, bool NEGATIVE, bool ALLOW_EXPONENT, class OP = IntegerCastOperation>
|
977
|
-
static bool IntegerHexCastLoop(const char *buf, idx_t len, T &result, bool strict) {
|
978
|
-
if (ALLOW_EXPONENT || NEGATIVE) {
|
979
|
-
return false;
|
980
|
-
}
|
981
|
-
idx_t start_pos = 1;
|
982
|
-
idx_t pos = start_pos;
|
983
|
-
char current_char;
|
984
|
-
while (pos < len) {
|
985
|
-
current_char = StringUtil::CharacterToLower(buf[pos]);
|
986
|
-
if (!StringUtil::CharacterIsHex(current_char)) {
|
987
|
-
return false;
|
988
|
-
}
|
989
|
-
uint8_t digit;
|
990
|
-
if (current_char >= 'a') {
|
991
|
-
digit = current_char - 'a' + 10;
|
992
|
-
} else {
|
993
|
-
digit = current_char - '0';
|
994
|
-
}
|
995
|
-
pos++;
|
996
|
-
if (!OP::template HandleHexDigit<T, NEGATIVE>(result, digit)) {
|
997
|
-
return false;
|
998
|
-
}
|
999
|
-
}
|
1000
|
-
if (!OP::template Finalize<T, NEGATIVE>(result)) {
|
1001
|
-
return false;
|
1002
|
-
}
|
1003
|
-
return pos > start_pos;
|
1004
|
-
}
|
1005
|
-
|
1006
|
-
template <class T, bool NEGATIVE, bool ALLOW_EXPONENT, class OP = IntegerCastOperation>
|
1007
|
-
static bool IntegerBinaryCastLoop(const char *buf, idx_t len, T &result, bool strict) {
|
1008
|
-
if (ALLOW_EXPONENT || NEGATIVE) {
|
1009
|
-
return false;
|
1010
|
-
}
|
1011
|
-
idx_t start_pos = 1;
|
1012
|
-
idx_t pos = start_pos;
|
1013
|
-
uint8_t digit;
|
1014
|
-
char current_char;
|
1015
|
-
while (pos < len) {
|
1016
|
-
current_char = buf[pos];
|
1017
|
-
if (current_char == '_' && pos > start_pos) {
|
1018
|
-
// skip underscore, if it is not the first character
|
1019
|
-
pos++;
|
1020
|
-
if (pos == len) {
|
1021
|
-
// we cant end on an underscore either
|
1022
|
-
return false;
|
1023
|
-
}
|
1024
|
-
continue;
|
1025
|
-
} else if (current_char == '0') {
|
1026
|
-
digit = 0;
|
1027
|
-
} else if (current_char == '1') {
|
1028
|
-
digit = 1;
|
1029
|
-
} else {
|
1030
|
-
return false;
|
1031
|
-
}
|
1032
|
-
pos++;
|
1033
|
-
if (!OP::template HandleBinaryDigit<T, NEGATIVE>(result, digit)) {
|
1034
|
-
return false;
|
1035
|
-
}
|
1036
|
-
}
|
1037
|
-
if (!OP::template Finalize<T, NEGATIVE>(result)) {
|
1038
|
-
return false;
|
1039
|
-
}
|
1040
|
-
return pos > start_pos;
|
1041
|
-
}
|
1042
|
-
|
1043
|
-
template <class T, bool IS_SIGNED = true, bool ALLOW_EXPONENT = true, class OP = IntegerCastOperation,
|
1044
|
-
bool ZERO_INITIALIZE = true, char decimal_separator = '.'>
|
1045
|
-
static bool TryIntegerCast(const char *buf, idx_t len, T &result, bool strict) {
|
1046
|
-
// skip any spaces at the start
|
1047
|
-
while (len > 0 && StringUtil::CharacterIsSpace(*buf)) {
|
1048
|
-
buf++;
|
1049
|
-
len--;
|
1050
|
-
}
|
1051
|
-
if (len == 0) {
|
1052
|
-
return false;
|
1053
|
-
}
|
1054
|
-
if (ZERO_INITIALIZE) {
|
1055
|
-
memset(&result, 0, sizeof(T));
|
1056
|
-
}
|
1057
|
-
// if the number is negative, we set the negative flag and skip the negative sign
|
1058
|
-
if (*buf == '-') {
|
1059
|
-
if (!IS_SIGNED) {
|
1060
|
-
// Need to check if its not -0
|
1061
|
-
idx_t pos = 1;
|
1062
|
-
while (pos < len) {
|
1063
|
-
if (buf[pos++] != '0') {
|
1064
|
-
return false;
|
1065
|
-
}
|
1066
|
-
}
|
1067
|
-
}
|
1068
|
-
return IntegerCastLoop<T, true, ALLOW_EXPONENT, OP, decimal_separator>(buf, len, result, strict);
|
1069
|
-
}
|
1070
|
-
if (len > 1 && *buf == '0') {
|
1071
|
-
if (buf[1] == 'x' || buf[1] == 'X') {
|
1072
|
-
// If it starts with 0x or 0X, we parse it as a hex value
|
1073
|
-
buf++;
|
1074
|
-
len--;
|
1075
|
-
return IntegerHexCastLoop<T, false, false, OP>(buf, len, result, strict);
|
1076
|
-
} else if (buf[1] == 'b' || buf[1] == 'B') {
|
1077
|
-
// If it starts with 0b or 0B, we parse it as a binary value
|
1078
|
-
buf++;
|
1079
|
-
len--;
|
1080
|
-
return IntegerBinaryCastLoop<T, false, false, OP>(buf, len, result, strict);
|
1081
|
-
} else if (strict && StringUtil::CharacterIsDigit(buf[1])) {
|
1082
|
-
// leading zeros are not allowed in strict mode
|
1083
|
-
return false;
|
1084
|
-
}
|
1085
|
-
}
|
1086
|
-
return IntegerCastLoop<T, false, ALLOW_EXPONENT, OP, decimal_separator>(buf, len, result, strict);
|
1087
|
-
}
|
1088
|
-
|
1089
|
-
template <typename T, bool IS_SIGNED = true>
|
1090
|
-
static inline bool TrySimpleIntegerCast(const char *buf, idx_t len, T &result, bool strict) {
|
1091
|
-
IntegerCastData<T> data;
|
1092
|
-
if (TryIntegerCast<IntegerCastData<T>, IS_SIGNED>(buf, len, data, strict)) {
|
1093
|
-
result = data.result;
|
1094
|
-
return true;
|
1095
|
-
}
|
1096
|
-
return false;
|
1097
|
-
}
|
1098
|
-
|
1099
923
|
template <>
|
1100
924
|
bool TryCast::Operation(string_t input, bool &result, bool strict) {
|
1101
925
|
auto input_data = input.GetData();
|
@@ -1174,44 +998,6 @@ bool TryCast::Operation(string_t input, uint64_t &result, bool strict) {
|
|
1174
998
|
return TrySimpleIntegerCast<uint64_t, false>(input.GetData(), input.GetSize(), result, strict);
|
1175
999
|
}
|
1176
1000
|
|
1177
|
-
template <class T, char decimal_separator = '.'>
|
1178
|
-
static bool TryDoubleCast(const char *buf, idx_t len, T &result, bool strict) {
|
1179
|
-
// skip any spaces at the start
|
1180
|
-
while (len > 0 && StringUtil::CharacterIsSpace(*buf)) {
|
1181
|
-
buf++;
|
1182
|
-
len--;
|
1183
|
-
}
|
1184
|
-
if (len == 0) {
|
1185
|
-
return false;
|
1186
|
-
}
|
1187
|
-
if (*buf == '+') {
|
1188
|
-
if (strict) {
|
1189
|
-
// plus is not allowed in strict mode
|
1190
|
-
return false;
|
1191
|
-
}
|
1192
|
-
buf++;
|
1193
|
-
len--;
|
1194
|
-
}
|
1195
|
-
if (strict && len >= 2) {
|
1196
|
-
if (buf[0] == '0' && StringUtil::CharacterIsDigit(buf[1])) {
|
1197
|
-
// leading zeros are not allowed in strict mode
|
1198
|
-
return false;
|
1199
|
-
}
|
1200
|
-
}
|
1201
|
-
auto endptr = buf + len;
|
1202
|
-
auto parse_result = duckdb_fast_float::from_chars(buf, buf + len, result, decimal_separator);
|
1203
|
-
if (parse_result.ec != std::errc()) {
|
1204
|
-
return false;
|
1205
|
-
}
|
1206
|
-
auto current_end = parse_result.ptr;
|
1207
|
-
if (!strict) {
|
1208
|
-
while (current_end < endptr && StringUtil::CharacterIsSpace(*current_end)) {
|
1209
|
-
current_end++;
|
1210
|
-
}
|
1211
|
-
}
|
1212
|
-
return current_end == endptr;
|
1213
|
-
}
|
1214
|
-
|
1215
1001
|
template <>
|
1216
1002
|
bool TryCast::Operation(string_t input, float &result, bool strict) {
|
1217
1003
|
return TryDoubleCast<float>(input.GetData(), input.GetSize(), result, strict);
|
@@ -1224,7 +1010,7 @@ bool TryCast::Operation(string_t input, double &result, bool strict) {
|
|
1224
1010
|
|
1225
1011
|
template <>
|
1226
1012
|
bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, string *error_message, bool strict) {
|
1227
|
-
if (!TryDoubleCast<float
|
1013
|
+
if (!TryDoubleCast<float>(input.GetData(), input.GetSize(), result, strict, ',')) {
|
1228
1014
|
HandleCastError::AssignError(StringUtil::Format("Could not cast string to float: \"%s\"", input.GetString()),
|
1229
1015
|
error_message);
|
1230
1016
|
return false;
|
@@ -1234,7 +1020,7 @@ bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result,
|
|
1234
1020
|
|
1235
1021
|
template <>
|
1236
1022
|
bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, string *error_message, bool strict) {
|
1237
|
-
if (!TryDoubleCast<double
|
1023
|
+
if (!TryDoubleCast<double>(input.GetData(), input.GetSize(), result, strict, ',')) {
|
1238
1024
|
HandleCastError::AssignError(StringUtil::Format("Could not cast string to double: \"%s\"", input.GetString()),
|
1239
1025
|
error_message);
|
1240
1026
|
return false;
|
@@ -1368,11 +1154,22 @@ timestamp_t CastTimestampUsToSec::Operation(timestamp_t input) {
|
|
1368
1154
|
timestamp_t cast_timestamp(Timestamp::GetEpochSeconds(input));
|
1369
1155
|
return cast_timestamp;
|
1370
1156
|
}
|
1157
|
+
|
1371
1158
|
template <>
|
1372
1159
|
timestamp_t CastTimestampMsToUs::Operation(timestamp_t input) {
|
1373
1160
|
return Timestamp::FromEpochMs(input.value);
|
1374
1161
|
}
|
1375
1162
|
|
1163
|
+
template <>
|
1164
|
+
date_t CastTimestampMsToDate::Operation(timestamp_t input) {
|
1165
|
+
return Timestamp::GetDate(Timestamp::FromEpochMs(input.value));
|
1166
|
+
}
|
1167
|
+
|
1168
|
+
template <>
|
1169
|
+
dtime_t CastTimestampMsToTime::Operation(timestamp_t input) {
|
1170
|
+
return Timestamp::GetTime(Timestamp::FromEpochMs(input.value));
|
1171
|
+
}
|
1172
|
+
|
1376
1173
|
template <>
|
1377
1174
|
timestamp_t CastTimestampMsToNs::Operation(timestamp_t input) {
|
1378
1175
|
auto us = CastTimestampMsToUs::Operation<timestamp_t, timestamp_t>(input);
|
@@ -1385,8 +1182,15 @@ timestamp_t CastTimestampNsToUs::Operation(timestamp_t input) {
|
|
1385
1182
|
}
|
1386
1183
|
|
1387
1184
|
template <>
|
1388
|
-
|
1389
|
-
|
1185
|
+
date_t CastTimestampNsToDate::Operation(timestamp_t input) {
|
1186
|
+
const auto us = CastTimestampNsToUs::Operation<timestamp_t, timestamp_t>(input);
|
1187
|
+
return Timestamp::GetDate(us);
|
1188
|
+
}
|
1189
|
+
|
1190
|
+
template <>
|
1191
|
+
dtime_t CastTimestampNsToTime::Operation(timestamp_t input) {
|
1192
|
+
const auto us = CastTimestampNsToUs::Operation<timestamp_t, timestamp_t>(input);
|
1193
|
+
return Timestamp::GetTime(us);
|
1390
1194
|
}
|
1391
1195
|
|
1392
1196
|
template <>
|
@@ -1395,12 +1199,29 @@ timestamp_t CastTimestampSecToMs::Operation(timestamp_t input) {
|
|
1395
1199
|
return CastTimestampUsToMs::Operation<timestamp_t, timestamp_t>(us);
|
1396
1200
|
}
|
1397
1201
|
|
1202
|
+
template <>
|
1203
|
+
timestamp_t CastTimestampSecToUs::Operation(timestamp_t input) {
|
1204
|
+
return Timestamp::FromEpochSeconds(input.value);
|
1205
|
+
}
|
1206
|
+
|
1398
1207
|
template <>
|
1399
1208
|
timestamp_t CastTimestampSecToNs::Operation(timestamp_t input) {
|
1400
1209
|
auto us = CastTimestampSecToUs::Operation<timestamp_t, timestamp_t>(input);
|
1401
1210
|
return CastTimestampUsToNs::Operation<timestamp_t, timestamp_t>(us);
|
1402
1211
|
}
|
1403
1212
|
|
1213
|
+
template <>
|
1214
|
+
date_t CastTimestampSecToDate::Operation(timestamp_t input) {
|
1215
|
+
const auto us = CastTimestampSecToUs::Operation<timestamp_t, timestamp_t>(input);
|
1216
|
+
return Timestamp::GetDate(us);
|
1217
|
+
}
|
1218
|
+
|
1219
|
+
template <>
|
1220
|
+
dtime_t CastTimestampSecToTime::Operation(timestamp_t input) {
|
1221
|
+
const auto us = CastTimestampSecToUs::Operation<timestamp_t, timestamp_t>(input);
|
1222
|
+
return Timestamp::GetTime(us);
|
1223
|
+
}
|
1224
|
+
|
1404
1225
|
//===--------------------------------------------------------------------===//
|
1405
1226
|
// Cast To Timestamp
|
1406
1227
|
//===--------------------------------------------------------------------===//
|
@@ -1558,9 +1379,17 @@ bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, bool str
|
|
1558
1379
|
throw ConversionException("Bitstring doesn't fit inside of %s", GetTypeId<hugeint_t>());
|
1559
1380
|
}
|
1560
1381
|
Bit::BitToNumeric(input, result);
|
1561
|
-
|
1562
|
-
|
1382
|
+
return (true);
|
1383
|
+
}
|
1384
|
+
|
1385
|
+
template <>
|
1386
|
+
bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result, bool strict) {
|
1387
|
+
D_ASSERT(input.GetSize() > 1);
|
1388
|
+
|
1389
|
+
if (input.GetSize() - 1 > sizeof(uhugeint_t)) {
|
1390
|
+
throw ConversionException("Bitstring doesn't fit inside of %s", GetTypeId<uhugeint_t>());
|
1563
1391
|
}
|
1392
|
+
Bit::BitToNumeric(input, result);
|
1564
1393
|
return (true);
|
1565
1394
|
}
|
1566
1395
|
|
@@ -1694,7 +1523,7 @@ bool TryCastErrorMessage::Operation(string_t input, interval_t &result, string *
|
|
1694
1523
|
}
|
1695
1524
|
|
1696
1525
|
//===--------------------------------------------------------------------===//
|
1697
|
-
// Cast
|
1526
|
+
// Cast to hugeint / uhugeint
|
1698
1527
|
//===--------------------------------------------------------------------===//
|
1699
1528
|
// parsing hugeint from string is done a bit differently for performance reasons
|
1700
1529
|
// for other integer types we keep track of a single value
|
@@ -1703,131 +1532,221 @@ bool TryCastErrorMessage::Operation(string_t input, interval_t &result, string *
|
|
1703
1532
|
// for that reason, we parse numbers first into an int64 value
|
1704
1533
|
// when that value is full, we perform a HUGEINT multiplication to flush it into the hugeint
|
1705
1534
|
// this takes the number of HUGEINT multiplications down from [0-38] to [0-2]
|
1535
|
+
|
1536
|
+
template <typename T, typename OP>
|
1706
1537
|
struct HugeIntCastData {
|
1707
|
-
|
1538
|
+
using ResultType = T;
|
1539
|
+
using Operation = OP;
|
1540
|
+
ResultType result;
|
1708
1541
|
int64_t intermediate;
|
1709
1542
|
uint8_t digits;
|
1710
|
-
|
1543
|
+
|
1544
|
+
ResultType decimal;
|
1545
|
+
uint16_t decimal_total_digits;
|
1546
|
+
int64_t decimal_intermediate;
|
1547
|
+
uint16_t decimal_intermediate_digits;
|
1711
1548
|
|
1712
1549
|
bool Flush() {
|
1713
1550
|
if (digits == 0 && intermediate == 0) {
|
1714
1551
|
return true;
|
1715
1552
|
}
|
1716
|
-
if (
|
1553
|
+
if (result.lower != 0 || result.upper != 0) {
|
1717
1554
|
if (digits > 38) {
|
1718
1555
|
return false;
|
1719
1556
|
}
|
1720
|
-
if (!
|
1557
|
+
if (!OP::TryMultiply(result, OP::POWERS_OF_TEN[digits], result)) {
|
1721
1558
|
return false;
|
1722
1559
|
}
|
1723
1560
|
}
|
1724
|
-
if (!
|
1561
|
+
if (!OP::TryAddInPlace(result, ResultType(intermediate))) {
|
1725
1562
|
return false;
|
1726
1563
|
}
|
1727
1564
|
digits = 0;
|
1728
1565
|
intermediate = 0;
|
1729
1566
|
return true;
|
1730
1567
|
}
|
1568
|
+
|
1569
|
+
bool FlushDecimal() {
|
1570
|
+
if (decimal_intermediate_digits == 0 && decimal_intermediate == 0) {
|
1571
|
+
return true;
|
1572
|
+
}
|
1573
|
+
if (decimal.lower != 0 || decimal.upper != 0) {
|
1574
|
+
if (decimal_intermediate_digits > 38) {
|
1575
|
+
return false;
|
1576
|
+
}
|
1577
|
+
if (!OP::TryMultiply(decimal, OP::POWERS_OF_TEN[decimal_intermediate_digits], decimal)) {
|
1578
|
+
return false;
|
1579
|
+
}
|
1580
|
+
}
|
1581
|
+
if (!OP::TryAddInPlace(decimal, ResultType(decimal_intermediate))) {
|
1582
|
+
return false;
|
1583
|
+
}
|
1584
|
+
decimal_total_digits += decimal_intermediate_digits;
|
1585
|
+
decimal_intermediate_digits = 0;
|
1586
|
+
decimal_intermediate = 0;
|
1587
|
+
return true;
|
1588
|
+
}
|
1731
1589
|
};
|
1732
1590
|
|
1733
1591
|
struct HugeIntegerCastOperation {
|
1734
1592
|
template <class T, bool NEGATIVE>
|
1735
|
-
static bool HandleDigit(T &
|
1593
|
+
static bool HandleDigit(T &state, uint8_t digit) {
|
1736
1594
|
if (NEGATIVE) {
|
1737
|
-
if (
|
1595
|
+
if (DUCKDB_UNLIKELY(state.intermediate < (NumericLimits<int64_t>::Minimum() + digit) / 10)) {
|
1738
1596
|
// intermediate is full: need to flush it
|
1739
|
-
if (!
|
1597
|
+
if (!state.Flush()) {
|
1740
1598
|
return false;
|
1741
1599
|
}
|
1742
1600
|
}
|
1743
|
-
|
1601
|
+
state.intermediate = state.intermediate * 10 - digit;
|
1744
1602
|
} else {
|
1745
|
-
if (
|
1746
|
-
if (!
|
1603
|
+
if (DUCKDB_UNLIKELY(state.intermediate > (NumericLimits<int64_t>::Maximum() - digit) / 10)) {
|
1604
|
+
if (!state.Flush()) {
|
1747
1605
|
return false;
|
1748
1606
|
}
|
1749
1607
|
}
|
1750
|
-
|
1608
|
+
state.intermediate = state.intermediate * 10 + digit;
|
1751
1609
|
}
|
1752
|
-
|
1610
|
+
state.digits++;
|
1753
1611
|
return true;
|
1754
1612
|
}
|
1755
1613
|
|
1756
1614
|
template <class T, bool NEGATIVE>
|
1757
|
-
static bool HandleHexDigit(T &
|
1615
|
+
static bool HandleHexDigit(T &state, uint8_t digit) {
|
1758
1616
|
return false;
|
1759
1617
|
}
|
1760
1618
|
|
1761
1619
|
template <class T, bool NEGATIVE>
|
1762
|
-
static bool HandleBinaryDigit(T &
|
1763
|
-
|
1764
|
-
// intermediate is full: need to flush it
|
1765
|
-
if (!result.Flush()) {
|
1766
|
-
return false;
|
1767
|
-
}
|
1768
|
-
}
|
1769
|
-
result.intermediate = result.intermediate * 2 + digit;
|
1770
|
-
result.digits++;
|
1771
|
-
return true;
|
1620
|
+
static bool HandleBinaryDigit(T &state, uint8_t digit) {
|
1621
|
+
return false;
|
1772
1622
|
}
|
1773
1623
|
|
1774
1624
|
template <class T, bool NEGATIVE>
|
1775
|
-
static bool HandleExponent(T &
|
1776
|
-
|
1625
|
+
static bool HandleExponent(T &state, int32_t exponent) {
|
1626
|
+
using result_t = typename T::ResultType;
|
1627
|
+
if (!state.Flush()) {
|
1777
1628
|
return false;
|
1778
1629
|
}
|
1779
|
-
|
1780
|
-
|
1781
|
-
|
1782
|
-
|
1783
|
-
|
1630
|
+
|
1631
|
+
int32_t e = exponent;
|
1632
|
+
if (e < -38) {
|
1633
|
+
state.result = 0;
|
1634
|
+
return true;
|
1635
|
+
}
|
1636
|
+
|
1637
|
+
// Negative Exponent
|
1638
|
+
result_t remainder = 0;
|
1639
|
+
if (e < 0) {
|
1640
|
+
state.result = T::Operation::DivMod(state.result, T::Operation::POWERS_OF_TEN[-e], remainder);
|
1641
|
+
if (remainder < 0) {
|
1642
|
+
remainder *= -1;
|
1643
|
+
}
|
1644
|
+
state.decimal = remainder;
|
1645
|
+
state.decimal_total_digits = -e;
|
1646
|
+
state.decimal_intermediate = 0;
|
1647
|
+
state.decimal_intermediate_digits = 0;
|
1648
|
+
return Finalize<T, NEGATIVE>(state);
|
1649
|
+
}
|
1650
|
+
|
1651
|
+
// Positive Exponent
|
1652
|
+
if (state.result != 0) {
|
1653
|
+
if (e > 38 || !TryMultiplyOperator::Operation(state.result, T::Operation::POWERS_OF_TEN[e], state.result)) {
|
1784
1654
|
return false;
|
1785
1655
|
}
|
1786
|
-
result.hugeint = Hugeint::Convert(dbl_res);
|
1787
|
-
return true;
|
1788
1656
|
}
|
1789
|
-
if (
|
1790
|
-
|
1791
|
-
|
1792
|
-
|
1657
|
+
if (!state.FlushDecimal()) {
|
1658
|
+
return false;
|
1659
|
+
}
|
1660
|
+
if (state.decimal == 0) {
|
1661
|
+
return Finalize<T, NEGATIVE>(state);
|
1662
|
+
}
|
1663
|
+
|
1664
|
+
e = exponent - state.decimal_total_digits;
|
1665
|
+
if (e < 0) {
|
1666
|
+
state.decimal = T::Operation::DivMod(state.decimal, T::Operation::POWERS_OF_TEN[-e], remainder);
|
1667
|
+
state.decimal_total_digits -= (exponent);
|
1793
1668
|
} else {
|
1794
|
-
|
1795
|
-
|
1669
|
+
if (e > 38 ||
|
1670
|
+
!TryMultiplyOperator::Operation(state.decimal, T::Operation::POWERS_OF_TEN[e], state.decimal)) {
|
1671
|
+
return false;
|
1672
|
+
}
|
1796
1673
|
}
|
1674
|
+
|
1675
|
+
if (NEGATIVE) {
|
1676
|
+
if (!TrySubtractOperator::Operation(state.result, state.decimal, state.result)) {
|
1677
|
+
return false;
|
1678
|
+
}
|
1679
|
+
} else if (!TryAddOperator::Operation(state.result, state.decimal, state.result)) {
|
1680
|
+
return false;
|
1681
|
+
}
|
1682
|
+
state.decimal = remainder;
|
1683
|
+
return Finalize<T, NEGATIVE>(state);
|
1797
1684
|
}
|
1798
1685
|
|
1799
1686
|
template <class T, bool NEGATIVE, bool ALLOW_EXPONENT>
|
1800
|
-
static bool HandleDecimal(T &
|
1801
|
-
|
1802
|
-
|
1803
|
-
|
1687
|
+
static bool HandleDecimal(T &state, uint8_t digit) {
|
1688
|
+
if (!state.Flush()) {
|
1689
|
+
return false;
|
1690
|
+
}
|
1691
|
+
if (DUCKDB_UNLIKELY(state.decimal_intermediate > (NumericLimits<int64_t>::Maximum() - digit) / 10)) {
|
1692
|
+
if (!state.FlushDecimal()) {
|
1804
1693
|
return false;
|
1805
1694
|
}
|
1806
|
-
if (NEGATIVE) {
|
1807
|
-
result.intermediate = -(digit >= 5);
|
1808
|
-
} else {
|
1809
|
-
result.intermediate = (digit >= 5);
|
1810
|
-
}
|
1811
1695
|
}
|
1812
|
-
|
1813
|
-
|
1696
|
+
state.decimal_intermediate = state.decimal_intermediate * 10 + digit;
|
1697
|
+
state.decimal_intermediate_digits++;
|
1814
1698
|
return true;
|
1815
1699
|
}
|
1816
1700
|
|
1817
1701
|
template <class T, bool NEGATIVE>
|
1818
|
-
static bool Finalize(T &
|
1819
|
-
|
1702
|
+
static bool Finalize(T &state) {
|
1703
|
+
using result_t = typename T::ResultType;
|
1704
|
+
if (!state.Flush() || !state.FlushDecimal()) {
|
1705
|
+
return false;
|
1706
|
+
}
|
1707
|
+
|
1708
|
+
if (state.decimal == 0 || state.decimal_total_digits == 0) {
|
1709
|
+
return true;
|
1710
|
+
}
|
1711
|
+
|
1712
|
+
// Get the first (left-most) digit of the decimals
|
1713
|
+
while (state.decimal_total_digits > 39) {
|
1714
|
+
state.decimal /= T::Operation::POWERS_OF_TEN[39];
|
1715
|
+
state.decimal_total_digits -= 39;
|
1716
|
+
}
|
1717
|
+
D_ASSERT((state.decimal_total_digits - 1) >= 0 && (state.decimal_total_digits - 1) <= 39);
|
1718
|
+
state.decimal /= T::Operation::POWERS_OF_TEN[state.decimal_total_digits - 1];
|
1719
|
+
|
1720
|
+
if (state.decimal >= 5) {
|
1721
|
+
if (NEGATIVE) {
|
1722
|
+
return TrySubtractOperator::Operation(state.result, result_t(1), state.result);
|
1723
|
+
} else {
|
1724
|
+
return TryAddOperator::Operation(state.result, result_t(1), state.result);
|
1725
|
+
}
|
1726
|
+
}
|
1727
|
+
return true;
|
1820
1728
|
}
|
1821
1729
|
};
|
1822
1730
|
|
1823
1731
|
template <>
|
1824
1732
|
bool TryCast::Operation(string_t input, hugeint_t &result, bool strict) {
|
1825
|
-
HugeIntCastData
|
1826
|
-
if (!TryIntegerCast<HugeIntCastData, true, true, HugeIntegerCastOperation>(
|
1827
|
-
|
1733
|
+
HugeIntCastData<hugeint_t, Hugeint> state {};
|
1734
|
+
if (!TryIntegerCast<HugeIntCastData<hugeint_t, Hugeint>, true, true, HugeIntegerCastOperation>(
|
1735
|
+
input.GetData(), input.GetSize(), state, strict)) {
|
1736
|
+
return false;
|
1737
|
+
}
|
1738
|
+
result = state.result;
|
1739
|
+
return true;
|
1740
|
+
}
|
1741
|
+
|
1742
|
+
template <>
|
1743
|
+
bool TryCast::Operation(string_t input, uhugeint_t &result, bool strict) {
|
1744
|
+
HugeIntCastData<uhugeint_t, Uhugeint> state {};
|
1745
|
+
if (!TryIntegerCast<HugeIntCastData<uhugeint_t, Uhugeint>, false, true, HugeIntegerCastOperation>(
|
1746
|
+
input.GetData(), input.GetSize(), state, strict)) {
|
1828
1747
|
return false;
|
1829
1748
|
}
|
1830
|
-
result =
|
1749
|
+
result = state.result;
|
1831
1750
|
return true;
|
1832
1751
|
}
|
1833
1752
|
|
@@ -1835,10 +1754,10 @@ bool TryCast::Operation(string_t input, hugeint_t &result, bool strict) {
|
|
1835
1754
|
// Decimal String Cast
|
1836
1755
|
//===--------------------------------------------------------------------===//
|
1837
1756
|
|
1838
|
-
template <class
|
1757
|
+
template <class T>
|
1839
1758
|
struct DecimalCastData {
|
1840
|
-
|
1841
|
-
|
1759
|
+
using StoreType = T;
|
1760
|
+
StoreType result;
|
1842
1761
|
uint8_t width;
|
1843
1762
|
uint8_t scale;
|
1844
1763
|
uint8_t digit_count;
|
@@ -1866,12 +1785,12 @@ struct DecimalCastOperation {
|
|
1866
1785
|
}
|
1867
1786
|
state.digit_count++;
|
1868
1787
|
if (NEGATIVE) {
|
1869
|
-
if (state.result < (NumericLimits<typename T::
|
1788
|
+
if (state.result < (NumericLimits<typename T::StoreType>::Minimum() / 10)) {
|
1870
1789
|
return false;
|
1871
1790
|
}
|
1872
1791
|
state.result = state.result * 10 - digit;
|
1873
1792
|
} else {
|
1874
|
-
if (state.result > (NumericLimits<typename T::
|
1793
|
+
if (state.result > (NumericLimits<typename T::StoreType>::Maximum() / 10)) {
|
1875
1794
|
return false;
|
1876
1795
|
}
|
1877
1796
|
state.result = state.result * 10 + digit;
|
@@ -2417,6 +2336,46 @@ bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result, string *err
|
|
2417
2336
|
return HugeintToDecimalCast<hugeint_t>(input, result, error_message, width, scale);
|
2418
2337
|
}
|
2419
2338
|
|
2339
|
+
//===--------------------------------------------------------------------===//
|
2340
|
+
// Uhugeint -> Decimal Cast
|
2341
|
+
//===--------------------------------------------------------------------===//
|
2342
|
+
template <class DST>
|
2343
|
+
bool UhugeintToDecimalCast(uhugeint_t input, DST &result, string *error_message, uint8_t width, uint8_t scale) {
|
2344
|
+
// check for overflow
|
2345
|
+
uhugeint_t max_width = Uhugeint::POWERS_OF_TEN[width - scale];
|
2346
|
+
if (input >= max_width) {
|
2347
|
+
string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", input.ToString(), width, scale);
|
2348
|
+
HandleCastError::AssignError(error, error_message);
|
2349
|
+
return false;
|
2350
|
+
}
|
2351
|
+
result = Uhugeint::Cast<DST>(input * Uhugeint::POWERS_OF_TEN[scale]);
|
2352
|
+
return true;
|
2353
|
+
}
|
2354
|
+
|
2355
|
+
template <>
|
2356
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result, string *error_message, uint8_t width,
|
2357
|
+
uint8_t scale) {
|
2358
|
+
return UhugeintToDecimalCast<int16_t>(input, result, error_message, width, scale);
|
2359
|
+
}
|
2360
|
+
|
2361
|
+
template <>
|
2362
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result, string *error_message, uint8_t width,
|
2363
|
+
uint8_t scale) {
|
2364
|
+
return UhugeintToDecimalCast<int32_t>(input, result, error_message, width, scale);
|
2365
|
+
}
|
2366
|
+
|
2367
|
+
template <>
|
2368
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result, string *error_message, uint8_t width,
|
2369
|
+
uint8_t scale) {
|
2370
|
+
return UhugeintToDecimalCast<int64_t>(input, result, error_message, width, scale);
|
2371
|
+
}
|
2372
|
+
|
2373
|
+
template <>
|
2374
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result, string *error_message, uint8_t width,
|
2375
|
+
uint8_t scale) {
|
2376
|
+
return UhugeintToDecimalCast<hugeint_t>(input, result, error_message, width, scale);
|
2377
|
+
}
|
2378
|
+
|
2420
2379
|
//===--------------------------------------------------------------------===//
|
2421
2380
|
// Float/Double -> Decimal Cast
|
2422
2381
|
//===--------------------------------------------------------------------===//
|
@@ -2721,6 +2680,30 @@ bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result, string *e
|
|
2721
2680
|
return TryCastHugeDecimalToNumeric<hugeint_t>(input, result, error_message, scale);
|
2722
2681
|
}
|
2723
2682
|
|
2683
|
+
//===--------------------------------------------------------------------===//
|
2684
|
+
// Cast Decimal -> uhugeint_t
|
2685
|
+
//===--------------------------------------------------------------------===//
|
2686
|
+
template <>
|
2687
|
+
bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result, string *error_message, uint8_t width,
|
2688
|
+
uint8_t scale) {
|
2689
|
+
return TryCastDecimalToNumeric<int16_t, uhugeint_t>(input, result, error_message, scale);
|
2690
|
+
}
|
2691
|
+
template <>
|
2692
|
+
bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result, string *error_message, uint8_t width,
|
2693
|
+
uint8_t scale) {
|
2694
|
+
return TryCastDecimalToNumeric<int32_t, uhugeint_t>(input, result, error_message, scale);
|
2695
|
+
}
|
2696
|
+
template <>
|
2697
|
+
bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result, string *error_message, uint8_t width,
|
2698
|
+
uint8_t scale) {
|
2699
|
+
return TryCastDecimalToNumeric<int64_t, uhugeint_t>(input, result, error_message, scale);
|
2700
|
+
}
|
2701
|
+
template <>
|
2702
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result, string *error_message, uint8_t width,
|
2703
|
+
uint8_t scale) {
|
2704
|
+
return TryCastHugeDecimalToNumeric<uhugeint_t>(input, result, error_message, scale);
|
2705
|
+
}
|
2706
|
+
|
2724
2707
|
//===--------------------------------------------------------------------===//
|
2725
2708
|
// Decimal -> Float/Double Cast
|
2726
2709
|
//===--------------------------------------------------------------------===//
|