duckdb 0.10.1-dev9.0 → 0.10.2-dev0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.github/workflows/NodeJS.yml +9 -16
- package/binding.gyp +4 -1
- package/package.json +1 -1
- package/src/database.cpp +1 -0
- package/src/duckdb/extension/icu/icu-strptime.cpp +46 -4
- package/src/duckdb/extension/icu/icu-table-range.cpp +5 -0
- package/src/duckdb/extension/icu/icu-timezone.cpp +28 -4
- package/src/duckdb/extension/json/buffered_json_reader.cpp +6 -5
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +3 -3
- package/src/duckdb/extension/json/include/json_transform.hpp +2 -0
- package/src/duckdb/extension/json/json_functions/json_create.cpp +6 -0
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +8 -9
- package/src/duckdb/extension/json/json_functions.cpp +1 -2
- package/src/duckdb/extension/json/json_scan.cpp +1 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +17 -1
- package/src/duckdb/extension/parquet/column_writer.cpp +151 -20
- package/src/duckdb/extension/parquet/include/column_writer.hpp +3 -4
- package/src/duckdb/extension/parquet/parquet_extension.cpp +14 -9
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +10 -0
- package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -0
- package/src/duckdb/src/catalog/catalog.cpp +94 -10
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +9 -5
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +1 -0
- package/src/duckdb/src/catalog/catalog_entry/ub_duckdb_catalog_entries.cpp +16 -0
- package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +28 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
- package/src/duckdb/src/catalog/default/default_views.cpp +3 -3
- package/src/duckdb/src/catalog/default/ub_duckdb_catalog_default_entries.cpp +5 -0
- package/src/duckdb/src/catalog/dependency_catalog_set.cpp +1 -3
- package/src/duckdb/src/catalog/dependency_manager.cpp +2 -5
- package/src/duckdb/src/catalog/ub_duckdb_catalog.cpp +10 -0
- package/src/duckdb/src/common/adbc/adbc.cpp +1 -1
- package/src/duckdb/src/common/adbc/driver_manager.cpp +2 -1
- package/src/duckdb/src/common/adbc/nanoarrow/ub_duckdb_adbc_nanoarrow.cpp +5 -0
- package/src/duckdb/src/common/adbc/ub_duckdb_adbc.cpp +3 -0
- package/src/duckdb/src/common/allocator.cpp +34 -8
- package/src/duckdb/src/common/arrow/appender/fixed_size_list_data.cpp +39 -0
- package/src/duckdb/src/common/arrow/appender/ub_duckdb_common_arrow_appender.cpp +6 -0
- package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -1
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -5
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +17 -0
- package/src/duckdb/src/common/arrow/ub_duckdb_common_arrow.cpp +4 -0
- package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
- package/src/duckdb/src/common/crypto/ub_duckdb_common_crypto.cpp +2 -0
- package/src/duckdb/src/common/enum_util.cpp +153 -13
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +0 -2
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -2
- package/src/duckdb/src/common/enums/ub_duckdb_common_enums.cpp +12 -0
- package/src/duckdb/src/common/exception/conversion_exception.cpp +23 -0
- package/src/duckdb/src/common/exception.cpp +7 -14
- package/src/duckdb/src/common/extra_type_info.cpp +6 -5
- package/src/duckdb/src/common/gzip_file_system.cpp +5 -4
- package/src/duckdb/src/common/local_file_system.cpp +85 -10
- package/src/duckdb/src/common/operator/cast_operators.cpp +413 -305
- package/src/duckdb/src/common/operator/ub_duckdb_common_operators.cpp +4 -0
- package/src/duckdb/src/common/progress_bar/ub_duckdb_progress_bar.cpp +3 -0
- package/src/duckdb/src/common/re2_regex.cpp +2 -1
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +2 -2
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +1 -0
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +2 -2
- package/src/duckdb/src/common/row_operations/ub_duckdb_row_operations.cpp +9 -0
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
- package/src/duckdb/src/common/serializer/ub_duckdb_common_serializer.cpp +7 -0
- package/src/duckdb/src/common/sort/partition_state.cpp +2 -3
- package/src/duckdb/src/common/sort/ub_duckdb_sort.cpp +7 -0
- package/src/duckdb/src/common/string_util.cpp +3 -3
- package/src/duckdb/src/common/types/bit.cpp +7 -6
- package/src/duckdb/src/common/types/blob.cpp +20 -9
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +8 -6
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +11 -1
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +5 -0
- package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +1 -1
- package/src/duckdb/src/common/types/column/ub_duckdb_common_types_column.cpp +6 -0
- package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
- package/src/duckdb/src/common/types/date.cpp +1 -1
- package/src/duckdb/src/common/types/hugeint.cpp +3 -2
- package/src/duckdb/src/common/types/interval.cpp +1 -1
- package/src/duckdb/src/common/types/list_segment.cpp +2 -1
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +7 -7
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +10 -27
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +168 -88
- package/src/duckdb/src/common/types/row/ub_duckdb_common_types_row.cpp +11 -0
- package/src/duckdb/src/common/types/selection_vector.cpp +1 -1
- package/src/duckdb/src/common/types/string_heap.cpp +5 -1
- package/src/duckdb/src/common/types/string_type.cpp +18 -4
- package/src/duckdb/src/common/types/time.cpp +4 -2
- package/src/duckdb/src/common/types/timestamp.cpp +32 -6
- package/src/duckdb/src/common/types/ub_duckdb_common_types.cpp +28 -0
- package/src/duckdb/src/common/types/uhugeint.cpp +3 -2
- package/src/duckdb/src/common/types/uuid.cpp +11 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +4 -3
- package/src/duckdb/src/common/types/value.cpp +17 -6
- package/src/duckdb/src/common/types/vector.cpp +243 -68
- package/src/duckdb/src/common/types.cpp +7 -5
- package/src/duckdb/src/common/ub_duckdb_common.cpp +34 -0
- package/src/duckdb/src/common/value_operations/ub_duckdb_value_operations.cpp +2 -0
- package/src/duckdb/src/common/vector_operations/generators.cpp +2 -1
- package/src/duckdb/src/common/vector_operations/vector_cast.cpp +4 -4
- package/src/duckdb/src/common/vector_operations/vector_copy.cpp +2 -2
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +17 -6
- package/src/duckdb/src/core_functions/aggregate/algebraic/ub_duckdb_aggr_algebraic.cpp +5 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +30 -6
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +1 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +12 -5
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +2 -2
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/ub_duckdb_aggr_distributive.cpp +13 -0
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +2 -9
- package/src/duckdb/src/core_functions/aggregate/holistic/ub_duckdb_aggr_holistic.cpp +5 -0
- package/src/duckdb/src/core_functions/aggregate/nested/ub_duckdb_aggr_nested.cpp +3 -0
- package/src/duckdb/src/core_functions/aggregate/regression/ub_duckdb_aggr_regr.cpp +8 -0
- package/src/duckdb/src/core_functions/function_list.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/bit/bitstring.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/bit/ub_duckdb_func_bit.cpp +2 -0
- package/src/duckdb/src/core_functions/scalar/blob/ub_duckdb_func_blob.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/date/date_diff.cpp +8 -0
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +22 -3
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +29 -7
- package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +3 -1
- package/src/duckdb/src/core_functions/scalar/date/ub_duckdb_func_date.cpp +12 -0
- package/src/duckdb/src/core_functions/scalar/debug/ub_duckdb_func_debug.cpp +2 -0
- package/src/duckdb/src/core_functions/scalar/enum/ub_duckdb_func_enum.cpp +2 -0
- package/src/duckdb/src/core_functions/scalar/generic/ub_duckdb_func_generic.cpp +9 -0
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +12 -8
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -1
- package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +5 -3
- package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +28 -12
- package/src/duckdb/src/core_functions/scalar/list/ub_duckdb_func_list.cpp +11 -0
- package/src/duckdb/src/core_functions/scalar/map/map.cpp +129 -160
- package/src/duckdb/src/core_functions/scalar/map/ub_duckdb_func_map_nested.cpp +8 -0
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +19 -16
- package/src/duckdb/src/core_functions/scalar/math/ub_duckdb_func_math.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +4 -4
- package/src/duckdb/src/core_functions/scalar/operators/ub_duckdb_func_ops.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/random/ub_duckdb_func_random.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -1
- package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/string/replace.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +2 -1
- package/src/duckdb/src/core_functions/scalar/string/translate.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/string/ub_duckdb_func_string.cpp +26 -0
- package/src/duckdb/src/core_functions/scalar/struct/ub_duckdb_func_struct.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/union/ub_duckdb_func_union.cpp +4 -0
- package/src/duckdb/src/core_functions/ub_duckdb_core_functions.cpp +3 -0
- package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/column_binding_resolver.cpp +7 -1
- package/src/duckdb/src/execution/expression_executor/execute_case.cpp +2 -2
- package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -0
- package/src/duckdb/src/execution/expression_executor/execute_function.cpp +2 -2
- package/src/duckdb/src/execution/expression_executor/execute_operator.cpp +1 -1
- package/src/duckdb/src/execution/expression_executor/ub_duckdb_expression_executor.cpp +11 -0
- package/src/duckdb/src/execution/expression_executor.cpp +5 -2
- package/src/duckdb/src/execution/index/art/art.cpp +12 -6
- package/src/duckdb/src/execution/index/art/art_key.cpp +3 -3
- package/src/duckdb/src/execution/index/art/leaf.cpp +2 -2
- package/src/duckdb/src/execution/index/art/node16.cpp +2 -2
- package/src/duckdb/src/execution/index/art/node256.cpp +3 -3
- package/src/duckdb/src/execution/index/art/node48.cpp +5 -5
- package/src/duckdb/src/execution/index/art/prefix.cpp +1 -1
- package/src/duckdb/src/execution/index/art/ub_duckdb_art_index_execution.cpp +12 -0
- package/src/duckdb/src/execution/index/art/ub_duckdb_execution_index_art.cpp +11 -0
- package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +6 -5
- package/src/duckdb/src/execution/index/ub_duckdb_execution_index.cpp +3 -0
- package/src/duckdb/src/execution/nested_loop_join/ub_duckdb_nested_loop_join.cpp +3 -0
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +3 -4
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +0 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +3 -4
- package/src/duckdb/src/execution/operator/aggregate/ub_duckdb_operator_aggregate.cpp +9 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +1 -1
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +8 -3
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +1 -1
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +5 -5
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +2 -3
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +5 -1
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +2 -2
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +151 -79
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -6
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +27 -6
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +71 -18
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +22 -11
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +6 -4
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +5 -3
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/ub_duckdb_operator_csv_sniffer.cpp +7 -0
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +3 -3
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +30 -5
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +6 -2
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +47 -46
- package/src/duckdb/src/execution/operator/csv_scanner/ub_duckdb_operator_csv_scanner.cpp +10 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +102 -54
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +8 -1
- package/src/duckdb/src/execution/operator/filter/ub_duckdb_operator_filter.cpp +2 -0
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +54 -36
- package/src/duckdb/src/execution/operator/helper/physical_limit_percent.cpp +56 -32
- package/src/duckdb/src/execution/operator/helper/physical_streaming_limit.cpp +9 -13
- package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +12 -0
- package/src/duckdb/src/execution/operator/helper/physical_verify_vector.cpp +221 -0
- package/src/duckdb/src/execution/operator/helper/ub_duckdb_operator_helper.cpp +18 -0
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -0
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +23 -8
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +8 -3
- package/src/duckdb/src/execution/operator/join/ub_duckdb_operator_join.cpp +16 -0
- package/src/duckdb/src/execution/operator/order/physical_order.cpp +2 -3
- package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +2 -7
- package/src/duckdb/src/execution/operator/order/ub_duckdb_operator_order.cpp +3 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +451 -55
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +312 -150
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +200 -75
- package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -0
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +6 -5
- package/src/duckdb/src/execution/operator/persistent/ub_duckdb_operator_persistent.cpp +10 -0
- package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +3 -2
- package/src/duckdb/src/execution/operator/projection/ub_duckdb_operator_projection.cpp +5 -0
- package/src/duckdb/src/execution/operator/scan/ub_duckdb_operator_scan.cpp +7 -0
- package/src/duckdb/src/execution/operator/schema/ub_duckdb_operator_schema.cpp +12 -0
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +25 -0
- package/src/duckdb/src/execution/operator/set/ub_duckdb_operator_set.cpp +4 -0
- package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +4 -4
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +2 -2
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +2 -2
- package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +7 -17
- package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +10 -0
- package/src/duckdb/src/execution/physical_plan/plan_insert.cpp +7 -0
- package/src/duckdb/src/execution/physical_plan/plan_limit.cpp +45 -13
- package/src/duckdb/src/execution/physical_plan/ub_duckdb_physical_plan.cpp +44 -0
- package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +13 -12
- package/src/duckdb/src/execution/ub_duckdb_execution.cpp +15 -0
- package/src/duckdb/src/execution/window_executor.cpp +71 -61
- package/src/duckdb/src/execution/window_segment_tree.cpp +6 -6
- package/src/duckdb/src/extension_forward_decl/icu.cpp +59 -0
- package/src/duckdb/src/function/aggregate/algebraic/ub_duckdb_aggr_algebraic.cpp +5 -0
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +2 -2
- package/src/duckdb/src/function/aggregate/distributive/ub_duckdb_aggr_distr.cpp +3 -0
- package/src/duckdb/src/function/aggregate/holistic/ub_duckdb_aggr_holistic.cpp +5 -0
- package/src/duckdb/src/function/aggregate/nested/ub_duckdb_aggr_nested.cpp +3 -0
- package/src/duckdb/src/function/aggregate/regression/ub_duckdb_aggr_regr.cpp +8 -0
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +3 -2
- package/src/duckdb/src/function/aggregate/ub_duckdb_func_aggr.cpp +3 -0
- package/src/duckdb/src/function/cast/array_casts.cpp +2 -4
- package/src/duckdb/src/function/cast/bit_cast.cpp +13 -13
- package/src/duckdb/src/function/cast/cast_function_set.cpp +2 -0
- package/src/duckdb/src/function/cast/decimal_cast.cpp +38 -44
- package/src/duckdb/src/function/cast/default_casts.cpp +5 -2
- package/src/duckdb/src/function/cast/enum_casts.cpp +5 -5
- package/src/duckdb/src/function/cast/list_casts.cpp +24 -14
- package/src/duckdb/src/function/cast/string_cast.cpp +48 -30
- package/src/duckdb/src/function/cast/struct_cast.cpp +2 -2
- package/src/duckdb/src/function/cast/time_casts.cpp +12 -0
- package/src/duckdb/src/function/cast/ub_duckdb_func_cast.cpp +17 -0
- package/src/duckdb/src/function/cast/union/ub_duckdb_union_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/union_casts.cpp +13 -15
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +1 -1
- package/src/duckdb/src/function/cast_rules.cpp +2 -1
- package/src/duckdb/src/function/pragma/ub_duckdb_func_pragma.cpp +3 -0
- package/src/duckdb/src/function/scalar/bit/ub_duckdb_func_bit.cpp +2 -0
- package/src/duckdb/src/function/scalar/blob/ub_duckdb_func_blob.cpp +3 -0
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +7 -6
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +3 -3
- package/src/duckdb/src/function/scalar/compressed_materialization/ub_duckdb_func_compressed_materialization.cpp +3 -0
- package/src/duckdb/src/function/scalar/date/ub_duckdb_func_date.cpp +12 -0
- package/src/duckdb/src/function/scalar/enum/ub_duckdb_func_enum.cpp +2 -0
- package/src/duckdb/src/function/scalar/generic/ub_duckdb_func_generic.cpp +8 -0
- package/src/duckdb/src/function/scalar/generic/ub_duckdb_func_generic_main.cpp +2 -0
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +3 -1
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +3 -4
- package/src/duckdb/src/function/scalar/list/ub_duckdb_func_list.cpp +11 -0
- package/src/duckdb/src/function/scalar/list/ub_duckdb_func_list_nested.cpp +5 -0
- package/src/duckdb/src/function/scalar/map/ub_duckdb_func_map_nested.cpp +7 -0
- package/src/duckdb/src/function/scalar/math/ub_duckdb_func_math.cpp +4 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +7 -3
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +1 -1
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +4 -2
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +9 -3
- package/src/duckdb/src/function/scalar/operators/ub_duckdb_func_ops.cpp +6 -0
- package/src/duckdb/src/function/scalar/operators/ub_duckdb_func_ops_main.cpp +5 -0
- package/src/duckdb/src/function/scalar/sequence/ub_duckdb_func_seq.cpp +2 -0
- package/src/duckdb/src/function/scalar/strftime_format.cpp +21 -20
- package/src/duckdb/src/function/scalar/string/like.cpp +14 -3
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -2
- package/src/duckdb/src/function/scalar/string/regexp/ub_duckdb_func_string_regexp.cpp +3 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +6 -4
- package/src/duckdb/src/function/scalar/string/suffix.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/ub_duckdb_func_string.cpp +31 -0
- package/src/duckdb/src/function/scalar/string/ub_duckdb_func_string_main.cpp +12 -0
- package/src/duckdb/src/function/scalar/struct/ub_duckdb_func_struct.cpp +4 -0
- package/src/duckdb/src/function/scalar/struct/ub_duckdb_func_struct_main.cpp +2 -0
- package/src/duckdb/src/function/scalar/system/ub_duckdb_func_system.cpp +2 -0
- package/src/duckdb/src/function/scalar/ub_duckdb_func_scalar.cpp +9 -0
- package/src/duckdb/src/function/scalar/union/ub_duckdb_func_union.cpp +4 -0
- package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +28 -2
- package/src/duckdb/src/function/table/arrow/ub_duckdb_arrow_conversion.cpp +2 -0
- package/src/duckdb/src/function/table/arrow.cpp +23 -6
- package/src/duckdb/src/function/table/arrow_conversion.cpp +75 -33
- package/src/duckdb/src/function/table/copy_csv.cpp +8 -3
- package/src/duckdb/src/function/table/range.cpp +5 -0
- package/src/duckdb/src/function/table/read_csv.cpp +9 -8
- package/src/duckdb/src/function/table/read_file.cpp +1 -1
- package/src/duckdb/src/function/table/sniff_csv.cpp +5 -5
- package/src/duckdb/src/function/table/system/duckdb_columns.cpp +6 -2
- package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +5 -1
- package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +3 -1
- package/src/duckdb/src/function/table/system/duckdb_settings.cpp +13 -1
- package/src/duckdb/src/function/table/system/test_all_types.cpp +64 -0
- package/src/duckdb/src/function/table/system/ub_duckdb_table_func_system.cpp +23 -0
- package/src/duckdb/src/function/table/ub_duckdb_func_table.cpp +16 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +11 -2
- package/src/duckdb/src/function/table/version/ub_duckdb_func_table_version.cpp +2 -0
- package/src/duckdb/src/function/ub_duckdb_function.cpp +14 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +11 -1
- 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 +1 -1
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +8 -11
- package/src/duckdb/src/include/duckdb/common/arrow/appender/enum_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/arrow/appender/fixed_size_list_data.hpp +14 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/list_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/bswap.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
- package/src/duckdb/src/include/duckdb/common/enums/catalog_lookup_behavior.hpp +21 -0
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +0 -1
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/enums/prepared_statement_mode.hpp +20 -0
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/file_opener.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/helper.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/limits.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +64 -0
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +34 -33
- package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +150 -124
- package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/radix.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/blob.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +15 -13
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +11 -4
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +40 -7
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/windows_undefs.hpp +4 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +9 -0
- package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +262 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +103 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +74 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_casting.hpp +154 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +130 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +155 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +166 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_sniffer.hpp +191 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state.hpp +30 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +99 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine_cache.hpp +91 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +80 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/quote_rules.hpp +21 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner_boundary.hpp +93 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine_options.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +200 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit.hpp +13 -10
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp +5 -11
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp +4 -6
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_verify_vector.hpp +51 -0
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/batch_memory_manager.hpp +165 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/batch_task_manager.hpp +48 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +10 -17
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +10 -6
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +0 -2
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +14 -5
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +27 -43
- package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +10 -4
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +8 -6
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -0
- package/src/duckdb/src/include/duckdb/main/capi/cast/from_decimal.hpp +6 -4
- package/src/duckdb/src/include/duckdb/main/capi/cast/to_decimal.hpp +17 -10
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +17 -3
- package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +20 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/database.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/database_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +230 -199
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +18 -0
- package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/relation/table_function_relation.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +4 -0
- package/src/duckdb/src/include/duckdb/main/settings.hpp +54 -10
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parallel/concurrentqueue.hpp +21 -5
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +37 -0
- package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/task.hpp +0 -20
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +4 -2
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +10 -0
- 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 +0 -24
- package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_column_info.hpp +46 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +11 -4
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +59 -23
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +11 -3
- package/src/duckdb/src/include/duckdb/planner/extension_callback.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +0 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_limit.hpp +5 -9
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +0 -15
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +40 -5
- package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +5 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +10 -8
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +5 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/bit_reader.hpp +11 -10
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/bit_utils.hpp +3 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/chimp128.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +5 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -1
- package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +0 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +5 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +9 -2
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +2 -6
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/temporary_file_manager.hpp +169 -0
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +11 -1
- package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -1
- package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
- package/src/duckdb/src/include/duckdb.h +119 -67
- package/src/duckdb/src/main/appender.cpp +2 -1
- package/src/duckdb/src/main/attached_database.cpp +49 -27
- package/src/duckdb/src/main/capi/appender-c.cpp +1 -1
- package/src/duckdb/src/main/capi/cast/ub_duckdb_main_capi_cast.cpp +3 -0
- package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
- package/src/duckdb/src/main/capi/data_chunk-c.cpp +9 -1
- package/src/duckdb/src/main/capi/datetime-c.cpp +14 -8
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +29 -2
- package/src/duckdb/src/main/capi/helper-c.cpp +2 -0
- package/src/duckdb/src/main/capi/hugeint-c.cpp +2 -1
- package/src/duckdb/src/main/capi/logical_types-c.cpp +35 -1
- package/src/duckdb/src/main/capi/result-c.cpp +9 -0
- package/src/duckdb/src/main/capi/ub_duckdb_main_capi.cpp +19 -0
- package/src/duckdb/src/main/chunk_scan_state/ub_duckdb_main_chunk_scan_state.cpp +2 -0
- package/src/duckdb/src/main/client_context.cpp +133 -33
- package/src/duckdb/src/main/client_context_file_opener.cpp +8 -7
- package/src/duckdb/src/main/config.cpp +2 -0
- package/src/duckdb/src/main/connection_manager.cpp +8 -0
- package/src/duckdb/src/main/database.cpp +13 -4
- package/src/duckdb/src/main/database_manager.cpp +10 -1
- package/src/duckdb/src/main/extension/extension_helper.cpp +8 -5
- package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
- package/src/duckdb/src/main/extension/ub_duckdb_main_extension.cpp +6 -0
- package/src/duckdb/src/main/prepared_statement_data.cpp +23 -6
- package/src/duckdb/src/main/query_profiler.cpp +9 -7
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +17 -12
- package/src/duckdb/src/main/relation/ub_duckdb_main_relation.cpp +26 -0
- package/src/duckdb/src/main/relation/value_relation.cpp +2 -0
- package/src/duckdb/src/main/secret/secret.cpp +1 -1
- package/src/duckdb/src/main/secret/secret_manager.cpp +41 -8
- package/src/duckdb/src/main/secret/secret_storage.cpp +8 -2
- package/src/duckdb/src/main/settings/settings.cpp +42 -2
- package/src/duckdb/src/main/settings/ub_duckdb_main_settings.cpp +2 -0
- package/src/duckdb/src/main/ub_duckdb_main.cpp +25 -0
- package/src/duckdb/src/optimizer/compressed_materialization/ub_duckdb_optimizer_compressed_materialization.cpp +4 -0
- package/src/duckdb/src/optimizer/filter_combiner.cpp +20 -14
- package/src/duckdb/src/optimizer/in_clause_rewriter.cpp +5 -1
- package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +23 -11
- package/src/duckdb/src/optimizer/join_order/ub_duckdb_optimizer_join_order.cpp +12 -0
- package/src/duckdb/src/optimizer/matcher/ub_duckdb_optimizer_matcher.cpp +2 -0
- package/src/duckdb/src/optimizer/pullup/ub_duckdb_optimizer_pullup.cpp +6 -0
- package/src/duckdb/src/optimizer/pushdown/pushdown_limit.cpp +1 -1
- package/src/duckdb/src/optimizer/pushdown/ub_duckdb_optimizer_pushdown.cpp +12 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +7 -6
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +8 -6
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +1 -1
- package/src/duckdb/src/optimizer/rule/ub_duckdb_optimizer_rules.cpp +16 -0
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +71 -1
- package/src/duckdb/src/optimizer/statistics/expression/ub_duckdb_optimizer_statistics_expr.cpp +11 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +5 -1
- package/src/duckdb/src/optimizer/statistics/operator/ub_duckdb_optimizer_statistics_op.cpp +11 -0
- package/src/duckdb/src/optimizer/topn_optimizer.cpp +12 -11
- package/src/duckdb/src/optimizer/ub_duckdb_optimizer.cpp +20 -0
- package/src/duckdb/src/parallel/executor.cpp +8 -19
- package/src/duckdb/src/parallel/executor_task.cpp +6 -2
- package/src/duckdb/src/parallel/pipeline.cpp +12 -6
- package/src/duckdb/src/parallel/pipeline_executor.cpp +1 -1
- package/src/duckdb/src/parallel/pipeline_finish_event.cpp +2 -2
- package/src/duckdb/src/parallel/pipeline_initialize_event.cpp +1 -2
- package/src/duckdb/src/parallel/task_scheduler.cpp +15 -8
- package/src/duckdb/src/parallel/ub_duckdb_parallel.cpp +15 -0
- package/src/duckdb/src/parser/constraints/ub_duckdb_constraints.cpp +5 -0
- package/src/duckdb/src/parser/expression/ub_duckdb_expression.cpp +18 -0
- package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +0 -18
- package/src/duckdb/src/parser/parsed_data/comment_on_column_info.cpp +44 -0
- package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +2 -0
- package/src/duckdb/src/parser/parsed_data/ub_duckdb_parsed_data.cpp +24 -0
- package/src/duckdb/src/parser/parser.cpp +1 -1
- package/src/duckdb/src/parser/query_error_context.cpp +15 -1
- package/src/duckdb/src/parser/query_node/ub_duckdb_query_node.cpp +5 -0
- package/src/duckdb/src/parser/statement/export_statement.cpp +2 -1
- package/src/duckdb/src/parser/statement/relation_statement.cpp +2 -2
- package/src/duckdb/src/parser/statement/ub_duckdb_statement.cpp +25 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +3 -3
- package/src/duckdb/src/parser/tableref/showref.cpp +2 -0
- package/src/duckdb/src/parser/tableref/ub_duckdb_parser_tableref.cpp +8 -0
- package/src/duckdb/src/parser/transform/constraint/ub_duckdb_transformer_constraint.cpp +2 -0
- package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +10 -2
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +7 -7
- package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +2 -1
- package/src/duckdb/src/parser/transform/expression/ub_duckdb_transformer_expression.cpp +20 -0
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +2 -2
- package/src/duckdb/src/parser/transform/helpers/ub_duckdb_transformer_helpers.cpp +8 -0
- package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +3 -8
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +3 -1
- package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +2 -3
- package/src/duckdb/src/parser/transform/statement/ub_duckdb_transformer_statement.cpp +37 -0
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +16 -0
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +49 -32
- package/src/duckdb/src/parser/transform/tableref/ub_duckdb_transformer_tableref.cpp +8 -0
- package/src/duckdb/src/parser/ub_duckdb_parser.cpp +15 -0
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +11 -4
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +4 -1
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +71 -5
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +35 -1
- package/src/duckdb/src/planner/binder/expression/ub_duckdb_bind_expression.cpp +20 -0
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +55 -51
- package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +1 -11
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/ub_duckdb_bind_query_node.cpp +12 -0
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +12 -6
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +8 -2
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +6 -3
- package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +13 -2
- package/src/duckdb/src/planner/binder/statement/ub_duckdb_bind_statement.cpp +26 -0
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +15 -4
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +9 -2
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +93 -45
- package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +6 -1
- package/src/duckdb/src/planner/binder/tableref/ub_duckdb_bind_tableref.cpp +17 -0
- package/src/duckdb/src/planner/binder.cpp +22 -23
- package/src/duckdb/src/planner/bound_result_modifier.cpp +67 -4
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +5 -1
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +3 -0
- package/src/duckdb/src/planner/expression/ub_duckdb_planner_expression.cpp +19 -0
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +14 -9
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +17 -9
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +61 -37
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +8 -4
- package/src/duckdb/src/planner/expression_binder/ub_duckdb_expression_binders.cpp +20 -0
- package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -2
- package/src/duckdb/src/planner/expression_iterator.cpp +73 -52
- package/src/duckdb/src/planner/filter/ub_duckdb_planner_filter.cpp +4 -0
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +4 -14
- package/src/duckdb/src/planner/operator/logical_limit.cpp +14 -6
- package/src/duckdb/src/planner/operator/ub_duckdb_planner_operator.cpp +43 -0
- package/src/duckdb/src/planner/parsed_data/ub_duckdb_planner_parsed_data.cpp +2 -0
- package/src/duckdb/src/planner/planner.cpp +3 -0
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +46 -18
- package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +39 -33
- package/src/duckdb/src/planner/subquery/ub_duckdb_planner_subquery.cpp +4 -0
- package/src/duckdb/src/planner/ub_duckdb_planner.cpp +15 -0
- package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
- package/src/duckdb/src/storage/buffer/block_handle.cpp +7 -2
- package/src/duckdb/src/storage/buffer/block_manager.cpp +7 -3
- package/src/duckdb/src/storage/buffer/buffer_pool.cpp +121 -24
- package/src/duckdb/src/storage/buffer/ub_duckdb_storage_buffer.cpp +6 -0
- package/src/duckdb/src/storage/checkpoint/ub_duckdb_storage_checkpoint.cpp +5 -0
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +4 -4
- package/src/duckdb/src/storage/compression/chimp/ub_duckdb_storage_compression_chimp.cpp +6 -0
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +6 -5
- package/src/duckdb/src/storage/compression/fsst.cpp +3 -2
- package/src/duckdb/src/storage/compression/rle.cpp +1 -1
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +4 -4
- package/src/duckdb/src/storage/compression/ub_duckdb_storage_compression.cpp +12 -0
- package/src/duckdb/src/storage/data_table.cpp +6 -3
- package/src/duckdb/src/storage/local_storage.cpp +5 -2
- package/src/duckdb/src/storage/metadata/metadata_manager.cpp +4 -4
- package/src/duckdb/src/storage/metadata/metadata_reader.cpp +1 -1
- package/src/duckdb/src/storage/metadata/metadata_writer.cpp +1 -1
- package/src/duckdb/src/storage/metadata/ub_duckdb_storage_metadata.cpp +4 -0
- package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +2 -0
- package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -0
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +5 -29
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +22 -4
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +12 -32
- package/src/duckdb/src/storage/serialization/ub_duckdb_storage_serialization.cpp +16 -0
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +29 -397
- package/src/duckdb/src/storage/statistics/string_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/ub_duckdb_storage_statistics.cpp +10 -0
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -3
- package/src/duckdb/src/storage/table/column_data.cpp +7 -16
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +4 -1
- package/src/duckdb/src/storage/table/column_segment.cpp +68 -78
- package/src/duckdb/src/storage/table/list_column_data.cpp +1 -0
- package/src/duckdb/src/storage/table/row_group.cpp +17 -7
- package/src/duckdb/src/storage/table/row_group_collection.cpp +28 -27
- package/src/duckdb/src/storage/table/ub_duckdb_storage_table.cpp +17 -0
- package/src/duckdb/src/storage/table/update_segment.cpp +7 -7
- package/src/duckdb/src/storage/temporary_file_manager.cpp +334 -0
- package/src/duckdb/src/storage/ub_duckdb_storage.cpp +20 -0
- package/src/duckdb/src/storage/write_ahead_log.cpp +3 -2
- package/src/duckdb/src/transaction/commit_state.cpp +4 -2
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +32 -17
- package/src/duckdb/src/transaction/meta_transaction.cpp +24 -0
- package/src/duckdb/src/transaction/transaction_context.cpp +0 -9
- package/src/duckdb/src/transaction/ub_duckdb_transaction.cpp +11 -0
- package/src/duckdb/src/transaction/undo_buffer.cpp +1 -1
- package/src/duckdb/third_party/jaro_winkler/details/common.hpp +1 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +2 -0
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1032 -551
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24122 -24304
- package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +0 -3
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +32 -4
- package/src/duckdb/third_party/miniz/miniz_wrapper.hpp +4 -4
- package/src/duckdb/third_party/tdigest/t_digest.hpp +3 -3
- package/src/duckdb/ub_src_common_arrow_appender.cpp +2 -0
- package/src/duckdb/ub_src_common_exception.cpp +2 -0
- package/src/duckdb/ub_src_execution_operator_helper.cpp +2 -0
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +0 -2
- package/src/duckdb/ub_src_execution_physical_plan.cpp +0 -2
- package/src/duckdb/ub_src_parser_parsed_data.cpp +1 -1
- package/src/duckdb/ub_src_planner_operator.cpp +0 -2
- package/src/duckdb/ub_src_storage.cpp +2 -0
- package/test/columns.test.ts +1 -1
- package/test/test_all_types.test.ts +1 -1
@@ -927,7 +927,7 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) {
|
|
927
927
|
|
928
928
|
switch (input_size) {
|
929
929
|
case 1: {
|
930
|
-
char c = std::tolower(*input_data);
|
930
|
+
char c = UnsafeNumericCast<char>(std::tolower(*input_data));
|
931
931
|
if (c == 't' || (!strict && c == '1')) {
|
932
932
|
result = true;
|
933
933
|
return true;
|
@@ -938,10 +938,10 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) {
|
|
938
938
|
return false;
|
939
939
|
}
|
940
940
|
case 4: {
|
941
|
-
char t = std::tolower(input_data[0]);
|
942
|
-
char r = std::tolower(input_data[1]);
|
943
|
-
char u = std::tolower(input_data[2]);
|
944
|
-
char e = std::tolower(input_data[3]);
|
941
|
+
char t = UnsafeNumericCast<char>(std::tolower(input_data[0]));
|
942
|
+
char r = UnsafeNumericCast<char>(std::tolower(input_data[1]));
|
943
|
+
char u = UnsafeNumericCast<char>(std::tolower(input_data[2]));
|
944
|
+
char e = UnsafeNumericCast<char>(std::tolower(input_data[3]));
|
945
945
|
if (t == 't' && r == 'r' && u == 'u' && e == 'e') {
|
946
946
|
result = true;
|
947
947
|
return true;
|
@@ -949,11 +949,11 @@ bool TryCast::Operation(string_t input, bool &result, bool strict) {
|
|
949
949
|
return false;
|
950
950
|
}
|
951
951
|
case 5: {
|
952
|
-
char f = std::tolower(input_data[0]);
|
953
|
-
char a = std::tolower(input_data[1]);
|
954
|
-
char l = std::tolower(input_data[2]);
|
955
|
-
char s = std::tolower(input_data[3]);
|
956
|
-
char e = std::tolower(input_data[4]);
|
952
|
+
char f = UnsafeNumericCast<char>(std::tolower(input_data[0]));
|
953
|
+
char a = UnsafeNumericCast<char>(std::tolower(input_data[1]));
|
954
|
+
char l = UnsafeNumericCast<char>(std::tolower(input_data[2]));
|
955
|
+
char s = UnsafeNumericCast<char>(std::tolower(input_data[3]));
|
956
|
+
char e = UnsafeNumericCast<char>(std::tolower(input_data[4]));
|
957
957
|
if (f == 'f' && a == 'a' && l == 'l' && s == 's' && e == 'e') {
|
958
958
|
result = false;
|
959
959
|
return true;
|
@@ -1009,20 +1009,20 @@ bool TryCast::Operation(string_t input, double &result, bool strict) {
|
|
1009
1009
|
}
|
1010
1010
|
|
1011
1011
|
template <>
|
1012
|
-
bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result,
|
1013
|
-
if (!TryDoubleCast<float>(input.GetData(), input.GetSize(), result, strict, ',')) {
|
1012
|
+
bool TryCastErrorMessageCommaSeparated::Operation(string_t input, float &result, CastParameters ¶meters) {
|
1013
|
+
if (!TryDoubleCast<float>(input.GetData(), input.GetSize(), result, parameters.strict, ',')) {
|
1014
1014
|
HandleCastError::AssignError(StringUtil::Format("Could not cast string to float: \"%s\"", input.GetString()),
|
1015
|
-
|
1015
|
+
parameters);
|
1016
1016
|
return false;
|
1017
1017
|
}
|
1018
1018
|
return true;
|
1019
1019
|
}
|
1020
1020
|
|
1021
1021
|
template <>
|
1022
|
-
bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result,
|
1023
|
-
if (!TryDoubleCast<double>(input.GetData(), input.GetSize(), result, strict, ',')) {
|
1022
|
+
bool TryCastErrorMessageCommaSeparated::Operation(string_t input, double &result, CastParameters ¶meters) {
|
1023
|
+
if (!TryDoubleCast<double>(input.GetData(), input.GetSize(), result, parameters.strict, ',')) {
|
1024
1024
|
HandleCastError::AssignError(StringUtil::Format("Could not cast string to double: \"%s\"", input.GetString()),
|
1025
|
-
|
1025
|
+
parameters);
|
1026
1026
|
return false;
|
1027
1027
|
}
|
1028
1028
|
return true;
|
@@ -1126,37 +1126,49 @@ bool TryCast::Operation(interval_t input, interval_t &result, bool strict) {
|
|
1126
1126
|
//===--------------------------------------------------------------------===//
|
1127
1127
|
template <>
|
1128
1128
|
duckdb::string_t CastFromTimestampNS::Operation(duckdb::timestamp_t input, Vector &result) {
|
1129
|
-
return StringCast::Operation<timestamp_t>(
|
1129
|
+
return StringCast::Operation<timestamp_t>(CastTimestampNsToUs::Operation<timestamp_t, timestamp_t>(input), result);
|
1130
1130
|
}
|
1131
1131
|
template <>
|
1132
1132
|
duckdb::string_t CastFromTimestampMS::Operation(duckdb::timestamp_t input, Vector &result) {
|
1133
|
-
return StringCast::Operation<timestamp_t>(
|
1133
|
+
return StringCast::Operation<timestamp_t>(CastTimestampMsToUs::Operation<timestamp_t, timestamp_t>(input), result);
|
1134
1134
|
}
|
1135
1135
|
template <>
|
1136
1136
|
duckdb::string_t CastFromTimestampSec::Operation(duckdb::timestamp_t input, Vector &result) {
|
1137
|
-
return StringCast::Operation<timestamp_t>(
|
1137
|
+
return StringCast::Operation<timestamp_t>(CastTimestampSecToUs::Operation<timestamp_t, timestamp_t>(input), result);
|
1138
1138
|
}
|
1139
1139
|
|
1140
1140
|
template <>
|
1141
1141
|
timestamp_t CastTimestampUsToMs::Operation(timestamp_t input) {
|
1142
|
+
if (!Timestamp::IsFinite(input)) {
|
1143
|
+
return input;
|
1144
|
+
}
|
1142
1145
|
timestamp_t cast_timestamp(Timestamp::GetEpochMs(input));
|
1143
1146
|
return cast_timestamp;
|
1144
1147
|
}
|
1145
1148
|
|
1146
1149
|
template <>
|
1147
1150
|
timestamp_t CastTimestampUsToNs::Operation(timestamp_t input) {
|
1151
|
+
if (!Timestamp::IsFinite(input)) {
|
1152
|
+
return input;
|
1153
|
+
}
|
1148
1154
|
timestamp_t cast_timestamp(Timestamp::GetEpochNanoSeconds(input));
|
1149
1155
|
return cast_timestamp;
|
1150
1156
|
}
|
1151
1157
|
|
1152
1158
|
template <>
|
1153
1159
|
timestamp_t CastTimestampUsToSec::Operation(timestamp_t input) {
|
1160
|
+
if (!Timestamp::IsFinite(input)) {
|
1161
|
+
return input;
|
1162
|
+
}
|
1154
1163
|
timestamp_t cast_timestamp(Timestamp::GetEpochSeconds(input));
|
1155
1164
|
return cast_timestamp;
|
1156
1165
|
}
|
1157
1166
|
|
1158
1167
|
template <>
|
1159
1168
|
timestamp_t CastTimestampMsToUs::Operation(timestamp_t input) {
|
1169
|
+
if (!Timestamp::IsFinite(input)) {
|
1170
|
+
return input;
|
1171
|
+
}
|
1160
1172
|
return Timestamp::FromEpochMs(input.value);
|
1161
1173
|
}
|
1162
1174
|
|
@@ -1172,17 +1184,36 @@ dtime_t CastTimestampMsToTime::Operation(timestamp_t input) {
|
|
1172
1184
|
|
1173
1185
|
template <>
|
1174
1186
|
timestamp_t CastTimestampMsToNs::Operation(timestamp_t input) {
|
1187
|
+
if (!Timestamp::IsFinite(input)) {
|
1188
|
+
return input;
|
1189
|
+
}
|
1175
1190
|
auto us = CastTimestampMsToUs::Operation<timestamp_t, timestamp_t>(input);
|
1176
1191
|
return CastTimestampUsToNs::Operation<timestamp_t, timestamp_t>(us);
|
1177
1192
|
}
|
1178
1193
|
|
1179
1194
|
template <>
|
1180
1195
|
timestamp_t CastTimestampNsToUs::Operation(timestamp_t input) {
|
1196
|
+
if (!Timestamp::IsFinite(input)) {
|
1197
|
+
return input;
|
1198
|
+
}
|
1181
1199
|
return Timestamp::FromEpochNanoSeconds(input.value);
|
1182
1200
|
}
|
1183
1201
|
|
1202
|
+
template <>
|
1203
|
+
timestamp_t CastTimestampSecToUs::Operation(timestamp_t input) {
|
1204
|
+
if (!Timestamp::IsFinite(input)) {
|
1205
|
+
return input;
|
1206
|
+
}
|
1207
|
+
return Timestamp::FromEpochSeconds(input.value);
|
1208
|
+
}
|
1209
|
+
|
1184
1210
|
template <>
|
1185
1211
|
date_t CastTimestampNsToDate::Operation(timestamp_t input) {
|
1212
|
+
if (input == timestamp_t::infinity()) {
|
1213
|
+
return date_t::infinity();
|
1214
|
+
} else if (input == timestamp_t::ninfinity()) {
|
1215
|
+
return date_t::ninfinity();
|
1216
|
+
}
|
1186
1217
|
const auto us = CastTimestampNsToUs::Operation<timestamp_t, timestamp_t>(input);
|
1187
1218
|
return Timestamp::GetDate(us);
|
1188
1219
|
}
|
@@ -1195,17 +1226,18 @@ dtime_t CastTimestampNsToTime::Operation(timestamp_t input) {
|
|
1195
1226
|
|
1196
1227
|
template <>
|
1197
1228
|
timestamp_t CastTimestampSecToMs::Operation(timestamp_t input) {
|
1229
|
+
if (!Timestamp::IsFinite(input)) {
|
1230
|
+
return input;
|
1231
|
+
}
|
1198
1232
|
auto us = CastTimestampSecToUs::Operation<timestamp_t, timestamp_t>(input);
|
1199
1233
|
return CastTimestampUsToMs::Operation<timestamp_t, timestamp_t>(us);
|
1200
1234
|
}
|
1201
1235
|
|
1202
|
-
template <>
|
1203
|
-
timestamp_t CastTimestampSecToUs::Operation(timestamp_t input) {
|
1204
|
-
return Timestamp::FromEpochSeconds(input.value);
|
1205
|
-
}
|
1206
|
-
|
1207
1236
|
template <>
|
1208
1237
|
timestamp_t CastTimestampSecToNs::Operation(timestamp_t input) {
|
1238
|
+
if (!Timestamp::IsFinite(input)) {
|
1239
|
+
return input;
|
1240
|
+
}
|
1209
1241
|
auto us = CastTimestampSecToUs::Operation<timestamp_t, timestamp_t>(input);
|
1210
1242
|
return CastTimestampUsToNs::Operation<timestamp_t, timestamp_t>(us);
|
1211
1243
|
}
|
@@ -1230,7 +1262,15 @@ bool TryCastToTimestampNS::Operation(string_t input, timestamp_t &result, bool s
|
|
1230
1262
|
if (!TryCast::Operation<string_t, timestamp_t>(input, result, strict)) {
|
1231
1263
|
return false;
|
1232
1264
|
}
|
1233
|
-
|
1265
|
+
if (!Timestamp::IsFinite(result)) {
|
1266
|
+
return true;
|
1267
|
+
}
|
1268
|
+
|
1269
|
+
int64_t nanoseconds;
|
1270
|
+
if (!Timestamp::TryGetEpochNanoSeconds(result, nanoseconds)) {
|
1271
|
+
throw ConversionException("Could not convert VARCHAR value '%s' to Timestamp(NS)", input.GetString());
|
1272
|
+
}
|
1273
|
+
result = nanoseconds;
|
1234
1274
|
return true;
|
1235
1275
|
}
|
1236
1276
|
|
@@ -1239,6 +1279,9 @@ bool TryCastToTimestampMS::Operation(string_t input, timestamp_t &result, bool s
|
|
1239
1279
|
if (!TryCast::Operation<string_t, timestamp_t>(input, result, strict)) {
|
1240
1280
|
return false;
|
1241
1281
|
}
|
1282
|
+
if (!Timestamp::IsFinite(result)) {
|
1283
|
+
return true;
|
1284
|
+
}
|
1242
1285
|
result = Timestamp::GetEpochMs(result);
|
1243
1286
|
return true;
|
1244
1287
|
}
|
@@ -1248,6 +1291,9 @@ bool TryCastToTimestampSec::Operation(string_t input, timestamp_t &result, bool
|
|
1248
1291
|
if (!TryCast::Operation<string_t, timestamp_t>(input, result, strict)) {
|
1249
1292
|
return false;
|
1250
1293
|
}
|
1294
|
+
if (!Timestamp::IsFinite(result)) {
|
1295
|
+
return true;
|
1296
|
+
}
|
1251
1297
|
result = Timestamp::GetEpochSeconds(result);
|
1252
1298
|
return true;
|
1253
1299
|
}
|
@@ -1257,6 +1303,9 @@ bool TryCastToTimestampNS::Operation(date_t input, timestamp_t &result, bool str
|
|
1257
1303
|
if (!TryCast::Operation<date_t, timestamp_t>(input, result, strict)) {
|
1258
1304
|
return false;
|
1259
1305
|
}
|
1306
|
+
if (!Timestamp::IsFinite(result)) {
|
1307
|
+
return true;
|
1308
|
+
}
|
1260
1309
|
if (!TryMultiplyOperator::Operation(result.value, Interval::NANOS_PER_MICRO, result.value)) {
|
1261
1310
|
return false;
|
1262
1311
|
}
|
@@ -1268,6 +1317,9 @@ bool TryCastToTimestampMS::Operation(date_t input, timestamp_t &result, bool str
|
|
1268
1317
|
if (!TryCast::Operation<date_t, timestamp_t>(input, result, strict)) {
|
1269
1318
|
return false;
|
1270
1319
|
}
|
1320
|
+
if (!Timestamp::IsFinite(result)) {
|
1321
|
+
return true;
|
1322
|
+
}
|
1271
1323
|
result.value /= Interval::MICROS_PER_MSEC;
|
1272
1324
|
return true;
|
1273
1325
|
}
|
@@ -1277,6 +1329,9 @@ bool TryCastToTimestampSec::Operation(date_t input, timestamp_t &result, bool st
|
|
1277
1329
|
if (!TryCast::Operation<date_t, timestamp_t>(input, result, strict)) {
|
1278
1330
|
return false;
|
1279
1331
|
}
|
1332
|
+
if (!Timestamp::IsFinite(result)) {
|
1333
|
+
return true;
|
1334
|
+
}
|
1280
1335
|
result.value /= Interval::MICROS_PER_MSEC * Interval::MSECS_PER_SEC;
|
1281
1336
|
return true;
|
1282
1337
|
}
|
@@ -1331,10 +1386,9 @@ string_t CastFromPointer::Operation(uintptr_t input, Vector &vector) {
|
|
1331
1386
|
// Cast To Blob
|
1332
1387
|
//===--------------------------------------------------------------------===//
|
1333
1388
|
template <>
|
1334
|
-
bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector,
|
1335
|
-
bool strict) {
|
1389
|
+
bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_vector, CastParameters ¶meters) {
|
1336
1390
|
idx_t result_size;
|
1337
|
-
if (!Blob::TryGetBlobSize(input, result_size,
|
1391
|
+
if (!Blob::TryGetBlobSize(input, result_size, parameters)) {
|
1338
1392
|
return false;
|
1339
1393
|
}
|
1340
1394
|
|
@@ -1348,10 +1402,9 @@ bool TryCastToBlob::Operation(string_t input, string_t &result, Vector &result_v
|
|
1348
1402
|
// Cast To Bit
|
1349
1403
|
//===--------------------------------------------------------------------===//
|
1350
1404
|
template <>
|
1351
|
-
bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_vector,
|
1352
|
-
bool strict) {
|
1405
|
+
bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_vector, CastParameters ¶meters) {
|
1353
1406
|
idx_t result_size;
|
1354
|
-
if (!Bit::TryGetBitStringSize(input, result_size, error_message)) {
|
1407
|
+
if (!Bit::TryGetBitStringSize(input, result_size, parameters.error_message)) {
|
1355
1408
|
return false;
|
1356
1409
|
}
|
1357
1410
|
|
@@ -1362,32 +1415,34 @@ bool TryCastToBit::Operation(string_t input, string_t &result, Vector &result_ve
|
|
1362
1415
|
}
|
1363
1416
|
|
1364
1417
|
template <>
|
1365
|
-
bool CastFromBitToNumeric::Operation(string_t input, bool &result,
|
1418
|
+
bool CastFromBitToNumeric::Operation(string_t input, bool &result, CastParameters ¶meters) {
|
1366
1419
|
D_ASSERT(input.GetSize() > 1);
|
1367
1420
|
|
1368
1421
|
uint8_t value;
|
1369
|
-
bool success = CastFromBitToNumeric::Operation(input, value,
|
1422
|
+
bool success = CastFromBitToNumeric::Operation(input, value, parameters);
|
1370
1423
|
result = (value > 0);
|
1371
1424
|
return (success);
|
1372
1425
|
}
|
1373
1426
|
|
1374
1427
|
template <>
|
1375
|
-
bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result,
|
1428
|
+
bool CastFromBitToNumeric::Operation(string_t input, hugeint_t &result, CastParameters ¶meters) {
|
1376
1429
|
D_ASSERT(input.GetSize() > 1);
|
1377
1430
|
|
1378
1431
|
if (input.GetSize() - 1 > sizeof(hugeint_t)) {
|
1379
|
-
throw ConversionException("Bitstring doesn't fit inside of %s",
|
1432
|
+
throw ConversionException(parameters.query_location, "Bitstring doesn't fit inside of %s",
|
1433
|
+
GetTypeId<hugeint_t>());
|
1380
1434
|
}
|
1381
1435
|
Bit::BitToNumeric(input, result);
|
1382
1436
|
return (true);
|
1383
1437
|
}
|
1384
1438
|
|
1385
1439
|
template <>
|
1386
|
-
bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result,
|
1440
|
+
bool CastFromBitToNumeric::Operation(string_t input, uhugeint_t &result, CastParameters ¶meters) {
|
1387
1441
|
D_ASSERT(input.GetSize() > 1);
|
1388
1442
|
|
1389
1443
|
if (input.GetSize() - 1 > sizeof(uhugeint_t)) {
|
1390
|
-
throw ConversionException("Bitstring doesn't fit inside of %s",
|
1444
|
+
throw ConversionException(parameters.query_location, "Bitstring doesn't fit inside of %s",
|
1445
|
+
GetTypeId<uhugeint_t>());
|
1391
1446
|
}
|
1392
1447
|
Bit::BitToNumeric(input, result);
|
1393
1448
|
return (true);
|
@@ -1408,8 +1463,7 @@ string_t CastFromUUID::Operation(hugeint_t input, Vector &vector) {
|
|
1408
1463
|
// Cast To UUID
|
1409
1464
|
//===--------------------------------------------------------------------===//
|
1410
1465
|
template <>
|
1411
|
-
bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_vector,
|
1412
|
-
bool strict) {
|
1466
|
+
bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_vector, CastParameters ¶meters) {
|
1413
1467
|
return UUID::FromString(input.GetString(), result);
|
1414
1468
|
}
|
1415
1469
|
|
@@ -1417,9 +1471,9 @@ bool TryCastToUUID::Operation(string_t input, hugeint_t &result, Vector &result_
|
|
1417
1471
|
// Cast To Date
|
1418
1472
|
//===--------------------------------------------------------------------===//
|
1419
1473
|
template <>
|
1420
|
-
bool TryCastErrorMessage::Operation(string_t input, date_t &result,
|
1421
|
-
if (!TryCast::Operation<string_t, date_t>(input, result, strict)) {
|
1422
|
-
HandleCastError::AssignError(Date::ConversionError(input),
|
1474
|
+
bool TryCastErrorMessage::Operation(string_t input, date_t &result, CastParameters ¶meters) {
|
1475
|
+
if (!TryCast::Operation<string_t, date_t>(input, result, parameters.strict)) {
|
1476
|
+
HandleCastError::AssignError(Date::ConversionError(input), parameters);
|
1423
1477
|
return false;
|
1424
1478
|
}
|
1425
1479
|
return true;
|
@@ -1441,9 +1495,9 @@ date_t Cast::Operation(string_t input) {
|
|
1441
1495
|
// Cast To Time
|
1442
1496
|
//===--------------------------------------------------------------------===//
|
1443
1497
|
template <>
|
1444
|
-
bool TryCastErrorMessage::Operation(string_t input, dtime_t &result,
|
1445
|
-
if (!TryCast::Operation<string_t, dtime_t>(input, result, strict)) {
|
1446
|
-
HandleCastError::AssignError(Time::ConversionError(input),
|
1498
|
+
bool TryCastErrorMessage::Operation(string_t input, dtime_t &result, CastParameters ¶meters) {
|
1499
|
+
if (!TryCast::Operation<string_t, dtime_t>(input, result, parameters.strict)) {
|
1500
|
+
HandleCastError::AssignError(Time::ConversionError(input), parameters);
|
1447
1501
|
return false;
|
1448
1502
|
}
|
1449
1503
|
return true;
|
@@ -1464,9 +1518,9 @@ dtime_t Cast::Operation(string_t input) {
|
|
1464
1518
|
// Cast To TimeTZ
|
1465
1519
|
//===--------------------------------------------------------------------===//
|
1466
1520
|
template <>
|
1467
|
-
bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result,
|
1468
|
-
if (!TryCast::Operation<string_t, dtime_tz_t>(input, result, strict)) {
|
1469
|
-
HandleCastError::AssignError(Time::ConversionError(input),
|
1521
|
+
bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, CastParameters ¶meters) {
|
1522
|
+
if (!TryCast::Operation<string_t, dtime_tz_t>(input, result, parameters.strict)) {
|
1523
|
+
HandleCastError::AssignError(Time::ConversionError(input), parameters);
|
1470
1524
|
return false;
|
1471
1525
|
}
|
1472
1526
|
return true;
|
@@ -1475,7 +1529,8 @@ bool TryCastErrorMessage::Operation(string_t input, dtime_tz_t &result, string *
|
|
1475
1529
|
template <>
|
1476
1530
|
bool TryCast::Operation(string_t input, dtime_tz_t &result, bool strict) {
|
1477
1531
|
idx_t pos;
|
1478
|
-
|
1532
|
+
bool has_offset;
|
1533
|
+
return Time::TryConvertTimeTZ(input.GetData(), input.GetSize(), pos, result, has_offset, strict);
|
1479
1534
|
}
|
1480
1535
|
|
1481
1536
|
template <>
|
@@ -1491,15 +1546,15 @@ dtime_tz_t Cast::Operation(string_t input) {
|
|
1491
1546
|
// Cast To Timestamp
|
1492
1547
|
//===--------------------------------------------------------------------===//
|
1493
1548
|
template <>
|
1494
|
-
bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result,
|
1549
|
+
bool TryCastErrorMessage::Operation(string_t input, timestamp_t &result, CastParameters ¶meters) {
|
1495
1550
|
auto cast_result = Timestamp::TryConvertTimestamp(input.GetData(), input.GetSize(), result);
|
1496
1551
|
if (cast_result == TimestampCastResult::SUCCESS) {
|
1497
1552
|
return true;
|
1498
1553
|
}
|
1499
1554
|
if (cast_result == TimestampCastResult::ERROR_INCORRECT_FORMAT) {
|
1500
|
-
HandleCastError::AssignError(Timestamp::ConversionError(input),
|
1555
|
+
HandleCastError::AssignError(Timestamp::ConversionError(input), parameters);
|
1501
1556
|
} else {
|
1502
|
-
HandleCastError::AssignError(Timestamp::UnsupportedTimezoneError(input),
|
1557
|
+
HandleCastError::AssignError(Timestamp::UnsupportedTimezoneError(input), parameters);
|
1503
1558
|
}
|
1504
1559
|
return false;
|
1505
1560
|
}
|
@@ -1518,8 +1573,8 @@ timestamp_t Cast::Operation(string_t input) {
|
|
1518
1573
|
// Cast From Interval
|
1519
1574
|
//===--------------------------------------------------------------------===//
|
1520
1575
|
template <>
|
1521
|
-
bool TryCastErrorMessage::Operation(string_t input, interval_t &result,
|
1522
|
-
return Interval::FromCString(input.GetData(), input.GetSize(), result, error_message, strict);
|
1576
|
+
bool TryCastErrorMessage::Operation(string_t input, interval_t &result, CastParameters ¶meters) {
|
1577
|
+
return Interval::FromCString(input.GetData(), input.GetSize(), result, parameters.error_message, parameters.strict);
|
1523
1578
|
}
|
1524
1579
|
|
1525
1580
|
//===--------------------------------------------------------------------===//
|
@@ -1642,7 +1697,7 @@ struct HugeIntegerCastOperation {
|
|
1642
1697
|
remainder *= -1;
|
1643
1698
|
}
|
1644
1699
|
state.decimal = remainder;
|
1645
|
-
state.decimal_total_digits = -e;
|
1700
|
+
state.decimal_total_digits = UnsafeNumericCast<uint16_t>(-e);
|
1646
1701
|
state.decimal_intermediate = 0;
|
1647
1702
|
state.decimal_intermediate_digits = 0;
|
1648
1703
|
return Finalize<T, NEGATIVE>(state);
|
@@ -1826,7 +1881,7 @@ struct DecimalCastOperation {
|
|
1826
1881
|
// Everything beyond that amount needs to be truncated
|
1827
1882
|
if (decimal_excess > exponent) {
|
1828
1883
|
// We've allowed too many decimals
|
1829
|
-
state.excessive_decimals = decimal_excess - exponent;
|
1884
|
+
state.excessive_decimals = UnsafeNumericCast<uint8_t>(decimal_excess - exponent);
|
1830
1885
|
exponent = 0;
|
1831
1886
|
} else {
|
1832
1887
|
exponent -= decimal_excess;
|
@@ -1931,7 +1986,7 @@ struct DecimalCastOperation {
|
|
1931
1986
|
};
|
1932
1987
|
|
1933
1988
|
template <class T, char decimal_separator = '.'>
|
1934
|
-
bool TryDecimalStringCast(string_t input, T &result,
|
1989
|
+
bool TryDecimalStringCast(string_t input, T &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
1935
1990
|
DecimalCastData<T> state;
|
1936
1991
|
state.result = 0;
|
1937
1992
|
state.width = width;
|
@@ -1946,7 +2001,7 @@ bool TryDecimalStringCast(string_t input, T &result, string *error_message, uint
|
|
1946
2001
|
input.GetData(), input.GetSize(), state, false)) {
|
1947
2002
|
string error = StringUtil::Format("Could not convert string \"%s\" to DECIMAL(%d,%d)", input.GetString(),
|
1948
2003
|
(int)width, (int)scale);
|
1949
|
-
HandleCastError::AssignError(error,
|
2004
|
+
HandleCastError::AssignError(error, parameters);
|
1950
2005
|
return false;
|
1951
2006
|
}
|
1952
2007
|
result = state.result;
|
@@ -1954,48 +2009,51 @@ bool TryDecimalStringCast(string_t input, T &result, string *error_message, uint
|
|
1954
2009
|
}
|
1955
2010
|
|
1956
2011
|
template <>
|
1957
|
-
bool TryCastToDecimal::Operation(string_t input, int16_t &result,
|
1958
|
-
|
2012
|
+
bool TryCastToDecimal::Operation(string_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2013
|
+
uint8_t scale) {
|
2014
|
+
return TryDecimalStringCast<int16_t>(input, result, parameters, width, scale);
|
1959
2015
|
}
|
1960
2016
|
|
1961
2017
|
template <>
|
1962
|
-
bool TryCastToDecimal::Operation(string_t input, int32_t &result,
|
1963
|
-
|
2018
|
+
bool TryCastToDecimal::Operation(string_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2019
|
+
uint8_t scale) {
|
2020
|
+
return TryDecimalStringCast<int32_t>(input, result, parameters, width, scale);
|
1964
2021
|
}
|
1965
2022
|
|
1966
2023
|
template <>
|
1967
|
-
bool TryCastToDecimal::Operation(string_t input, int64_t &result,
|
1968
|
-
|
2024
|
+
bool TryCastToDecimal::Operation(string_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2025
|
+
uint8_t scale) {
|
2026
|
+
return TryDecimalStringCast<int64_t>(input, result, parameters, width, scale);
|
1969
2027
|
}
|
1970
2028
|
|
1971
2029
|
template <>
|
1972
|
-
bool TryCastToDecimal::Operation(string_t input, hugeint_t &result,
|
2030
|
+
bool TryCastToDecimal::Operation(string_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
1973
2031
|
uint8_t scale) {
|
1974
|
-
return TryDecimalStringCast<hugeint_t>(input, result,
|
2032
|
+
return TryDecimalStringCast<hugeint_t>(input, result, parameters, width, scale);
|
1975
2033
|
}
|
1976
2034
|
|
1977
2035
|
template <>
|
1978
|
-
bool TryCastToDecimalCommaSeparated::Operation(string_t input, int16_t &result,
|
1979
|
-
uint8_t scale) {
|
1980
|
-
return TryDecimalStringCast<int16_t, ','>(input, result,
|
2036
|
+
bool TryCastToDecimalCommaSeparated::Operation(string_t input, int16_t &result, CastParameters ¶meters,
|
2037
|
+
uint8_t width, uint8_t scale) {
|
2038
|
+
return TryDecimalStringCast<int16_t, ','>(input, result, parameters, width, scale);
|
1981
2039
|
}
|
1982
2040
|
|
1983
2041
|
template <>
|
1984
|
-
bool TryCastToDecimalCommaSeparated::Operation(string_t input, int32_t &result,
|
1985
|
-
uint8_t scale) {
|
1986
|
-
return TryDecimalStringCast<int32_t, ','>(input, result,
|
2042
|
+
bool TryCastToDecimalCommaSeparated::Operation(string_t input, int32_t &result, CastParameters ¶meters,
|
2043
|
+
uint8_t width, uint8_t scale) {
|
2044
|
+
return TryDecimalStringCast<int32_t, ','>(input, result, parameters, width, scale);
|
1987
2045
|
}
|
1988
2046
|
|
1989
2047
|
template <>
|
1990
|
-
bool TryCastToDecimalCommaSeparated::Operation(string_t input, int64_t &result,
|
1991
|
-
uint8_t scale) {
|
1992
|
-
return TryDecimalStringCast<int64_t, ','>(input, result,
|
2048
|
+
bool TryCastToDecimalCommaSeparated::Operation(string_t input, int64_t &result, CastParameters ¶meters,
|
2049
|
+
uint8_t width, uint8_t scale) {
|
2050
|
+
return TryDecimalStringCast<int64_t, ','>(input, result, parameters, width, scale);
|
1993
2051
|
}
|
1994
2052
|
|
1995
2053
|
template <>
|
1996
|
-
bool TryCastToDecimalCommaSeparated::Operation(string_t input, hugeint_t &result,
|
1997
|
-
uint8_t scale) {
|
1998
|
-
return TryDecimalStringCast<hugeint_t, ','>(input, result,
|
2054
|
+
bool TryCastToDecimalCommaSeparated::Operation(string_t input, hugeint_t &result, CastParameters ¶meters,
|
2055
|
+
uint8_t width, uint8_t scale) {
|
2056
|
+
return TryDecimalStringCast<hugeint_t, ','>(input, result, parameters, width, scale);
|
1999
2057
|
}
|
2000
2058
|
|
2001
2059
|
template <>
|
@@ -2024,9 +2082,9 @@ string_t StringCastFromDecimal::Operation(hugeint_t input, uint8_t width, uint8_
|
|
2024
2082
|
// Decimal <-> Bool
|
2025
2083
|
//===--------------------------------------------------------------------===//
|
2026
2084
|
template <class T, class OP = NumericHelper>
|
2027
|
-
bool TryCastBoolToDecimal(bool input, T &result,
|
2085
|
+
bool TryCastBoolToDecimal(bool input, T &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
2028
2086
|
if (width > scale) {
|
2029
|
-
result = input ? OP::POWERS_OF_TEN[scale] : 0;
|
2087
|
+
result = UnsafeNumericCast<T>(input ? OP::POWERS_OF_TEN[scale] : 0);
|
2030
2088
|
return true;
|
2031
2089
|
} else {
|
2032
2090
|
return TryCast::Operation<bool, T>(input, result);
|
@@ -2034,42 +2092,50 @@ bool TryCastBoolToDecimal(bool input, T &result, string *error_message, uint8_t
|
|
2034
2092
|
}
|
2035
2093
|
|
2036
2094
|
template <>
|
2037
|
-
bool TryCastToDecimal::Operation(bool input, int16_t &result,
|
2038
|
-
|
2095
|
+
bool TryCastToDecimal::Operation(bool input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2096
|
+
uint8_t scale) {
|
2097
|
+
return TryCastBoolToDecimal<int16_t>(input, result, parameters, width, scale);
|
2039
2098
|
}
|
2040
2099
|
|
2041
2100
|
template <>
|
2042
|
-
bool TryCastToDecimal::Operation(bool input, int32_t &result,
|
2043
|
-
|
2101
|
+
bool TryCastToDecimal::Operation(bool input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2102
|
+
uint8_t scale) {
|
2103
|
+
return TryCastBoolToDecimal<int32_t>(input, result, parameters, width, scale);
|
2044
2104
|
}
|
2045
2105
|
|
2046
2106
|
template <>
|
2047
|
-
bool TryCastToDecimal::Operation(bool input, int64_t &result,
|
2048
|
-
|
2107
|
+
bool TryCastToDecimal::Operation(bool input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2108
|
+
uint8_t scale) {
|
2109
|
+
return TryCastBoolToDecimal<int64_t>(input, result, parameters, width, scale);
|
2049
2110
|
}
|
2050
2111
|
|
2051
2112
|
template <>
|
2052
|
-
bool TryCastToDecimal::Operation(bool input, hugeint_t &result,
|
2053
|
-
|
2113
|
+
bool TryCastToDecimal::Operation(bool input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2114
|
+
uint8_t scale) {
|
2115
|
+
return TryCastBoolToDecimal<hugeint_t, Hugeint>(input, result, parameters, width, scale);
|
2054
2116
|
}
|
2055
2117
|
|
2056
2118
|
template <>
|
2057
|
-
bool TryCastFromDecimal::Operation(int16_t input, bool &result,
|
2119
|
+
bool TryCastFromDecimal::Operation(int16_t input, bool &result, CastParameters ¶meters, uint8_t width,
|
2120
|
+
uint8_t scale) {
|
2058
2121
|
return TryCast::Operation<int16_t, bool>(input, result);
|
2059
2122
|
}
|
2060
2123
|
|
2061
2124
|
template <>
|
2062
|
-
bool TryCastFromDecimal::Operation(int32_t input, bool &result,
|
2125
|
+
bool TryCastFromDecimal::Operation(int32_t input, bool &result, CastParameters ¶meters, uint8_t width,
|
2126
|
+
uint8_t scale) {
|
2063
2127
|
return TryCast::Operation<int32_t, bool>(input, result);
|
2064
2128
|
}
|
2065
2129
|
|
2066
2130
|
template <>
|
2067
|
-
bool TryCastFromDecimal::Operation(int64_t input, bool &result,
|
2131
|
+
bool TryCastFromDecimal::Operation(int64_t input, bool &result, CastParameters ¶meters, uint8_t width,
|
2132
|
+
uint8_t scale) {
|
2068
2133
|
return TryCast::Operation<int64_t, bool>(input, result);
|
2069
2134
|
}
|
2070
2135
|
|
2071
2136
|
template <>
|
2072
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, bool &result,
|
2137
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, bool &result, CastParameters ¶meters, uint8_t width,
|
2138
|
+
uint8_t scale) {
|
2073
2139
|
return TryCast::Operation<hugeint_t, bool>(input, result);
|
2074
2140
|
}
|
2075
2141
|
|
@@ -2091,26 +2157,26 @@ struct UnsignedToDecimalOperator {
|
|
2091
2157
|
};
|
2092
2158
|
|
2093
2159
|
template <class SRC, class DST, class OP = SignedToDecimalOperator>
|
2094
|
-
bool StandardNumericToDecimalCast(SRC input, DST &result,
|
2160
|
+
bool StandardNumericToDecimalCast(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
2095
2161
|
// check for overflow
|
2096
|
-
DST max_width = NumericHelper::POWERS_OF_TEN[width - scale];
|
2162
|
+
DST max_width = UnsafeNumericCast<DST>(NumericHelper::POWERS_OF_TEN[width - scale]);
|
2097
2163
|
if (OP::template Operation<SRC, DST>(input, max_width)) {
|
2098
2164
|
string error = StringUtil::Format("Could not cast value %d to DECIMAL(%d,%d)", input, width, scale);
|
2099
|
-
HandleCastError::AssignError(error,
|
2165
|
+
HandleCastError::AssignError(error, parameters);
|
2100
2166
|
return false;
|
2101
2167
|
}
|
2102
|
-
result = DST(input) * NumericHelper::POWERS_OF_TEN[scale];
|
2168
|
+
result = UnsafeNumericCast<DST>(DST(input) * NumericHelper::POWERS_OF_TEN[scale]);
|
2103
2169
|
return true;
|
2104
2170
|
}
|
2105
2171
|
|
2106
2172
|
template <class SRC>
|
2107
|
-
bool NumericToHugeDecimalCast(SRC input, hugeint_t &result,
|
2173
|
+
bool NumericToHugeDecimalCast(SRC input, hugeint_t &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
2108
2174
|
// check for overflow
|
2109
2175
|
hugeint_t max_width = Hugeint::POWERS_OF_TEN[width - scale];
|
2110
2176
|
hugeint_t hinput = Hugeint::Convert(input);
|
2111
2177
|
if (hinput >= max_width || hinput <= -max_width) {
|
2112
2178
|
string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", hinput.ToString(), width, scale);
|
2113
|
-
HandleCastError::AssignError(error,
|
2179
|
+
HandleCastError::AssignError(error, parameters);
|
2114
2180
|
return false;
|
2115
2181
|
}
|
2116
2182
|
result = hinput * Hugeint::POWERS_OF_TEN[scale];
|
@@ -2121,191 +2187,216 @@ bool NumericToHugeDecimalCast(SRC input, hugeint_t &result, string *error_messag
|
|
2121
2187
|
// Cast int8_t -> Decimal
|
2122
2188
|
//===--------------------------------------------------------------------===//
|
2123
2189
|
template <>
|
2124
|
-
bool TryCastToDecimal::Operation(int8_t input, int16_t &result,
|
2125
|
-
|
2190
|
+
bool TryCastToDecimal::Operation(int8_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2191
|
+
uint8_t scale) {
|
2192
|
+
return StandardNumericToDecimalCast<int8_t, int16_t>(input, result, parameters, width, scale);
|
2126
2193
|
}
|
2127
2194
|
template <>
|
2128
|
-
bool TryCastToDecimal::Operation(int8_t input, int32_t &result,
|
2129
|
-
|
2195
|
+
bool TryCastToDecimal::Operation(int8_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2196
|
+
uint8_t scale) {
|
2197
|
+
return StandardNumericToDecimalCast<int8_t, int32_t>(input, result, parameters, width, scale);
|
2130
2198
|
}
|
2131
2199
|
template <>
|
2132
|
-
bool TryCastToDecimal::Operation(int8_t input, int64_t &result,
|
2133
|
-
|
2200
|
+
bool TryCastToDecimal::Operation(int8_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2201
|
+
uint8_t scale) {
|
2202
|
+
return StandardNumericToDecimalCast<int8_t, int64_t>(input, result, parameters, width, scale);
|
2134
2203
|
}
|
2135
2204
|
template <>
|
2136
|
-
bool TryCastToDecimal::Operation(int8_t input, hugeint_t &result,
|
2137
|
-
|
2205
|
+
bool TryCastToDecimal::Operation(int8_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2206
|
+
uint8_t scale) {
|
2207
|
+
return NumericToHugeDecimalCast<int8_t>(input, result, parameters, width, scale);
|
2138
2208
|
}
|
2139
2209
|
|
2140
2210
|
//===--------------------------------------------------------------------===//
|
2141
2211
|
// Cast int16_t -> Decimal
|
2142
2212
|
//===--------------------------------------------------------------------===//
|
2143
2213
|
template <>
|
2144
|
-
bool TryCastToDecimal::Operation(int16_t input, int16_t &result,
|
2145
|
-
|
2214
|
+
bool TryCastToDecimal::Operation(int16_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2215
|
+
uint8_t scale) {
|
2216
|
+
return StandardNumericToDecimalCast<int16_t, int16_t>(input, result, parameters, width, scale);
|
2146
2217
|
}
|
2147
2218
|
template <>
|
2148
|
-
bool TryCastToDecimal::Operation(int16_t input, int32_t &result,
|
2149
|
-
|
2219
|
+
bool TryCastToDecimal::Operation(int16_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2220
|
+
uint8_t scale) {
|
2221
|
+
return StandardNumericToDecimalCast<int16_t, int32_t>(input, result, parameters, width, scale);
|
2150
2222
|
}
|
2151
2223
|
template <>
|
2152
|
-
bool TryCastToDecimal::Operation(int16_t input, int64_t &result,
|
2153
|
-
|
2224
|
+
bool TryCastToDecimal::Operation(int16_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2225
|
+
uint8_t scale) {
|
2226
|
+
return StandardNumericToDecimalCast<int16_t, int64_t>(input, result, parameters, width, scale);
|
2154
2227
|
}
|
2155
2228
|
template <>
|
2156
|
-
bool TryCastToDecimal::Operation(int16_t input, hugeint_t &result,
|
2229
|
+
bool TryCastToDecimal::Operation(int16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2157
2230
|
uint8_t scale) {
|
2158
|
-
return NumericToHugeDecimalCast<int16_t>(input, result,
|
2231
|
+
return NumericToHugeDecimalCast<int16_t>(input, result, parameters, width, scale);
|
2159
2232
|
}
|
2160
2233
|
|
2161
2234
|
//===--------------------------------------------------------------------===//
|
2162
2235
|
// Cast int32_t -> Decimal
|
2163
2236
|
//===--------------------------------------------------------------------===//
|
2164
2237
|
template <>
|
2165
|
-
bool TryCastToDecimal::Operation(int32_t input, int16_t &result,
|
2166
|
-
|
2238
|
+
bool TryCastToDecimal::Operation(int32_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2239
|
+
uint8_t scale) {
|
2240
|
+
return StandardNumericToDecimalCast<int32_t, int16_t>(input, result, parameters, width, scale);
|
2167
2241
|
}
|
2168
2242
|
template <>
|
2169
|
-
bool TryCastToDecimal::Operation(int32_t input, int32_t &result,
|
2170
|
-
|
2243
|
+
bool TryCastToDecimal::Operation(int32_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2244
|
+
uint8_t scale) {
|
2245
|
+
return StandardNumericToDecimalCast<int32_t, int32_t>(input, result, parameters, width, scale);
|
2171
2246
|
}
|
2172
2247
|
template <>
|
2173
|
-
bool TryCastToDecimal::Operation(int32_t input, int64_t &result,
|
2174
|
-
|
2248
|
+
bool TryCastToDecimal::Operation(int32_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2249
|
+
uint8_t scale) {
|
2250
|
+
return StandardNumericToDecimalCast<int32_t, int64_t>(input, result, parameters, width, scale);
|
2175
2251
|
}
|
2176
2252
|
template <>
|
2177
|
-
bool TryCastToDecimal::Operation(int32_t input, hugeint_t &result,
|
2253
|
+
bool TryCastToDecimal::Operation(int32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2178
2254
|
uint8_t scale) {
|
2179
|
-
return NumericToHugeDecimalCast<int32_t>(input, result,
|
2255
|
+
return NumericToHugeDecimalCast<int32_t>(input, result, parameters, width, scale);
|
2180
2256
|
}
|
2181
2257
|
|
2182
2258
|
//===--------------------------------------------------------------------===//
|
2183
2259
|
// Cast int64_t -> Decimal
|
2184
2260
|
//===--------------------------------------------------------------------===//
|
2185
2261
|
template <>
|
2186
|
-
bool TryCastToDecimal::Operation(int64_t input, int16_t &result,
|
2187
|
-
|
2262
|
+
bool TryCastToDecimal::Operation(int64_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2263
|
+
uint8_t scale) {
|
2264
|
+
return StandardNumericToDecimalCast<int64_t, int16_t>(input, result, parameters, width, scale);
|
2188
2265
|
}
|
2189
2266
|
template <>
|
2190
|
-
bool TryCastToDecimal::Operation(int64_t input, int32_t &result,
|
2191
|
-
|
2267
|
+
bool TryCastToDecimal::Operation(int64_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2268
|
+
uint8_t scale) {
|
2269
|
+
return StandardNumericToDecimalCast<int64_t, int32_t>(input, result, parameters, width, scale);
|
2192
2270
|
}
|
2193
2271
|
template <>
|
2194
|
-
bool TryCastToDecimal::Operation(int64_t input, int64_t &result,
|
2195
|
-
|
2272
|
+
bool TryCastToDecimal::Operation(int64_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2273
|
+
uint8_t scale) {
|
2274
|
+
return StandardNumericToDecimalCast<int64_t, int64_t>(input, result, parameters, width, scale);
|
2196
2275
|
}
|
2197
2276
|
template <>
|
2198
|
-
bool TryCastToDecimal::Operation(int64_t input, hugeint_t &result,
|
2277
|
+
bool TryCastToDecimal::Operation(int64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2199
2278
|
uint8_t scale) {
|
2200
|
-
return NumericToHugeDecimalCast<int64_t>(input, result,
|
2279
|
+
return NumericToHugeDecimalCast<int64_t>(input, result, parameters, width, scale);
|
2201
2280
|
}
|
2202
2281
|
|
2203
2282
|
//===--------------------------------------------------------------------===//
|
2204
2283
|
// Cast uint8_t -> Decimal
|
2205
2284
|
//===--------------------------------------------------------------------===//
|
2206
2285
|
template <>
|
2207
|
-
bool TryCastToDecimal::Operation(uint8_t input, int16_t &result,
|
2208
|
-
|
2209
|
-
|
2286
|
+
bool TryCastToDecimal::Operation(uint8_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2287
|
+
uint8_t scale) {
|
2288
|
+
return StandardNumericToDecimalCast<uint8_t, int16_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2289
|
+
scale);
|
2210
2290
|
}
|
2211
2291
|
template <>
|
2212
|
-
bool TryCastToDecimal::Operation(uint8_t input, int32_t &result,
|
2213
|
-
|
2214
|
-
|
2292
|
+
bool TryCastToDecimal::Operation(uint8_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2293
|
+
uint8_t scale) {
|
2294
|
+
return StandardNumericToDecimalCast<uint8_t, int32_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2295
|
+
scale);
|
2215
2296
|
}
|
2216
2297
|
template <>
|
2217
|
-
bool TryCastToDecimal::Operation(uint8_t input, int64_t &result,
|
2218
|
-
|
2219
|
-
|
2298
|
+
bool TryCastToDecimal::Operation(uint8_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2299
|
+
uint8_t scale) {
|
2300
|
+
return StandardNumericToDecimalCast<uint8_t, int64_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2301
|
+
scale);
|
2220
2302
|
}
|
2221
2303
|
template <>
|
2222
|
-
bool TryCastToDecimal::Operation(uint8_t input, hugeint_t &result,
|
2304
|
+
bool TryCastToDecimal::Operation(uint8_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2223
2305
|
uint8_t scale) {
|
2224
|
-
return NumericToHugeDecimalCast<uint8_t>(input, result,
|
2306
|
+
return NumericToHugeDecimalCast<uint8_t>(input, result, parameters, width, scale);
|
2225
2307
|
}
|
2226
2308
|
|
2227
2309
|
//===--------------------------------------------------------------------===//
|
2228
2310
|
// Cast uint16_t -> Decimal
|
2229
2311
|
//===--------------------------------------------------------------------===//
|
2230
2312
|
template <>
|
2231
|
-
bool TryCastToDecimal::Operation(uint16_t input, int16_t &result,
|
2232
|
-
|
2233
|
-
|
2313
|
+
bool TryCastToDecimal::Operation(uint16_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2314
|
+
uint8_t scale) {
|
2315
|
+
return StandardNumericToDecimalCast<uint16_t, int16_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2316
|
+
scale);
|
2234
2317
|
}
|
2235
2318
|
template <>
|
2236
|
-
bool TryCastToDecimal::Operation(uint16_t input, int32_t &result,
|
2237
|
-
|
2238
|
-
|
2319
|
+
bool TryCastToDecimal::Operation(uint16_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2320
|
+
uint8_t scale) {
|
2321
|
+
return StandardNumericToDecimalCast<uint16_t, int32_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2322
|
+
scale);
|
2239
2323
|
}
|
2240
2324
|
template <>
|
2241
|
-
bool TryCastToDecimal::Operation(uint16_t input, int64_t &result,
|
2242
|
-
|
2243
|
-
|
2325
|
+
bool TryCastToDecimal::Operation(uint16_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2326
|
+
uint8_t scale) {
|
2327
|
+
return StandardNumericToDecimalCast<uint16_t, int64_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2328
|
+
scale);
|
2244
2329
|
}
|
2245
2330
|
template <>
|
2246
|
-
bool TryCastToDecimal::Operation(uint16_t input, hugeint_t &result,
|
2331
|
+
bool TryCastToDecimal::Operation(uint16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2247
2332
|
uint8_t scale) {
|
2248
|
-
return NumericToHugeDecimalCast<uint16_t>(input, result,
|
2333
|
+
return NumericToHugeDecimalCast<uint16_t>(input, result, parameters, width, scale);
|
2249
2334
|
}
|
2250
2335
|
|
2251
2336
|
//===--------------------------------------------------------------------===//
|
2252
2337
|
// Cast uint32_t -> Decimal
|
2253
2338
|
//===--------------------------------------------------------------------===//
|
2254
2339
|
template <>
|
2255
|
-
bool TryCastToDecimal::Operation(uint32_t input, int16_t &result,
|
2256
|
-
|
2257
|
-
|
2340
|
+
bool TryCastToDecimal::Operation(uint32_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2341
|
+
uint8_t scale) {
|
2342
|
+
return StandardNumericToDecimalCast<uint32_t, int16_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2343
|
+
scale);
|
2258
2344
|
}
|
2259
2345
|
template <>
|
2260
|
-
bool TryCastToDecimal::Operation(uint32_t input, int32_t &result,
|
2261
|
-
|
2262
|
-
|
2346
|
+
bool TryCastToDecimal::Operation(uint32_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2347
|
+
uint8_t scale) {
|
2348
|
+
return StandardNumericToDecimalCast<uint32_t, int32_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2349
|
+
scale);
|
2263
2350
|
}
|
2264
2351
|
template <>
|
2265
|
-
bool TryCastToDecimal::Operation(uint32_t input, int64_t &result,
|
2266
|
-
|
2267
|
-
|
2352
|
+
bool TryCastToDecimal::Operation(uint32_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2353
|
+
uint8_t scale) {
|
2354
|
+
return StandardNumericToDecimalCast<uint32_t, int64_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2355
|
+
scale);
|
2268
2356
|
}
|
2269
2357
|
template <>
|
2270
|
-
bool TryCastToDecimal::Operation(uint32_t input, hugeint_t &result,
|
2358
|
+
bool TryCastToDecimal::Operation(uint32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2271
2359
|
uint8_t scale) {
|
2272
|
-
return NumericToHugeDecimalCast<uint32_t>(input, result,
|
2360
|
+
return NumericToHugeDecimalCast<uint32_t>(input, result, parameters, width, scale);
|
2273
2361
|
}
|
2274
2362
|
|
2275
2363
|
//===--------------------------------------------------------------------===//
|
2276
2364
|
// Cast uint64_t -> Decimal
|
2277
2365
|
//===--------------------------------------------------------------------===//
|
2278
2366
|
template <>
|
2279
|
-
bool TryCastToDecimal::Operation(uint64_t input, int16_t &result,
|
2280
|
-
|
2281
|
-
|
2367
|
+
bool TryCastToDecimal::Operation(uint64_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2368
|
+
uint8_t scale) {
|
2369
|
+
return StandardNumericToDecimalCast<uint64_t, int16_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2370
|
+
scale);
|
2282
2371
|
}
|
2283
2372
|
template <>
|
2284
|
-
bool TryCastToDecimal::Operation(uint64_t input, int32_t &result,
|
2285
|
-
|
2286
|
-
|
2373
|
+
bool TryCastToDecimal::Operation(uint64_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2374
|
+
uint8_t scale) {
|
2375
|
+
return StandardNumericToDecimalCast<uint64_t, int32_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2376
|
+
scale);
|
2287
2377
|
}
|
2288
2378
|
template <>
|
2289
|
-
bool TryCastToDecimal::Operation(uint64_t input, int64_t &result,
|
2290
|
-
|
2291
|
-
|
2379
|
+
bool TryCastToDecimal::Operation(uint64_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2380
|
+
uint8_t scale) {
|
2381
|
+
return StandardNumericToDecimalCast<uint64_t, int64_t, UnsignedToDecimalOperator>(input, result, parameters, width,
|
2382
|
+
scale);
|
2292
2383
|
}
|
2293
2384
|
template <>
|
2294
|
-
bool TryCastToDecimal::Operation(uint64_t input, hugeint_t &result,
|
2385
|
+
bool TryCastToDecimal::Operation(uint64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2295
2386
|
uint8_t scale) {
|
2296
|
-
return NumericToHugeDecimalCast<uint64_t>(input, result,
|
2387
|
+
return NumericToHugeDecimalCast<uint64_t>(input, result, parameters, width, scale);
|
2297
2388
|
}
|
2298
2389
|
|
2299
2390
|
//===--------------------------------------------------------------------===//
|
2300
2391
|
// Hugeint -> Decimal Cast
|
2301
2392
|
//===--------------------------------------------------------------------===//
|
2302
2393
|
template <class DST>
|
2303
|
-
bool HugeintToDecimalCast(hugeint_t input, DST &result,
|
2394
|
+
bool HugeintToDecimalCast(hugeint_t input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
2304
2395
|
// check for overflow
|
2305
2396
|
hugeint_t max_width = Hugeint::POWERS_OF_TEN[width - scale];
|
2306
2397
|
if (input >= max_width || input <= -max_width) {
|
2307
2398
|
string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", input.ToString(), width, scale);
|
2308
|
-
HandleCastError::AssignError(error,
|
2399
|
+
HandleCastError::AssignError(error, parameters);
|
2309
2400
|
return false;
|
2310
2401
|
}
|
2311
2402
|
result = Hugeint::Cast<DST>(input * Hugeint::POWERS_OF_TEN[scale]);
|
@@ -2313,39 +2404,39 @@ bool HugeintToDecimalCast(hugeint_t input, DST &result, string *error_message, u
|
|
2313
2404
|
}
|
2314
2405
|
|
2315
2406
|
template <>
|
2316
|
-
bool TryCastToDecimal::Operation(hugeint_t input, int16_t &result,
|
2407
|
+
bool TryCastToDecimal::Operation(hugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2317
2408
|
uint8_t scale) {
|
2318
|
-
return HugeintToDecimalCast<int16_t>(input, result,
|
2409
|
+
return HugeintToDecimalCast<int16_t>(input, result, parameters, width, scale);
|
2319
2410
|
}
|
2320
2411
|
|
2321
2412
|
template <>
|
2322
|
-
bool TryCastToDecimal::Operation(hugeint_t input, int32_t &result,
|
2413
|
+
bool TryCastToDecimal::Operation(hugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2323
2414
|
uint8_t scale) {
|
2324
|
-
return HugeintToDecimalCast<int32_t>(input, result,
|
2415
|
+
return HugeintToDecimalCast<int32_t>(input, result, parameters, width, scale);
|
2325
2416
|
}
|
2326
2417
|
|
2327
2418
|
template <>
|
2328
|
-
bool TryCastToDecimal::Operation(hugeint_t input, int64_t &result,
|
2419
|
+
bool TryCastToDecimal::Operation(hugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2329
2420
|
uint8_t scale) {
|
2330
|
-
return HugeintToDecimalCast<int64_t>(input, result,
|
2421
|
+
return HugeintToDecimalCast<int64_t>(input, result, parameters, width, scale);
|
2331
2422
|
}
|
2332
2423
|
|
2333
2424
|
template <>
|
2334
|
-
bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result,
|
2425
|
+
bool TryCastToDecimal::Operation(hugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2335
2426
|
uint8_t scale) {
|
2336
|
-
return HugeintToDecimalCast<hugeint_t>(input, result,
|
2427
|
+
return HugeintToDecimalCast<hugeint_t>(input, result, parameters, width, scale);
|
2337
2428
|
}
|
2338
2429
|
|
2339
2430
|
//===--------------------------------------------------------------------===//
|
2340
2431
|
// Uhugeint -> Decimal Cast
|
2341
2432
|
//===--------------------------------------------------------------------===//
|
2342
2433
|
template <class DST>
|
2343
|
-
bool UhugeintToDecimalCast(uhugeint_t input, DST &result,
|
2434
|
+
bool UhugeintToDecimalCast(uhugeint_t input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
2344
2435
|
// check for overflow
|
2345
2436
|
uhugeint_t max_width = Uhugeint::POWERS_OF_TEN[width - scale];
|
2346
2437
|
if (input >= max_width) {
|
2347
2438
|
string error = StringUtil::Format("Could not cast value %s to DECIMAL(%d,%d)", input.ToString(), width, scale);
|
2348
|
-
HandleCastError::AssignError(error,
|
2439
|
+
HandleCastError::AssignError(error, parameters);
|
2349
2440
|
return false;
|
2350
2441
|
}
|
2351
2442
|
result = Uhugeint::Cast<DST>(input * Uhugeint::POWERS_OF_TEN[scale]);
|
@@ -2353,41 +2444,41 @@ bool UhugeintToDecimalCast(uhugeint_t input, DST &result, string *error_message,
|
|
2353
2444
|
}
|
2354
2445
|
|
2355
2446
|
template <>
|
2356
|
-
bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result,
|
2447
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2357
2448
|
uint8_t scale) {
|
2358
|
-
return UhugeintToDecimalCast<int16_t>(input, result,
|
2449
|
+
return UhugeintToDecimalCast<int16_t>(input, result, parameters, width, scale);
|
2359
2450
|
}
|
2360
2451
|
|
2361
2452
|
template <>
|
2362
|
-
bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result,
|
2453
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2363
2454
|
uint8_t scale) {
|
2364
|
-
return UhugeintToDecimalCast<int32_t>(input, result,
|
2455
|
+
return UhugeintToDecimalCast<int32_t>(input, result, parameters, width, scale);
|
2365
2456
|
}
|
2366
2457
|
|
2367
2458
|
template <>
|
2368
|
-
bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result,
|
2459
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2369
2460
|
uint8_t scale) {
|
2370
|
-
return UhugeintToDecimalCast<int64_t>(input, result,
|
2461
|
+
return UhugeintToDecimalCast<int64_t>(input, result, parameters, width, scale);
|
2371
2462
|
}
|
2372
2463
|
|
2373
2464
|
template <>
|
2374
|
-
bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result,
|
2465
|
+
bool TryCastToDecimal::Operation(uhugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2375
2466
|
uint8_t scale) {
|
2376
|
-
return UhugeintToDecimalCast<hugeint_t>(input, result,
|
2467
|
+
return UhugeintToDecimalCast<hugeint_t>(input, result, parameters, width, scale);
|
2377
2468
|
}
|
2378
2469
|
|
2379
2470
|
//===--------------------------------------------------------------------===//
|
2380
2471
|
// Float/Double -> Decimal Cast
|
2381
2472
|
//===--------------------------------------------------------------------===//
|
2382
2473
|
template <class SRC, class DST>
|
2383
|
-
bool DoubleToDecimalCast(SRC input, DST &result,
|
2474
|
+
bool DoubleToDecimalCast(SRC input, DST &result, CastParameters ¶meters, uint8_t width, uint8_t scale) {
|
2384
2475
|
double value = input * NumericHelper::DOUBLE_POWERS_OF_TEN[scale];
|
2385
2476
|
// Add the sign (-1, 0, 1) times a tiny value to fix floating point issues (issue 3091)
|
2386
2477
|
double sign = (double(0) < value) - (value < double(0));
|
2387
2478
|
value += 1e-9 * sign;
|
2388
2479
|
if (value <= -NumericHelper::DOUBLE_POWERS_OF_TEN[width] || value >= NumericHelper::DOUBLE_POWERS_OF_TEN[width]) {
|
2389
2480
|
string error = StringUtil::Format("Could not cast value %f to DECIMAL(%d,%d)", value, width, scale);
|
2390
|
-
HandleCastError::AssignError(error,
|
2481
|
+
HandleCastError::AssignError(error, parameters);
|
2391
2482
|
return false;
|
2392
2483
|
}
|
2393
2484
|
result = Cast::Operation<SRC, DST>(value);
|
@@ -2395,73 +2486,81 @@ bool DoubleToDecimalCast(SRC input, DST &result, string *error_message, uint8_t
|
|
2395
2486
|
}
|
2396
2487
|
|
2397
2488
|
template <>
|
2398
|
-
bool TryCastToDecimal::Operation(float input, int16_t &result,
|
2399
|
-
|
2489
|
+
bool TryCastToDecimal::Operation(float input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2490
|
+
uint8_t scale) {
|
2491
|
+
return DoubleToDecimalCast<float, int16_t>(input, result, parameters, width, scale);
|
2400
2492
|
}
|
2401
2493
|
|
2402
2494
|
template <>
|
2403
|
-
bool TryCastToDecimal::Operation(float input, int32_t &result,
|
2404
|
-
|
2495
|
+
bool TryCastToDecimal::Operation(float input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2496
|
+
uint8_t scale) {
|
2497
|
+
return DoubleToDecimalCast<float, int32_t>(input, result, parameters, width, scale);
|
2405
2498
|
}
|
2406
2499
|
|
2407
2500
|
template <>
|
2408
|
-
bool TryCastToDecimal::Operation(float input, int64_t &result,
|
2409
|
-
|
2501
|
+
bool TryCastToDecimal::Operation(float input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2502
|
+
uint8_t scale) {
|
2503
|
+
return DoubleToDecimalCast<float, int64_t>(input, result, parameters, width, scale);
|
2410
2504
|
}
|
2411
2505
|
|
2412
2506
|
template <>
|
2413
|
-
bool TryCastToDecimal::Operation(float input, hugeint_t &result,
|
2414
|
-
|
2507
|
+
bool TryCastToDecimal::Operation(float input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2508
|
+
uint8_t scale) {
|
2509
|
+
return DoubleToDecimalCast<float, hugeint_t>(input, result, parameters, width, scale);
|
2415
2510
|
}
|
2416
2511
|
|
2417
2512
|
template <>
|
2418
|
-
bool TryCastToDecimal::Operation(double input, int16_t &result,
|
2419
|
-
|
2513
|
+
bool TryCastToDecimal::Operation(double input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2514
|
+
uint8_t scale) {
|
2515
|
+
return DoubleToDecimalCast<double, int16_t>(input, result, parameters, width, scale);
|
2420
2516
|
}
|
2421
2517
|
|
2422
2518
|
template <>
|
2423
|
-
bool TryCastToDecimal::Operation(double input, int32_t &result,
|
2424
|
-
|
2519
|
+
bool TryCastToDecimal::Operation(double input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2520
|
+
uint8_t scale) {
|
2521
|
+
return DoubleToDecimalCast<double, int32_t>(input, result, parameters, width, scale);
|
2425
2522
|
}
|
2426
2523
|
|
2427
2524
|
template <>
|
2428
|
-
bool TryCastToDecimal::Operation(double input, int64_t &result,
|
2429
|
-
|
2525
|
+
bool TryCastToDecimal::Operation(double input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2526
|
+
uint8_t scale) {
|
2527
|
+
return DoubleToDecimalCast<double, int64_t>(input, result, parameters, width, scale);
|
2430
2528
|
}
|
2431
2529
|
|
2432
2530
|
template <>
|
2433
|
-
bool TryCastToDecimal::Operation(double input, hugeint_t &result,
|
2434
|
-
|
2531
|
+
bool TryCastToDecimal::Operation(double input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2532
|
+
uint8_t scale) {
|
2533
|
+
return DoubleToDecimalCast<double, hugeint_t>(input, result, parameters, width, scale);
|
2435
2534
|
}
|
2436
2535
|
|
2437
2536
|
//===--------------------------------------------------------------------===//
|
2438
2537
|
// Decimal -> Numeric Cast
|
2439
2538
|
//===--------------------------------------------------------------------===//
|
2440
2539
|
template <class SRC, class DST>
|
2441
|
-
bool TryCastDecimalToNumeric(SRC input, DST &result,
|
2540
|
+
bool TryCastDecimalToNumeric(SRC input, DST &result, CastParameters ¶meters, uint8_t scale) {
|
2442
2541
|
// Round away from 0.
|
2443
2542
|
const auto power = NumericHelper::POWERS_OF_TEN[scale];
|
2444
2543
|
// https://graphics.stanford.edu/~seander/bithacks.html#ConditionalNegate
|
2445
2544
|
const auto fNegate = int64_t(input < 0);
|
2446
2545
|
const auto rounding = ((power ^ -fNegate) + fNegate) / 2;
|
2447
2546
|
const auto scaled_value = (input + rounding) / power;
|
2448
|
-
if (!TryCast::Operation<SRC, DST>(scaled_value, result)) {
|
2547
|
+
if (!TryCast::Operation<SRC, DST>(UnsafeNumericCast<SRC>(scaled_value), result)) {
|
2449
2548
|
string error = StringUtil::Format("Failed to cast decimal value %d to type %s", scaled_value, GetTypeId<DST>());
|
2450
|
-
HandleCastError::AssignError(error,
|
2549
|
+
HandleCastError::AssignError(error, parameters);
|
2451
2550
|
return false;
|
2452
2551
|
}
|
2453
2552
|
return true;
|
2454
2553
|
}
|
2455
2554
|
|
2456
2555
|
template <class DST>
|
2457
|
-
bool TryCastHugeDecimalToNumeric(hugeint_t input, DST &result,
|
2556
|
+
bool TryCastHugeDecimalToNumeric(hugeint_t input, DST &result, CastParameters ¶meters, uint8_t scale) {
|
2458
2557
|
const auto power = Hugeint::POWERS_OF_TEN[scale];
|
2459
2558
|
const auto rounding = ((input < 0) ? -power : power) / 2;
|
2460
2559
|
auto scaled_value = (input + rounding) / power;
|
2461
2560
|
if (!TryCast::Operation<hugeint_t, DST>(scaled_value, result)) {
|
2462
2561
|
string error = StringUtil::Format("Failed to cast decimal value %s to type %s",
|
2463
2562
|
ConvertToString::Operation(scaled_value), GetTypeId<DST>());
|
2464
|
-
HandleCastError::AssignError(error,
|
2563
|
+
HandleCastError::AssignError(error, parameters);
|
2465
2564
|
return false;
|
2466
2565
|
}
|
2467
2566
|
return true;
|
@@ -2471,237 +2570,240 @@ bool TryCastHugeDecimalToNumeric(hugeint_t input, DST &result, string *error_mes
|
|
2471
2570
|
// Cast Decimal -> int8_t
|
2472
2571
|
//===--------------------------------------------------------------------===//
|
2473
2572
|
template <>
|
2474
|
-
bool TryCastFromDecimal::Operation(int16_t input, int8_t &result,
|
2475
|
-
|
2573
|
+
bool TryCastFromDecimal::Operation(int16_t input, int8_t &result, CastParameters ¶meters, uint8_t width,
|
2574
|
+
uint8_t scale) {
|
2575
|
+
return TryCastDecimalToNumeric<int16_t, int8_t>(input, result, parameters, scale);
|
2476
2576
|
}
|
2477
2577
|
template <>
|
2478
|
-
bool TryCastFromDecimal::Operation(int32_t input, int8_t &result,
|
2479
|
-
|
2578
|
+
bool TryCastFromDecimal::Operation(int32_t input, int8_t &result, CastParameters ¶meters, uint8_t width,
|
2579
|
+
uint8_t scale) {
|
2580
|
+
return TryCastDecimalToNumeric<int32_t, int8_t>(input, result, parameters, scale);
|
2480
2581
|
}
|
2481
2582
|
template <>
|
2482
|
-
bool TryCastFromDecimal::Operation(int64_t input, int8_t &result,
|
2483
|
-
|
2583
|
+
bool TryCastFromDecimal::Operation(int64_t input, int8_t &result, CastParameters ¶meters, uint8_t width,
|
2584
|
+
uint8_t scale) {
|
2585
|
+
return TryCastDecimalToNumeric<int64_t, int8_t>(input, result, parameters, scale);
|
2484
2586
|
}
|
2485
2587
|
template <>
|
2486
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, int8_t &result,
|
2588
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, int8_t &result, CastParameters ¶meters, uint8_t width,
|
2487
2589
|
uint8_t scale) {
|
2488
|
-
return TryCastHugeDecimalToNumeric<int8_t>(input, result,
|
2590
|
+
return TryCastHugeDecimalToNumeric<int8_t>(input, result, parameters, scale);
|
2489
2591
|
}
|
2490
2592
|
|
2491
2593
|
//===--------------------------------------------------------------------===//
|
2492
2594
|
// Cast Decimal -> int16_t
|
2493
2595
|
//===--------------------------------------------------------------------===//
|
2494
2596
|
template <>
|
2495
|
-
bool TryCastFromDecimal::Operation(int16_t input, int16_t &result,
|
2597
|
+
bool TryCastFromDecimal::Operation(int16_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2496
2598
|
uint8_t scale) {
|
2497
|
-
return TryCastDecimalToNumeric<int16_t, int16_t>(input, result,
|
2599
|
+
return TryCastDecimalToNumeric<int16_t, int16_t>(input, result, parameters, scale);
|
2498
2600
|
}
|
2499
2601
|
template <>
|
2500
|
-
bool TryCastFromDecimal::Operation(int32_t input, int16_t &result,
|
2602
|
+
bool TryCastFromDecimal::Operation(int32_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2501
2603
|
uint8_t scale) {
|
2502
|
-
return TryCastDecimalToNumeric<int32_t, int16_t>(input, result,
|
2604
|
+
return TryCastDecimalToNumeric<int32_t, int16_t>(input, result, parameters, scale);
|
2503
2605
|
}
|
2504
2606
|
template <>
|
2505
|
-
bool TryCastFromDecimal::Operation(int64_t input, int16_t &result,
|
2607
|
+
bool TryCastFromDecimal::Operation(int64_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2506
2608
|
uint8_t scale) {
|
2507
|
-
return TryCastDecimalToNumeric<int64_t, int16_t>(input, result,
|
2609
|
+
return TryCastDecimalToNumeric<int64_t, int16_t>(input, result, parameters, scale);
|
2508
2610
|
}
|
2509
2611
|
template <>
|
2510
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, int16_t &result,
|
2612
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, int16_t &result, CastParameters ¶meters, uint8_t width,
|
2511
2613
|
uint8_t scale) {
|
2512
|
-
return TryCastHugeDecimalToNumeric<int16_t>(input, result,
|
2614
|
+
return TryCastHugeDecimalToNumeric<int16_t>(input, result, parameters, scale);
|
2513
2615
|
}
|
2514
2616
|
|
2515
2617
|
//===--------------------------------------------------------------------===//
|
2516
2618
|
// Cast Decimal -> int32_t
|
2517
2619
|
//===--------------------------------------------------------------------===//
|
2518
2620
|
template <>
|
2519
|
-
bool TryCastFromDecimal::Operation(int16_t input, int32_t &result,
|
2621
|
+
bool TryCastFromDecimal::Operation(int16_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2520
2622
|
uint8_t scale) {
|
2521
|
-
return TryCastDecimalToNumeric<int16_t, int32_t>(input, result,
|
2623
|
+
return TryCastDecimalToNumeric<int16_t, int32_t>(input, result, parameters, scale);
|
2522
2624
|
}
|
2523
2625
|
template <>
|
2524
|
-
bool TryCastFromDecimal::Operation(int32_t input, int32_t &result,
|
2626
|
+
bool TryCastFromDecimal::Operation(int32_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2525
2627
|
uint8_t scale) {
|
2526
|
-
return TryCastDecimalToNumeric<int32_t, int32_t>(input, result,
|
2628
|
+
return TryCastDecimalToNumeric<int32_t, int32_t>(input, result, parameters, scale);
|
2527
2629
|
}
|
2528
2630
|
template <>
|
2529
|
-
bool TryCastFromDecimal::Operation(int64_t input, int32_t &result,
|
2631
|
+
bool TryCastFromDecimal::Operation(int64_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2530
2632
|
uint8_t scale) {
|
2531
|
-
return TryCastDecimalToNumeric<int64_t, int32_t>(input, result,
|
2633
|
+
return TryCastDecimalToNumeric<int64_t, int32_t>(input, result, parameters, scale);
|
2532
2634
|
}
|
2533
2635
|
template <>
|
2534
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, int32_t &result,
|
2636
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, int32_t &result, CastParameters ¶meters, uint8_t width,
|
2535
2637
|
uint8_t scale) {
|
2536
|
-
return TryCastHugeDecimalToNumeric<int32_t>(input, result,
|
2638
|
+
return TryCastHugeDecimalToNumeric<int32_t>(input, result, parameters, scale);
|
2537
2639
|
}
|
2538
2640
|
|
2539
2641
|
//===--------------------------------------------------------------------===//
|
2540
2642
|
// Cast Decimal -> int64_t
|
2541
2643
|
//===--------------------------------------------------------------------===//
|
2542
2644
|
template <>
|
2543
|
-
bool TryCastFromDecimal::Operation(int16_t input, int64_t &result,
|
2645
|
+
bool TryCastFromDecimal::Operation(int16_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2544
2646
|
uint8_t scale) {
|
2545
|
-
return TryCastDecimalToNumeric<int16_t, int64_t>(input, result,
|
2647
|
+
return TryCastDecimalToNumeric<int16_t, int64_t>(input, result, parameters, scale);
|
2546
2648
|
}
|
2547
2649
|
template <>
|
2548
|
-
bool TryCastFromDecimal::Operation(int32_t input, int64_t &result,
|
2650
|
+
bool TryCastFromDecimal::Operation(int32_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2549
2651
|
uint8_t scale) {
|
2550
|
-
return TryCastDecimalToNumeric<int32_t, int64_t>(input, result,
|
2652
|
+
return TryCastDecimalToNumeric<int32_t, int64_t>(input, result, parameters, scale);
|
2551
2653
|
}
|
2552
2654
|
template <>
|
2553
|
-
bool TryCastFromDecimal::Operation(int64_t input, int64_t &result,
|
2655
|
+
bool TryCastFromDecimal::Operation(int64_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2554
2656
|
uint8_t scale) {
|
2555
|
-
return TryCastDecimalToNumeric<int64_t, int64_t>(input, result,
|
2657
|
+
return TryCastDecimalToNumeric<int64_t, int64_t>(input, result, parameters, scale);
|
2556
2658
|
}
|
2557
2659
|
template <>
|
2558
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, int64_t &result,
|
2660
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, int64_t &result, CastParameters ¶meters, uint8_t width,
|
2559
2661
|
uint8_t scale) {
|
2560
|
-
return TryCastHugeDecimalToNumeric<int64_t>(input, result,
|
2662
|
+
return TryCastHugeDecimalToNumeric<int64_t>(input, result, parameters, scale);
|
2561
2663
|
}
|
2562
2664
|
|
2563
2665
|
//===--------------------------------------------------------------------===//
|
2564
2666
|
// Cast Decimal -> uint8_t
|
2565
2667
|
//===--------------------------------------------------------------------===//
|
2566
2668
|
template <>
|
2567
|
-
bool TryCastFromDecimal::Operation(int16_t input, uint8_t &result,
|
2669
|
+
bool TryCastFromDecimal::Operation(int16_t input, uint8_t &result, CastParameters ¶meters, uint8_t width,
|
2568
2670
|
uint8_t scale) {
|
2569
|
-
return TryCastDecimalToNumeric<int16_t, uint8_t>(input, result,
|
2671
|
+
return TryCastDecimalToNumeric<int16_t, uint8_t>(input, result, parameters, scale);
|
2570
2672
|
}
|
2571
2673
|
template <>
|
2572
|
-
bool TryCastFromDecimal::Operation(int32_t input, uint8_t &result,
|
2674
|
+
bool TryCastFromDecimal::Operation(int32_t input, uint8_t &result, CastParameters ¶meters, uint8_t width,
|
2573
2675
|
uint8_t scale) {
|
2574
|
-
return TryCastDecimalToNumeric<int32_t, uint8_t>(input, result,
|
2676
|
+
return TryCastDecimalToNumeric<int32_t, uint8_t>(input, result, parameters, scale);
|
2575
2677
|
}
|
2576
2678
|
template <>
|
2577
|
-
bool TryCastFromDecimal::Operation(int64_t input, uint8_t &result,
|
2679
|
+
bool TryCastFromDecimal::Operation(int64_t input, uint8_t &result, CastParameters ¶meters, uint8_t width,
|
2578
2680
|
uint8_t scale) {
|
2579
|
-
return TryCastDecimalToNumeric<int64_t, uint8_t>(input, result,
|
2681
|
+
return TryCastDecimalToNumeric<int64_t, uint8_t>(input, result, parameters, scale);
|
2580
2682
|
}
|
2581
2683
|
template <>
|
2582
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, uint8_t &result,
|
2684
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, uint8_t &result, CastParameters ¶meters, uint8_t width,
|
2583
2685
|
uint8_t scale) {
|
2584
|
-
return TryCastHugeDecimalToNumeric<uint8_t>(input, result,
|
2686
|
+
return TryCastHugeDecimalToNumeric<uint8_t>(input, result, parameters, scale);
|
2585
2687
|
}
|
2586
2688
|
|
2587
2689
|
//===--------------------------------------------------------------------===//
|
2588
2690
|
// Cast Decimal -> uint16_t
|
2589
2691
|
//===--------------------------------------------------------------------===//
|
2590
2692
|
template <>
|
2591
|
-
bool TryCastFromDecimal::Operation(int16_t input, uint16_t &result,
|
2693
|
+
bool TryCastFromDecimal::Operation(int16_t input, uint16_t &result, CastParameters ¶meters, uint8_t width,
|
2592
2694
|
uint8_t scale) {
|
2593
|
-
return TryCastDecimalToNumeric<int16_t, uint16_t>(input, result,
|
2695
|
+
return TryCastDecimalToNumeric<int16_t, uint16_t>(input, result, parameters, scale);
|
2594
2696
|
}
|
2595
2697
|
template <>
|
2596
|
-
bool TryCastFromDecimal::Operation(int32_t input, uint16_t &result,
|
2698
|
+
bool TryCastFromDecimal::Operation(int32_t input, uint16_t &result, CastParameters ¶meters, uint8_t width,
|
2597
2699
|
uint8_t scale) {
|
2598
|
-
return TryCastDecimalToNumeric<int32_t, uint16_t>(input, result,
|
2700
|
+
return TryCastDecimalToNumeric<int32_t, uint16_t>(input, result, parameters, scale);
|
2599
2701
|
}
|
2600
2702
|
template <>
|
2601
|
-
bool TryCastFromDecimal::Operation(int64_t input, uint16_t &result,
|
2703
|
+
bool TryCastFromDecimal::Operation(int64_t input, uint16_t &result, CastParameters ¶meters, uint8_t width,
|
2602
2704
|
uint8_t scale) {
|
2603
|
-
return TryCastDecimalToNumeric<int64_t, uint16_t>(input, result,
|
2705
|
+
return TryCastDecimalToNumeric<int64_t, uint16_t>(input, result, parameters, scale);
|
2604
2706
|
}
|
2605
2707
|
template <>
|
2606
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, uint16_t &result,
|
2708
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, uint16_t &result, CastParameters ¶meters, uint8_t width,
|
2607
2709
|
uint8_t scale) {
|
2608
|
-
return TryCastHugeDecimalToNumeric<uint16_t>(input, result,
|
2710
|
+
return TryCastHugeDecimalToNumeric<uint16_t>(input, result, parameters, scale);
|
2609
2711
|
}
|
2610
2712
|
|
2611
2713
|
//===--------------------------------------------------------------------===//
|
2612
2714
|
// Cast Decimal -> uint32_t
|
2613
2715
|
//===--------------------------------------------------------------------===//
|
2614
2716
|
template <>
|
2615
|
-
bool TryCastFromDecimal::Operation(int16_t input, uint32_t &result,
|
2717
|
+
bool TryCastFromDecimal::Operation(int16_t input, uint32_t &result, CastParameters ¶meters, uint8_t width,
|
2616
2718
|
uint8_t scale) {
|
2617
|
-
return TryCastDecimalToNumeric<int16_t, uint32_t>(input, result,
|
2719
|
+
return TryCastDecimalToNumeric<int16_t, uint32_t>(input, result, parameters, scale);
|
2618
2720
|
}
|
2619
2721
|
template <>
|
2620
|
-
bool TryCastFromDecimal::Operation(int32_t input, uint32_t &result,
|
2722
|
+
bool TryCastFromDecimal::Operation(int32_t input, uint32_t &result, CastParameters ¶meters, uint8_t width,
|
2621
2723
|
uint8_t scale) {
|
2622
|
-
return TryCastDecimalToNumeric<int32_t, uint32_t>(input, result,
|
2724
|
+
return TryCastDecimalToNumeric<int32_t, uint32_t>(input, result, parameters, scale);
|
2623
2725
|
}
|
2624
2726
|
template <>
|
2625
|
-
bool TryCastFromDecimal::Operation(int64_t input, uint32_t &result,
|
2727
|
+
bool TryCastFromDecimal::Operation(int64_t input, uint32_t &result, CastParameters ¶meters, uint8_t width,
|
2626
2728
|
uint8_t scale) {
|
2627
|
-
return TryCastDecimalToNumeric<int64_t, uint32_t>(input, result,
|
2729
|
+
return TryCastDecimalToNumeric<int64_t, uint32_t>(input, result, parameters, scale);
|
2628
2730
|
}
|
2629
2731
|
template <>
|
2630
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, uint32_t &result,
|
2732
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, uint32_t &result, CastParameters ¶meters, uint8_t width,
|
2631
2733
|
uint8_t scale) {
|
2632
|
-
return TryCastHugeDecimalToNumeric<uint32_t>(input, result,
|
2734
|
+
return TryCastHugeDecimalToNumeric<uint32_t>(input, result, parameters, scale);
|
2633
2735
|
}
|
2634
2736
|
|
2635
2737
|
//===--------------------------------------------------------------------===//
|
2636
2738
|
// Cast Decimal -> uint64_t
|
2637
2739
|
//===--------------------------------------------------------------------===//
|
2638
2740
|
template <>
|
2639
|
-
bool TryCastFromDecimal::Operation(int16_t input, uint64_t &result,
|
2741
|
+
bool TryCastFromDecimal::Operation(int16_t input, uint64_t &result, CastParameters ¶meters, uint8_t width,
|
2640
2742
|
uint8_t scale) {
|
2641
|
-
return TryCastDecimalToNumeric<int16_t, uint64_t>(input, result,
|
2743
|
+
return TryCastDecimalToNumeric<int16_t, uint64_t>(input, result, parameters, scale);
|
2642
2744
|
}
|
2643
2745
|
template <>
|
2644
|
-
bool TryCastFromDecimal::Operation(int32_t input, uint64_t &result,
|
2746
|
+
bool TryCastFromDecimal::Operation(int32_t input, uint64_t &result, CastParameters ¶meters, uint8_t width,
|
2645
2747
|
uint8_t scale) {
|
2646
|
-
return TryCastDecimalToNumeric<int32_t, uint64_t>(input, result,
|
2748
|
+
return TryCastDecimalToNumeric<int32_t, uint64_t>(input, result, parameters, scale);
|
2647
2749
|
}
|
2648
2750
|
template <>
|
2649
|
-
bool TryCastFromDecimal::Operation(int64_t input, uint64_t &result,
|
2751
|
+
bool TryCastFromDecimal::Operation(int64_t input, uint64_t &result, CastParameters ¶meters, uint8_t width,
|
2650
2752
|
uint8_t scale) {
|
2651
|
-
return TryCastDecimalToNumeric<int64_t, uint64_t>(input, result,
|
2753
|
+
return TryCastDecimalToNumeric<int64_t, uint64_t>(input, result, parameters, scale);
|
2652
2754
|
}
|
2653
2755
|
template <>
|
2654
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, uint64_t &result,
|
2756
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, uint64_t &result, CastParameters ¶meters, uint8_t width,
|
2655
2757
|
uint8_t scale) {
|
2656
|
-
return TryCastHugeDecimalToNumeric<uint64_t>(input, result,
|
2758
|
+
return TryCastHugeDecimalToNumeric<uint64_t>(input, result, parameters, scale);
|
2657
2759
|
}
|
2658
2760
|
|
2659
2761
|
//===--------------------------------------------------------------------===//
|
2660
2762
|
// Cast Decimal -> hugeint_t
|
2661
2763
|
//===--------------------------------------------------------------------===//
|
2662
2764
|
template <>
|
2663
|
-
bool TryCastFromDecimal::Operation(int16_t input, hugeint_t &result,
|
2765
|
+
bool TryCastFromDecimal::Operation(int16_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2664
2766
|
uint8_t scale) {
|
2665
|
-
return TryCastDecimalToNumeric<int16_t, hugeint_t>(input, result,
|
2767
|
+
return TryCastDecimalToNumeric<int16_t, hugeint_t>(input, result, parameters, scale);
|
2666
2768
|
}
|
2667
2769
|
template <>
|
2668
|
-
bool TryCastFromDecimal::Operation(int32_t input, hugeint_t &result,
|
2770
|
+
bool TryCastFromDecimal::Operation(int32_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2669
2771
|
uint8_t scale) {
|
2670
|
-
return TryCastDecimalToNumeric<int32_t, hugeint_t>(input, result,
|
2772
|
+
return TryCastDecimalToNumeric<int32_t, hugeint_t>(input, result, parameters, scale);
|
2671
2773
|
}
|
2672
2774
|
template <>
|
2673
|
-
bool TryCastFromDecimal::Operation(int64_t input, hugeint_t &result,
|
2775
|
+
bool TryCastFromDecimal::Operation(int64_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2674
2776
|
uint8_t scale) {
|
2675
|
-
return TryCastDecimalToNumeric<int64_t, hugeint_t>(input, result,
|
2777
|
+
return TryCastDecimalToNumeric<int64_t, hugeint_t>(input, result, parameters, scale);
|
2676
2778
|
}
|
2677
2779
|
template <>
|
2678
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result,
|
2780
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, hugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2679
2781
|
uint8_t scale) {
|
2680
|
-
return TryCastHugeDecimalToNumeric<hugeint_t>(input, result,
|
2782
|
+
return TryCastHugeDecimalToNumeric<hugeint_t>(input, result, parameters, scale);
|
2681
2783
|
}
|
2682
2784
|
|
2683
2785
|
//===--------------------------------------------------------------------===//
|
2684
2786
|
// Cast Decimal -> uhugeint_t
|
2685
2787
|
//===--------------------------------------------------------------------===//
|
2686
2788
|
template <>
|
2687
|
-
bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result,
|
2789
|
+
bool TryCastFromDecimal::Operation(int16_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2688
2790
|
uint8_t scale) {
|
2689
|
-
return TryCastDecimalToNumeric<int16_t, uhugeint_t>(input, result,
|
2791
|
+
return TryCastDecimalToNumeric<int16_t, uhugeint_t>(input, result, parameters, scale);
|
2690
2792
|
}
|
2691
2793
|
template <>
|
2692
|
-
bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result,
|
2794
|
+
bool TryCastFromDecimal::Operation(int32_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2693
2795
|
uint8_t scale) {
|
2694
|
-
return TryCastDecimalToNumeric<int32_t, uhugeint_t>(input, result,
|
2796
|
+
return TryCastDecimalToNumeric<int32_t, uhugeint_t>(input, result, parameters, scale);
|
2695
2797
|
}
|
2696
2798
|
template <>
|
2697
|
-
bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result,
|
2799
|
+
bool TryCastFromDecimal::Operation(int64_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2698
2800
|
uint8_t scale) {
|
2699
|
-
return TryCastDecimalToNumeric<int64_t, uhugeint_t>(input, result,
|
2801
|
+
return TryCastDecimalToNumeric<int64_t, uhugeint_t>(input, result, parameters, scale);
|
2700
2802
|
}
|
2701
2803
|
template <>
|
2702
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result,
|
2804
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, uhugeint_t &result, CastParameters ¶meters, uint8_t width,
|
2703
2805
|
uint8_t scale) {
|
2704
|
-
return TryCastHugeDecimalToNumeric<uhugeint_t>(input, result,
|
2806
|
+
return TryCastHugeDecimalToNumeric<uhugeint_t>(input, result, parameters, scale);
|
2705
2807
|
}
|
2706
2808
|
|
2707
2809
|
//===--------------------------------------------------------------------===//
|
@@ -2715,44 +2817,50 @@ bool TryCastDecimalToFloatingPoint(SRC input, DST &result, uint8_t scale) {
|
|
2715
2817
|
|
2716
2818
|
// DECIMAL -> FLOAT
|
2717
2819
|
template <>
|
2718
|
-
bool TryCastFromDecimal::Operation(int16_t input, float &result,
|
2820
|
+
bool TryCastFromDecimal::Operation(int16_t input, float &result, CastParameters ¶meters, uint8_t width,
|
2821
|
+
uint8_t scale) {
|
2719
2822
|
return TryCastDecimalToFloatingPoint<int16_t, float>(input, result, scale);
|
2720
2823
|
}
|
2721
2824
|
|
2722
2825
|
template <>
|
2723
|
-
bool TryCastFromDecimal::Operation(int32_t input, float &result,
|
2826
|
+
bool TryCastFromDecimal::Operation(int32_t input, float &result, CastParameters ¶meters, uint8_t width,
|
2827
|
+
uint8_t scale) {
|
2724
2828
|
return TryCastDecimalToFloatingPoint<int32_t, float>(input, result, scale);
|
2725
2829
|
}
|
2726
2830
|
|
2727
2831
|
template <>
|
2728
|
-
bool TryCastFromDecimal::Operation(int64_t input, float &result,
|
2832
|
+
bool TryCastFromDecimal::Operation(int64_t input, float &result, CastParameters ¶meters, uint8_t width,
|
2833
|
+
uint8_t scale) {
|
2729
2834
|
return TryCastDecimalToFloatingPoint<int64_t, float>(input, result, scale);
|
2730
2835
|
}
|
2731
2836
|
|
2732
2837
|
template <>
|
2733
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, float &result,
|
2838
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, float &result, CastParameters ¶meters, uint8_t width,
|
2734
2839
|
uint8_t scale) {
|
2735
2840
|
return TryCastDecimalToFloatingPoint<hugeint_t, float>(input, result, scale);
|
2736
2841
|
}
|
2737
2842
|
|
2738
2843
|
// DECIMAL -> DOUBLE
|
2739
2844
|
template <>
|
2740
|
-
bool TryCastFromDecimal::Operation(int16_t input, double &result,
|
2845
|
+
bool TryCastFromDecimal::Operation(int16_t input, double &result, CastParameters ¶meters, uint8_t width,
|
2846
|
+
uint8_t scale) {
|
2741
2847
|
return TryCastDecimalToFloatingPoint<int16_t, double>(input, result, scale);
|
2742
2848
|
}
|
2743
2849
|
|
2744
2850
|
template <>
|
2745
|
-
bool TryCastFromDecimal::Operation(int32_t input, double &result,
|
2851
|
+
bool TryCastFromDecimal::Operation(int32_t input, double &result, CastParameters ¶meters, uint8_t width,
|
2852
|
+
uint8_t scale) {
|
2746
2853
|
return TryCastDecimalToFloatingPoint<int32_t, double>(input, result, scale);
|
2747
2854
|
}
|
2748
2855
|
|
2749
2856
|
template <>
|
2750
|
-
bool TryCastFromDecimal::Operation(int64_t input, double &result,
|
2857
|
+
bool TryCastFromDecimal::Operation(int64_t input, double &result, CastParameters ¶meters, uint8_t width,
|
2858
|
+
uint8_t scale) {
|
2751
2859
|
return TryCastDecimalToFloatingPoint<int64_t, double>(input, result, scale);
|
2752
2860
|
}
|
2753
2861
|
|
2754
2862
|
template <>
|
2755
|
-
bool TryCastFromDecimal::Operation(hugeint_t input, double &result,
|
2863
|
+
bool TryCastFromDecimal::Operation(hugeint_t input, double &result, CastParameters ¶meters, uint8_t width,
|
2756
2864
|
uint8_t scale) {
|
2757
2865
|
return TryCastDecimalToFloatingPoint<hugeint_t, double>(input, result, scale);
|
2758
2866
|
}
|