duckdb 0.10.1-dev9.0 → 0.10.2-dev0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/NodeJS.yml +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
|
@@ -11,31 +11,31 @@ BoundCastInfo DefaultCasts::BitCastSwitch(BindCastInput &input, const LogicalTyp
|
|
|
11
11
|
switch (target.id()) {
|
|
12
12
|
// Numerics
|
|
13
13
|
case LogicalTypeId::BOOLEAN:
|
|
14
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
14
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, bool, CastFromBitToNumeric>);
|
|
15
15
|
case LogicalTypeId::TINYINT:
|
|
16
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
16
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, int8_t, CastFromBitToNumeric>);
|
|
17
17
|
case LogicalTypeId::SMALLINT:
|
|
18
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
18
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, int16_t, CastFromBitToNumeric>);
|
|
19
19
|
case LogicalTypeId::INTEGER:
|
|
20
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
20
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, int32_t, CastFromBitToNumeric>);
|
|
21
21
|
case LogicalTypeId::BIGINT:
|
|
22
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
22
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, int64_t, CastFromBitToNumeric>);
|
|
23
23
|
case LogicalTypeId::UTINYINT:
|
|
24
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
24
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, uint8_t, CastFromBitToNumeric>);
|
|
25
25
|
case LogicalTypeId::USMALLINT:
|
|
26
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
26
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, uint16_t, CastFromBitToNumeric>);
|
|
27
27
|
case LogicalTypeId::UINTEGER:
|
|
28
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
28
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, uint32_t, CastFromBitToNumeric>);
|
|
29
29
|
case LogicalTypeId::UBIGINT:
|
|
30
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
30
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, uint64_t, CastFromBitToNumeric>);
|
|
31
31
|
case LogicalTypeId::HUGEINT:
|
|
32
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
32
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, hugeint_t, CastFromBitToNumeric>);
|
|
33
33
|
case LogicalTypeId::UHUGEINT:
|
|
34
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
34
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, uhugeint_t, CastFromBitToNumeric>);
|
|
35
35
|
case LogicalTypeId::FLOAT:
|
|
36
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
36
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, float, CastFromBitToNumeric>);
|
|
37
37
|
case LogicalTypeId::DOUBLE:
|
|
38
|
-
return BoundCastInfo(&VectorCastHelpers::
|
|
38
|
+
return BoundCastInfo(&VectorCastHelpers::TryCastErrorLoop<string_t, double, CastFromBitToNumeric>);
|
|
39
39
|
|
|
40
40
|
case LogicalTypeId::BLOB:
|
|
41
41
|
return BoundCastInfo(&VectorCastHelpers::StringCast<string_t, CastFromBitToBlob>);
|
|
@@ -14,6 +14,7 @@ BindCastInput::BindCastInput(CastFunctionSet &function_set, optional_ptr<BindCas
|
|
|
14
14
|
|
|
15
15
|
BoundCastInfo BindCastInput::GetCastFunction(const LogicalType &source, const LogicalType &target) {
|
|
16
16
|
GetCastFunctionInput input(context);
|
|
17
|
+
input.query_location = query_location;
|
|
17
18
|
return function_set.GetCastFunction(source, target, input);
|
|
18
19
|
}
|
|
19
20
|
|
|
@@ -47,6 +48,7 @@ BoundCastInfo CastFunctionSet::GetCastFunction(const LogicalType &source, const
|
|
|
47
48
|
for (idx_t i = bind_functions.size(); i > 0; i--) {
|
|
48
49
|
auto &bind_function = bind_functions[i - 1];
|
|
49
50
|
BindCastInput input(*this, bind_function.info.get(), get_input.context);
|
|
51
|
+
input.query_location = get_input.query_location;
|
|
50
52
|
auto result = bind_function.function(input, source, target);
|
|
51
53
|
if (result.function) {
|
|
52
54
|
// found a cast function! return it
|
|
@@ -15,17 +15,17 @@ static bool FromDecimalCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
15
15
|
auto scale = DecimalType::GetScale(source_type);
|
|
16
16
|
switch (source_type.InternalType()) {
|
|
17
17
|
case PhysicalType::INT16:
|
|
18
|
-
return VectorCastHelpers::TemplatedDecimalCast<int16_t, T, TryCastFromDecimal>(
|
|
19
|
-
|
|
18
|
+
return VectorCastHelpers::TemplatedDecimalCast<int16_t, T, TryCastFromDecimal>(source, result, count,
|
|
19
|
+
parameters, width, scale);
|
|
20
20
|
case PhysicalType::INT32:
|
|
21
|
-
return VectorCastHelpers::TemplatedDecimalCast<int32_t, T, TryCastFromDecimal>(
|
|
22
|
-
|
|
21
|
+
return VectorCastHelpers::TemplatedDecimalCast<int32_t, T, TryCastFromDecimal>(source, result, count,
|
|
22
|
+
parameters, width, scale);
|
|
23
23
|
case PhysicalType::INT64:
|
|
24
|
-
return VectorCastHelpers::TemplatedDecimalCast<int64_t, T, TryCastFromDecimal>(
|
|
25
|
-
|
|
24
|
+
return VectorCastHelpers::TemplatedDecimalCast<int64_t, T, TryCastFromDecimal>(source, result, count,
|
|
25
|
+
parameters, width, scale);
|
|
26
26
|
case PhysicalType::INT128:
|
|
27
|
-
return VectorCastHelpers::TemplatedDecimalCast<hugeint_t, T, TryCastFromDecimal>(
|
|
28
|
-
|
|
27
|
+
return VectorCastHelpers::TemplatedDecimalCast<hugeint_t, T, TryCastFromDecimal>(source, result, count,
|
|
28
|
+
parameters, width, scale);
|
|
29
29
|
default:
|
|
30
30
|
throw InternalException("Unimplemented internal type for decimal");
|
|
31
31
|
}
|
|
@@ -33,19 +33,19 @@ static bool FromDecimalCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
33
33
|
|
|
34
34
|
template <class LIMIT_TYPE, class FACTOR_TYPE = LIMIT_TYPE>
|
|
35
35
|
struct DecimalScaleInput {
|
|
36
|
-
DecimalScaleInput(Vector &result_p, FACTOR_TYPE factor_p
|
|
36
|
+
DecimalScaleInput(Vector &result_p, FACTOR_TYPE factor_p, CastParameters ¶meters)
|
|
37
|
+
: result(result_p), vector_cast_data(result, parameters), factor(factor_p) {
|
|
37
38
|
}
|
|
38
|
-
DecimalScaleInput(Vector &result_p, LIMIT_TYPE limit_p, FACTOR_TYPE factor_p,
|
|
39
|
+
DecimalScaleInput(Vector &result_p, LIMIT_TYPE limit_p, FACTOR_TYPE factor_p, CastParameters ¶meters,
|
|
39
40
|
uint8_t source_width_p, uint8_t source_scale_p)
|
|
40
|
-
: result(result_p), limit(limit_p), factor(factor_p),
|
|
41
|
+
: result(result_p), vector_cast_data(result, parameters), limit(limit_p), factor(factor_p),
|
|
41
42
|
source_width(source_width_p), source_scale(source_scale_p) {
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
Vector &result;
|
|
46
|
+
VectorTryCastData vector_cast_data;
|
|
45
47
|
LIMIT_TYPE limit;
|
|
46
48
|
FACTOR_TYPE factor;
|
|
47
|
-
bool all_converted = true;
|
|
48
|
-
string *error_message;
|
|
49
49
|
uint8_t source_width;
|
|
50
50
|
uint8_t source_scale;
|
|
51
51
|
};
|
|
@@ -66,36 +66,34 @@ struct DecimalScaleUpCheckOperator {
|
|
|
66
66
|
auto error = StringUtil::Format("Casting value \"%s\" to type %s failed: value is out of range!",
|
|
67
67
|
Decimal::ToString(input, data->source_width, data->source_scale),
|
|
68
68
|
data->result.GetType().ToString());
|
|
69
|
-
return HandleVectorCastError::Operation<RESULT_TYPE>(std::move(error), mask, idx, data->
|
|
70
|
-
data->all_converted);
|
|
69
|
+
return HandleVectorCastError::Operation<RESULT_TYPE>(std::move(error), mask, idx, data->vector_cast_data);
|
|
71
70
|
}
|
|
72
71
|
return Cast::Operation<INPUT_TYPE, RESULT_TYPE>(input) * data->factor;
|
|
73
72
|
}
|
|
74
73
|
};
|
|
75
74
|
|
|
76
75
|
template <class SOURCE, class DEST, class POWERS_SOURCE, class POWERS_DEST>
|
|
77
|
-
bool TemplatedDecimalScaleUp(Vector &source, Vector &result, idx_t count,
|
|
76
|
+
bool TemplatedDecimalScaleUp(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
78
77
|
auto source_scale = DecimalType::GetScale(source.GetType());
|
|
79
78
|
auto source_width = DecimalType::GetWidth(source.GetType());
|
|
80
79
|
auto result_scale = DecimalType::GetScale(result.GetType());
|
|
81
80
|
auto result_width = DecimalType::GetWidth(result.GetType());
|
|
82
81
|
D_ASSERT(result_scale >= source_scale);
|
|
83
82
|
idx_t scale_difference = result_scale - source_scale;
|
|
84
|
-
DEST multiply_factor = POWERS_DEST::POWERS_OF_TEN[scale_difference];
|
|
83
|
+
DEST multiply_factor = UnsafeNumericCast<DEST>(POWERS_DEST::POWERS_OF_TEN[scale_difference]);
|
|
85
84
|
idx_t target_width = result_width - scale_difference;
|
|
86
85
|
if (source_width < target_width) {
|
|
87
|
-
DecimalScaleInput<SOURCE, DEST> input(result, multiply_factor);
|
|
86
|
+
DecimalScaleInput<SOURCE, DEST> input(result, multiply_factor, parameters);
|
|
88
87
|
// type will always fit: no need to check limit
|
|
89
88
|
UnaryExecutor::GenericExecute<SOURCE, DEST, DecimalScaleUpOperator>(source, result, count, &input);
|
|
90
89
|
return true;
|
|
91
90
|
} else {
|
|
92
91
|
// type might not fit: check limit
|
|
93
|
-
auto limit = POWERS_SOURCE::POWERS_OF_TEN[target_width];
|
|
94
|
-
DecimalScaleInput<SOURCE, DEST> input(result, limit, multiply_factor,
|
|
95
|
-
source_scale);
|
|
92
|
+
auto limit = UnsafeNumericCast<SOURCE>(POWERS_SOURCE::POWERS_OF_TEN[target_width]);
|
|
93
|
+
DecimalScaleInput<SOURCE, DEST> input(result, limit, multiply_factor, parameters, source_width, source_scale);
|
|
96
94
|
UnaryExecutor::GenericExecute<SOURCE, DEST, DecimalScaleUpCheckOperator>(source, result, count, &input,
|
|
97
|
-
error_message);
|
|
98
|
-
return input.all_converted;
|
|
95
|
+
parameters.error_message);
|
|
96
|
+
return input.vector_cast_data.all_converted;
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
|
|
@@ -115,15 +113,14 @@ struct DecimalScaleDownCheckOperator {
|
|
|
115
113
|
auto error = StringUtil::Format("Casting value \"%s\" to type %s failed: value is out of range!",
|
|
116
114
|
Decimal::ToString(input, data->source_width, data->source_scale),
|
|
117
115
|
data->result.GetType().ToString());
|
|
118
|
-
return HandleVectorCastError::Operation<RESULT_TYPE>(std::move(error), mask, idx, data->
|
|
119
|
-
data->all_converted);
|
|
116
|
+
return HandleVectorCastError::Operation<RESULT_TYPE>(std::move(error), mask, idx, data->vector_cast_data);
|
|
120
117
|
}
|
|
121
118
|
return Cast::Operation<INPUT_TYPE, RESULT_TYPE>(input / data->factor);
|
|
122
119
|
}
|
|
123
120
|
};
|
|
124
121
|
|
|
125
122
|
template <class SOURCE, class DEST, class POWERS_SOURCE>
|
|
126
|
-
bool TemplatedDecimalScaleDown(Vector &source, Vector &result, idx_t count,
|
|
123
|
+
bool TemplatedDecimalScaleDown(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
127
124
|
auto source_scale = DecimalType::GetScale(source.GetType());
|
|
128
125
|
auto source_width = DecimalType::GetWidth(source.GetType());
|
|
129
126
|
auto result_scale = DecimalType::GetScale(result.GetType());
|
|
@@ -131,19 +128,20 @@ bool TemplatedDecimalScaleDown(Vector &source, Vector &result, idx_t count, stri
|
|
|
131
128
|
D_ASSERT(result_scale < source_scale);
|
|
132
129
|
idx_t scale_difference = source_scale - result_scale;
|
|
133
130
|
idx_t target_width = result_width + scale_difference;
|
|
134
|
-
|
|
131
|
+
auto divide_factor = UnsafeNumericCast<SOURCE>(POWERS_SOURCE::POWERS_OF_TEN[scale_difference]);
|
|
135
132
|
if (source_width < target_width) {
|
|
136
|
-
DecimalScaleInput<SOURCE> input(result, divide_factor);
|
|
133
|
+
DecimalScaleInput<SOURCE> input(result, divide_factor, parameters);
|
|
137
134
|
// type will always fit: no need to check limit
|
|
138
135
|
UnaryExecutor::GenericExecute<SOURCE, DEST, DecimalScaleDownOperator>(source, result, count, &input);
|
|
139
136
|
return true;
|
|
140
137
|
} else {
|
|
141
138
|
// type might not fit: check limit
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
|
|
140
|
+
auto limit = UnsafeNumericCast<SOURCE>(POWERS_SOURCE::POWERS_OF_TEN[target_width]);
|
|
141
|
+
DecimalScaleInput<SOURCE> input(result, limit, divide_factor, parameters, source_width, source_scale);
|
|
144
142
|
UnaryExecutor::GenericExecute<SOURCE, DEST, DecimalScaleDownCheckOperator>(source, result, count, &input,
|
|
145
|
-
error_message);
|
|
146
|
-
return input.all_converted;
|
|
143
|
+
parameters.error_message);
|
|
144
|
+
return input.vector_cast_data.all_converted;
|
|
147
145
|
}
|
|
148
146
|
}
|
|
149
147
|
|
|
@@ -160,16 +158,16 @@ static bool DecimalDecimalCastSwitch(Vector &source, Vector &result, idx_t count
|
|
|
160
158
|
switch (result.GetType().InternalType()) {
|
|
161
159
|
case PhysicalType::INT16:
|
|
162
160
|
return TemplatedDecimalScaleUp<SOURCE, int16_t, POWERS_SOURCE, NumericHelper>(source, result, count,
|
|
163
|
-
parameters
|
|
161
|
+
parameters);
|
|
164
162
|
case PhysicalType::INT32:
|
|
165
163
|
return TemplatedDecimalScaleUp<SOURCE, int32_t, POWERS_SOURCE, NumericHelper>(source, result, count,
|
|
166
|
-
parameters
|
|
164
|
+
parameters);
|
|
167
165
|
case PhysicalType::INT64:
|
|
168
166
|
return TemplatedDecimalScaleUp<SOURCE, int64_t, POWERS_SOURCE, NumericHelper>(source, result, count,
|
|
169
|
-
parameters
|
|
167
|
+
parameters);
|
|
170
168
|
case PhysicalType::INT128:
|
|
171
169
|
return TemplatedDecimalScaleUp<SOURCE, hugeint_t, POWERS_SOURCE, Hugeint>(source, result, count,
|
|
172
|
-
parameters
|
|
170
|
+
parameters);
|
|
173
171
|
default:
|
|
174
172
|
throw NotImplementedException("Unimplemented internal type for decimal");
|
|
175
173
|
}
|
|
@@ -177,17 +175,13 @@ static bool DecimalDecimalCastSwitch(Vector &source, Vector &result, idx_t count
|
|
|
177
175
|
// divide
|
|
178
176
|
switch (result.GetType().InternalType()) {
|
|
179
177
|
case PhysicalType::INT16:
|
|
180
|
-
return TemplatedDecimalScaleDown<SOURCE, int16_t, POWERS_SOURCE>(source, result, count,
|
|
181
|
-
parameters.error_message);
|
|
178
|
+
return TemplatedDecimalScaleDown<SOURCE, int16_t, POWERS_SOURCE>(source, result, count, parameters);
|
|
182
179
|
case PhysicalType::INT32:
|
|
183
|
-
return TemplatedDecimalScaleDown<SOURCE, int32_t, POWERS_SOURCE>(source, result, count,
|
|
184
|
-
parameters.error_message);
|
|
180
|
+
return TemplatedDecimalScaleDown<SOURCE, int32_t, POWERS_SOURCE>(source, result, count, parameters);
|
|
185
181
|
case PhysicalType::INT64:
|
|
186
|
-
return TemplatedDecimalScaleDown<SOURCE, int64_t, POWERS_SOURCE>(source, result, count,
|
|
187
|
-
parameters.error_message);
|
|
182
|
+
return TemplatedDecimalScaleDown<SOURCE, int64_t, POWERS_SOURCE>(source, result, count, parameters);
|
|
188
183
|
case PhysicalType::INT128:
|
|
189
|
-
return TemplatedDecimalScaleDown<SOURCE, hugeint_t, POWERS_SOURCE>(source, result, count,
|
|
190
|
-
parameters.error_message);
|
|
184
|
+
return TemplatedDecimalScaleDown<SOURCE, hugeint_t, POWERS_SOURCE>(source, result, count, parameters);
|
|
191
185
|
default:
|
|
192
186
|
throw NotImplementedException("Unimplemented internal type for decimal");
|
|
193
187
|
}
|
|
@@ -32,6 +32,10 @@ bool DefaultCasts::NopCast(Vector &source, Vector &result, idx_t count, CastPara
|
|
|
32
32
|
return true;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
+
void HandleCastError::AssignError(const string &error_message, CastParameters ¶meters) {
|
|
36
|
+
AssignError(error_message, parameters.error_message, parameters.query_location);
|
|
37
|
+
}
|
|
38
|
+
|
|
35
39
|
static string UnimplementedCastMessage(const LogicalType &source_type, const LogicalType &target_type) {
|
|
36
40
|
return StringUtil::Format("Unimplemented type for cast (%s -> %s)", source_type.ToString(), target_type.ToString());
|
|
37
41
|
}
|
|
@@ -40,8 +44,7 @@ static string UnimplementedCastMessage(const LogicalType &source_type, const Log
|
|
|
40
44
|
bool DefaultCasts::TryVectorNullCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
41
45
|
bool success = true;
|
|
42
46
|
if (VectorOperations::HasNotNull(source, count)) {
|
|
43
|
-
HandleCastError::AssignError(UnimplementedCastMessage(source.GetType(), result.GetType()),
|
|
44
|
-
parameters.error_message);
|
|
47
|
+
HandleCastError::AssignError(UnimplementedCastMessage(source.GetType(), result.GetType()), parameters);
|
|
45
48
|
success = false;
|
|
46
49
|
}
|
|
47
50
|
result.SetVectorType(VectorType::CONSTANT_VECTOR);
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#include "duckdb/common/numeric_utils.hpp"
|
|
1
2
|
#include "duckdb/function/cast/default_casts.hpp"
|
|
2
3
|
#include "duckdb/function/cast/vector_cast_helpers.hpp"
|
|
3
4
|
#include "duckdb/function/cast/cast_function_set.hpp"
|
|
@@ -6,7 +7,6 @@ namespace duckdb {
|
|
|
6
7
|
|
|
7
8
|
template <class SRC_TYPE, class RES_TYPE>
|
|
8
9
|
bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
9
|
-
bool all_converted = true;
|
|
10
10
|
result.SetVectorType(VectorType::FLAT_VECTOR);
|
|
11
11
|
|
|
12
12
|
auto &str_vec = EnumType::GetValuesInsertOrder(source.GetType());
|
|
@@ -24,6 +24,7 @@ bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters &p
|
|
|
24
24
|
auto result_data = FlatVector::GetData<RES_TYPE>(result);
|
|
25
25
|
auto &result_mask = FlatVector::Validity(result);
|
|
26
26
|
|
|
27
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
27
28
|
for (idx_t i = 0; i < count; i++) {
|
|
28
29
|
auto src_idx = source_sel->get_index(i);
|
|
29
30
|
if (!source_mask.RowIsValid(src_idx)) {
|
|
@@ -35,16 +36,15 @@ bool EnumEnumCast(Vector &source, Vector &result, idx_t count, CastParameters &p
|
|
|
35
36
|
// key doesn't exist on result enum
|
|
36
37
|
if (!parameters.error_message) {
|
|
37
38
|
result_data[i] = HandleVectorCastError::Operation<RES_TYPE>(
|
|
38
|
-
CastExceptionText<SRC_TYPE, RES_TYPE>(source_data[src_idx]), result_mask, i,
|
|
39
|
-
parameters.error_message, all_converted);
|
|
39
|
+
CastExceptionText<SRC_TYPE, RES_TYPE>(source_data[src_idx]), result_mask, i, vector_cast_data);
|
|
40
40
|
} else {
|
|
41
41
|
result_mask.SetInvalid(i);
|
|
42
42
|
}
|
|
43
43
|
continue;
|
|
44
44
|
}
|
|
45
|
-
result_data[i] = key;
|
|
45
|
+
result_data[i] = UnsafeNumericCast<RES_TYPE>(key);
|
|
46
46
|
}
|
|
47
|
-
return all_converted;
|
|
47
|
+
return vector_cast_data.all_converted;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
template <class SRC_TYPE>
|
|
@@ -151,7 +151,7 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
151
151
|
// Cant cast to array, list size mismatch
|
|
152
152
|
auto msg = StringUtil::Format("Cannot cast list with length %llu to array with length %u", ldata.length,
|
|
153
153
|
array_size);
|
|
154
|
-
HandleCastError::AssignError(msg, parameters
|
|
154
|
+
HandleCastError::AssignError(msg, parameters);
|
|
155
155
|
ConstantVector::SetNull(result, true);
|
|
156
156
|
return false;
|
|
157
157
|
}
|
|
@@ -159,10 +159,23 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
159
159
|
auto &source_cc = ListVector::GetEntry(source);
|
|
160
160
|
auto &result_cc = ArrayVector::GetEntry(result);
|
|
161
161
|
|
|
162
|
-
// Since the list was constant, there can only be one sequence of data in the child vector
|
|
163
162
|
CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data, parameters.local_state);
|
|
164
|
-
|
|
165
|
-
|
|
163
|
+
|
|
164
|
+
if (ldata.offset == 0) {
|
|
165
|
+
// Fast path: offset is zero, we can just cast `array_size` elements of the child vectors directly
|
|
166
|
+
// Since the list was constant, there can only be one sequence of data in the child vector
|
|
167
|
+
return cast_data.child_cast_info.function(source_cc, result_cc, array_size, child_parameters);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// Else, we need to copy the range we want to cast to a new vector and cast that
|
|
171
|
+
// In theory we could slice the source child to create a dictionary, but we would then have to flatten the
|
|
172
|
+
// result child which is going to allocate a temp vector and perform a copy anyway. Since we just want to copy a
|
|
173
|
+
// single contiguous range with a single offset, this is simpler.
|
|
174
|
+
|
|
175
|
+
Vector payload_vector(source_cc.GetType(), array_size);
|
|
176
|
+
VectorOperations::Copy(source_cc, payload_vector, ldata.offset + array_size, ldata.offset, 0);
|
|
177
|
+
return cast_data.child_cast_info.function(payload_vector, result_cc, array_size, child_parameters);
|
|
178
|
+
|
|
166
179
|
} else {
|
|
167
180
|
source.Flatten(count);
|
|
168
181
|
result.SetVectorType(VectorType::FLAT_VECTOR);
|
|
@@ -189,7 +202,7 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
189
202
|
all_ok = false;
|
|
190
203
|
auto msg = StringUtil::Format("Cannot cast list with length %llu to array with length %u",
|
|
191
204
|
ldata[i].length, array_size);
|
|
192
|
-
HandleCastError::AssignError(msg, parameters
|
|
205
|
+
HandleCastError::AssignError(msg, parameters);
|
|
193
206
|
}
|
|
194
207
|
FlatVector::SetNull(result, i, true);
|
|
195
208
|
for (idx_t array_elem = 0; array_elem < array_size; array_elem++) {
|
|
@@ -208,13 +221,13 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
208
221
|
// Fast path: No lists are null
|
|
209
222
|
// We can just cast the child vector directly
|
|
210
223
|
// Note: Its worth doing a CheckAllValid here, the slow path is significantly more expensive
|
|
211
|
-
if (FlatVector::Validity(
|
|
224
|
+
if (FlatVector::Validity(result).CheckAllValid(count)) {
|
|
212
225
|
Vector payload_vector(result_cc.GetType(), child_count);
|
|
213
226
|
|
|
214
227
|
bool ok = cast_data.child_cast_info.function(source_cc, payload_vector, child_count, child_parameters);
|
|
215
228
|
if (all_ok && !ok) {
|
|
216
229
|
all_ok = false;
|
|
217
|
-
HandleCastError::AssignError(*child_parameters.error_message, parameters
|
|
230
|
+
HandleCastError::AssignError(*child_parameters.error_message, parameters);
|
|
218
231
|
}
|
|
219
232
|
// Now do the actual copy onto the result vector, making sure to slice properly in case the lists are out of
|
|
220
233
|
// order
|
|
@@ -228,12 +241,9 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
228
241
|
cast_chunk.Initialize(Allocator::DefaultAllocator(), {source_cc.GetType(), result_cc.GetType()}, array_size);
|
|
229
242
|
|
|
230
243
|
for (idx_t i = 0; i < count; i++) {
|
|
231
|
-
if (FlatVector::IsNull(
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
for (idx_t array_elem = 0; array_elem < array_size; array_elem++) {
|
|
235
|
-
FlatVector::SetNull(result_cc, i * array_size + array_elem, true);
|
|
236
|
-
}
|
|
244
|
+
if (FlatVector::IsNull(result, i)) {
|
|
245
|
+
// We've already failed to cast this list above (e.g. length mismatch), so theres nothing to do here.
|
|
246
|
+
continue;
|
|
237
247
|
} else {
|
|
238
248
|
auto &list_cast_input = cast_chunk.data[0];
|
|
239
249
|
auto &list_cast_output = cast_chunk.data[1];
|
|
@@ -246,7 +256,7 @@ static bool ListToArrayCast(Vector &source, Vector &result, idx_t count, CastPar
|
|
|
246
256
|
cast_data.child_cast_info.function(list_cast_input, list_cast_output, array_size, child_parameters);
|
|
247
257
|
if (all_ok && !ok) {
|
|
248
258
|
all_ok = false;
|
|
249
|
-
HandleCastError::AssignError(*child_parameters.error_message, parameters
|
|
259
|
+
HandleCastError::AssignError(*child_parameters.error_message, parameters);
|
|
250
260
|
}
|
|
251
261
|
VectorOperations::Copy(list_cast_output, result_cc, array_size, 0, i * array_size);
|
|
252
262
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#include "duckdb/function/cast/default_casts.hpp"
|
|
2
2
|
#include "duckdb/function/cast/vector_cast_helpers.hpp"
|
|
3
3
|
#include "duckdb/common/exception/conversion_exception.hpp"
|
|
4
|
+
#include "duckdb/common/numeric_utils.hpp"
|
|
4
5
|
#include "duckdb/common/pair.hpp"
|
|
5
6
|
#include "duckdb/common/vector.hpp"
|
|
6
7
|
#include "duckdb/function/scalar/nested_functions.hpp"
|
|
@@ -11,8 +12,7 @@ namespace duckdb {
|
|
|
11
12
|
template <class T>
|
|
12
13
|
bool StringEnumCastLoop(const string_t *source_data, ValidityMask &source_mask, const LogicalType &source_type,
|
|
13
14
|
T *result_data, ValidityMask &result_mask, const LogicalType &result_type, idx_t count,
|
|
14
|
-
|
|
15
|
-
bool all_converted = true;
|
|
15
|
+
VectorTryCastData &vector_cast_data, const SelectionVector *sel) {
|
|
16
16
|
for (idx_t i = 0; i < count; i++) {
|
|
17
17
|
idx_t source_idx = i;
|
|
18
18
|
if (sel) {
|
|
@@ -21,17 +21,16 @@ bool StringEnumCastLoop(const string_t *source_data, ValidityMask &source_mask,
|
|
|
21
21
|
if (source_mask.RowIsValid(source_idx)) {
|
|
22
22
|
auto pos = EnumType::GetPos(result_type, source_data[source_idx]);
|
|
23
23
|
if (pos == -1) {
|
|
24
|
-
result_data[i] =
|
|
25
|
-
|
|
26
|
-
result_mask, i, error_message, all_converted);
|
|
24
|
+
result_data[i] = HandleVectorCastError::Operation<T>(
|
|
25
|
+
CastExceptionText<string_t, T>(source_data[source_idx]), result_mask, i, vector_cast_data);
|
|
27
26
|
} else {
|
|
28
|
-
result_data[i] = pos;
|
|
27
|
+
result_data[i] = UnsafeNumericCast<T>(pos);
|
|
29
28
|
}
|
|
30
29
|
} else {
|
|
31
30
|
result_mask.SetInvalid(i);
|
|
32
31
|
}
|
|
33
32
|
}
|
|
34
|
-
return all_converted;
|
|
33
|
+
return vector_cast_data.all_converted;
|
|
35
34
|
}
|
|
36
35
|
|
|
37
36
|
template <class T>
|
|
@@ -46,8 +45,9 @@ bool StringEnumCast(Vector &source, Vector &result, idx_t count, CastParameters
|
|
|
46
45
|
auto result_data = ConstantVector::GetData<T>(result);
|
|
47
46
|
auto &result_mask = ConstantVector::Validity(result);
|
|
48
47
|
|
|
48
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
49
49
|
return StringEnumCastLoop(source_data, source_mask, source.GetType(), result_data, result_mask,
|
|
50
|
-
result.GetType(), 1,
|
|
50
|
+
result.GetType(), 1, vector_cast_data, nullptr);
|
|
51
51
|
}
|
|
52
52
|
default: {
|
|
53
53
|
UnifiedVectorFormat vdata;
|
|
@@ -61,8 +61,9 @@ bool StringEnumCast(Vector &source, Vector &result, idx_t count, CastParameters
|
|
|
61
61
|
auto result_data = FlatVector::GetData<T>(result);
|
|
62
62
|
auto &result_mask = FlatVector::Validity(result);
|
|
63
63
|
|
|
64
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
64
65
|
return StringEnumCastLoop(source_data, source_mask, source.GetType(), result_data, result_mask,
|
|
65
|
-
result.GetType(), count,
|
|
66
|
+
result.GetType(), count, vector_cast_data, source_sel);
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
69
|
}
|
|
@@ -144,7 +145,7 @@ bool VectorStringToList::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
144
145
|
auto list_data = ListVector::GetData(result);
|
|
145
146
|
auto child_data = FlatVector::GetData<string_t>(varchar_vector);
|
|
146
147
|
|
|
147
|
-
|
|
148
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
148
149
|
idx_t total = 0;
|
|
149
150
|
for (idx_t i = 0; i < count; i++) {
|
|
150
151
|
idx_t idx = i;
|
|
@@ -160,7 +161,7 @@ bool VectorStringToList::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
160
161
|
if (!VectorStringToList::SplitStringList(source_data[idx], child_data, total, varchar_vector)) {
|
|
161
162
|
string text = "Type VARCHAR with value '" + source_data[idx].GetString() +
|
|
162
163
|
"' can't be cast to the destination type LIST";
|
|
163
|
-
HandleVectorCastError::Operation<string_t>(text, result_mask, idx,
|
|
164
|
+
HandleVectorCastError::Operation<string_t>(text, result_mask, idx, vector_cast_data);
|
|
164
165
|
}
|
|
165
166
|
list_data[i].length = total - list_data[i].offset; // length is the amount of parts coming from this string
|
|
166
167
|
}
|
|
@@ -169,8 +170,25 @@ bool VectorStringToList::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
169
170
|
auto &result_child = ListVector::GetEntry(result);
|
|
170
171
|
auto &cast_data = parameters.cast_data->Cast<ListBoundCastData>();
|
|
171
172
|
CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data, parameters.local_state);
|
|
172
|
-
|
|
173
|
-
|
|
173
|
+
bool all_converted =
|
|
174
|
+
cast_data.child_cast_info.function(varchar_vector, result_child, total_list_size, child_parameters) &&
|
|
175
|
+
vector_cast_data.all_converted;
|
|
176
|
+
if (!all_converted && parameters.nullify_parent) {
|
|
177
|
+
UnifiedVectorFormat inserted_column_data;
|
|
178
|
+
result_child.ToUnifiedFormat(total_list_size, inserted_column_data);
|
|
179
|
+
UnifiedVectorFormat parse_column_data;
|
|
180
|
+
varchar_vector.ToUnifiedFormat(total_list_size, parse_column_data);
|
|
181
|
+
// Something went wrong in the conversion, we need to nullify the parent
|
|
182
|
+
for (idx_t i = 0; i < count; i++) {
|
|
183
|
+
for (idx_t j = list_data[i].offset; j < list_data[i].offset + list_data[i].length; j++) {
|
|
184
|
+
if (!inserted_column_data.validity.RowIsValid(j) && parse_column_data.validity.RowIsValid(j)) {
|
|
185
|
+
result_mask.SetInvalid(i);
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return all_converted;
|
|
174
192
|
}
|
|
175
193
|
|
|
176
194
|
static LogicalType InitVarcharStructType(const LogicalType &target) {
|
|
@@ -204,7 +222,7 @@ bool VectorStringToStruct::StringToNestedTypeCastLoop(const string_t *source_dat
|
|
|
204
222
|
child_masks[child_idx].get().SetAllInvalid(count);
|
|
205
223
|
}
|
|
206
224
|
|
|
207
|
-
|
|
225
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
208
226
|
for (idx_t i = 0; i < count; i++) {
|
|
209
227
|
idx_t idx = i;
|
|
210
228
|
if (sel) {
|
|
@@ -221,9 +239,9 @@ bool VectorStringToStruct::StringToNestedTypeCastLoop(const string_t *source_dat
|
|
|
221
239
|
string text = "Type VARCHAR with value '" + source_data[idx].GetString() +
|
|
222
240
|
"' can't be cast to the destination type STRUCT";
|
|
223
241
|
for (auto &child_mask : child_masks) {
|
|
224
|
-
child_mask.get().SetInvalid(
|
|
242
|
+
child_mask.get().SetInvalid(i); // some values may have already been found and set valid
|
|
225
243
|
}
|
|
226
|
-
HandleVectorCastError::Operation<string_t>(text, result_mask,
|
|
244
|
+
HandleVectorCastError::Operation<string_t>(text, result_mask, i, vector_cast_data);
|
|
227
245
|
}
|
|
228
246
|
}
|
|
229
247
|
|
|
@@ -237,10 +255,10 @@ bool VectorStringToStruct::StringToNestedTypeCastLoop(const string_t *source_dat
|
|
|
237
255
|
auto &child_cast_info = cast_data.child_cast_info[child_idx];
|
|
238
256
|
CastParameters child_parameters(parameters, child_cast_info.cast_data, lstate.local_states[child_idx]);
|
|
239
257
|
if (!child_cast_info.function(child_varchar_vector, result_child_vector, count, child_parameters)) {
|
|
240
|
-
all_converted = false;
|
|
258
|
+
vector_cast_data.all_converted = false;
|
|
241
259
|
}
|
|
242
260
|
}
|
|
243
|
-
return all_converted;
|
|
261
|
+
return vector_cast_data.all_converted;
|
|
244
262
|
}
|
|
245
263
|
|
|
246
264
|
//===--------------------------------------------------------------------===//
|
|
@@ -285,7 +303,7 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
285
303
|
ListVector::SetListSize(result, total_elements);
|
|
286
304
|
auto list_data = ListVector::GetData(result);
|
|
287
305
|
|
|
288
|
-
|
|
306
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
289
307
|
idx_t total = 0;
|
|
290
308
|
for (idx_t i = 0; i < count; i++) {
|
|
291
309
|
idx_t idx = i;
|
|
@@ -293,7 +311,7 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
293
311
|
idx = sel->get_index(i);
|
|
294
312
|
}
|
|
295
313
|
if (!source_mask.RowIsValid(idx)) {
|
|
296
|
-
result_mask.SetInvalid(
|
|
314
|
+
result_mask.SetInvalid(i);
|
|
297
315
|
continue;
|
|
298
316
|
}
|
|
299
317
|
|
|
@@ -302,8 +320,8 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
302
320
|
varchar_key_vector, varchar_val_vector)) {
|
|
303
321
|
string text = "Type VARCHAR with value '" + source_data[idx].GetString() +
|
|
304
322
|
"' can't be cast to the destination type MAP";
|
|
305
|
-
FlatVector::SetNull(result,
|
|
306
|
-
HandleVectorCastError::Operation<string_t>(text, result_mask,
|
|
323
|
+
FlatVector::SetNull(result, i, true);
|
|
324
|
+
HandleVectorCastError::Operation<string_t>(text, result_mask, i, vector_cast_data);
|
|
307
325
|
}
|
|
308
326
|
list_data[i].length = total - list_data[i].offset;
|
|
309
327
|
}
|
|
@@ -316,15 +334,15 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
316
334
|
|
|
317
335
|
CastParameters key_params(parameters, cast_data.key_cast.cast_data, lstate.key_state);
|
|
318
336
|
if (!cast_data.key_cast.function(varchar_key_vector, result_key_child, total_elements, key_params)) {
|
|
319
|
-
all_converted = false;
|
|
337
|
+
vector_cast_data.all_converted = false;
|
|
320
338
|
}
|
|
321
339
|
CastParameters val_params(parameters, cast_data.value_cast.cast_data, lstate.value_state);
|
|
322
340
|
if (!cast_data.value_cast.function(varchar_val_vector, result_val_child, total_elements, val_params)) {
|
|
323
|
-
all_converted = false;
|
|
341
|
+
vector_cast_data.all_converted = false;
|
|
324
342
|
}
|
|
325
343
|
|
|
326
344
|
auto &key_validity = FlatVector::Validity(result_key_child);
|
|
327
|
-
if (!all_converted) {
|
|
345
|
+
if (!vector_cast_data.all_converted) {
|
|
328
346
|
for (idx_t row_idx = 0; row_idx < count; row_idx++) {
|
|
329
347
|
if (!result_mask.RowIsValid(row_idx)) {
|
|
330
348
|
continue;
|
|
@@ -339,7 +357,7 @@ bool VectorStringToMap::StringToNestedTypeCastLoop(const string_t *source_data,
|
|
|
339
357
|
}
|
|
340
358
|
}
|
|
341
359
|
MapVector::MapConversionVerify(result, count);
|
|
342
|
-
return all_converted;
|
|
360
|
+
return vector_cast_data.all_converted;
|
|
343
361
|
}
|
|
344
362
|
|
|
345
363
|
//===--------------------------------------------------------------------===//
|
|
@@ -370,7 +388,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data
|
|
|
370
388
|
if (parameters.strict) {
|
|
371
389
|
throw ConversionException(msg);
|
|
372
390
|
}
|
|
373
|
-
HandleCastError::AssignError(msg, parameters
|
|
391
|
+
HandleCastError::AssignError(msg, parameters);
|
|
374
392
|
}
|
|
375
393
|
result_mask.SetInvalid(i);
|
|
376
394
|
}
|
|
@@ -380,7 +398,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data
|
|
|
380
398
|
Vector varchar_vector(LogicalType::VARCHAR, child_count);
|
|
381
399
|
auto child_data = FlatVector::GetData<string_t>(varchar_vector);
|
|
382
400
|
|
|
383
|
-
|
|
401
|
+
VectorTryCastData vector_cast_data(result, parameters);
|
|
384
402
|
idx_t total = 0;
|
|
385
403
|
for (idx_t i = 0; i < count; i++) {
|
|
386
404
|
idx_t idx = i;
|
|
@@ -404,7 +422,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data
|
|
|
404
422
|
if (!VectorStringToList::SplitStringList(source_data[idx], child_data, total, varchar_vector)) {
|
|
405
423
|
auto text = StringUtil::Format("Type VARCHAR with value '%s' can't be cast to the destination type ARRAY",
|
|
406
424
|
source_data[idx].GetString());
|
|
407
|
-
HandleVectorCastError::Operation<string_t>(text, result_mask, idx,
|
|
425
|
+
HandleVectorCastError::Operation<string_t>(text, result_mask, idx, vector_cast_data);
|
|
408
426
|
}
|
|
409
427
|
}
|
|
410
428
|
D_ASSERT(total == child_count);
|
|
@@ -414,7 +432,7 @@ bool VectorStringToArray::StringToNestedTypeCastLoop(const string_t *source_data
|
|
|
414
432
|
CastParameters child_parameters(parameters, cast_data.child_cast_info.cast_data, parameters.local_state);
|
|
415
433
|
bool cast_result = cast_data.child_cast_info.function(varchar_vector, result_child, child_count, child_parameters);
|
|
416
434
|
|
|
417
|
-
return all_lengths_match && cast_result && all_converted;
|
|
435
|
+
return all_lengths_match && cast_result && vector_cast_data.all_converted;
|
|
418
436
|
}
|
|
419
437
|
|
|
420
438
|
template <class T>
|
|
@@ -14,7 +14,7 @@ unique_ptr<BoundCastData> StructBoundCastData::BindStructToStructCast(BindCastIn
|
|
|
14
14
|
auto source_is_unnamed = StructType::IsUnnamed(source);
|
|
15
15
|
|
|
16
16
|
if (source_child_types.size() != result_child_types.size()) {
|
|
17
|
-
throw TypeMismatchException(source, target, "Cannot cast STRUCTs of different size");
|
|
17
|
+
throw TypeMismatchException(input.query_location, source, target, "Cannot cast STRUCTs of different size");
|
|
18
18
|
}
|
|
19
19
|
bool named_struct_cast = !source_is_unnamed && !target_is_unnamed;
|
|
20
20
|
case_insensitive_map_t<idx_t> target_members;
|
|
@@ -36,7 +36,7 @@ unique_ptr<BoundCastData> StructBoundCastData::BindStructToStructCast(BindCastIn
|
|
|
36
36
|
// named struct cast - find corresponding member in target
|
|
37
37
|
auto entry = target_members.find(source_child.first);
|
|
38
38
|
if (entry == target_members.end()) {
|
|
39
|
-
throw TypeMismatchException(source, target,
|
|
39
|
+
throw TypeMismatchException(input.query_location, source, target,
|
|
40
40
|
"Cannot cast STRUCTs - element \"" + source_child.first +
|
|
41
41
|
"\" in source struct was not found in target struct");
|
|
42
42
|
}
|