duckdb 0.10.1-dev22.0 → 0.10.1-dev26.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/binding.gyp +4 -1
- package/package.json +1 -1
- 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
package/binding.gyp
CHANGED
package/package.json
CHANGED
|
@@ -246,7 +246,7 @@ struct ICUStrptime : public ICUDateFunc {
|
|
|
246
246
|
TailPatch(name, db, types);
|
|
247
247
|
}
|
|
248
248
|
|
|
249
|
-
static bool
|
|
249
|
+
static bool VarcharToTimestampTZ(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
250
250
|
auto &cast_data = parameters.cast_data->Cast<CastData>();
|
|
251
251
|
auto &info = cast_data.info->Cast<BindData>();
|
|
252
252
|
CalendarPtr cal(info.calendar->clone());
|
|
@@ -260,7 +260,7 @@ struct ICUStrptime : public ICUDateFunc {
|
|
|
260
260
|
bool has_offset = false;
|
|
261
261
|
if (!Timestamp::TryConvertTimestampTZ(str, len, result, has_offset, tz)) {
|
|
262
262
|
auto msg = Timestamp::ConversionError(string(str, len));
|
|
263
|
-
HandleCastError::AssignError(msg, parameters
|
|
263
|
+
HandleCastError::AssignError(msg, parameters);
|
|
264
264
|
mask.SetInvalid(idx);
|
|
265
265
|
} else if (!has_offset) {
|
|
266
266
|
// Convert parts to a TZ (default or parsed) if no offset was provided
|
|
@@ -280,15 +280,56 @@ struct ICUStrptime : public ICUDateFunc {
|
|
|
280
280
|
return true;
|
|
281
281
|
}
|
|
282
282
|
|
|
283
|
+
static bool VarcharToTimeTZ(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
284
|
+
auto &cast_data = parameters.cast_data->Cast<CastData>();
|
|
285
|
+
auto &info = cast_data.info->Cast<BindData>();
|
|
286
|
+
CalendarPtr cal(info.calendar->clone());
|
|
287
|
+
|
|
288
|
+
UnaryExecutor::ExecuteWithNulls<string_t, dtime_tz_t>(
|
|
289
|
+
source, result, count, [&](string_t input, ValidityMask &mask, idx_t idx) {
|
|
290
|
+
dtime_tz_t result;
|
|
291
|
+
const auto str = input.GetData();
|
|
292
|
+
const auto len = input.GetSize();
|
|
293
|
+
bool has_offset = false;
|
|
294
|
+
idx_t pos = 0;
|
|
295
|
+
if (!Time::TryConvertTimeTZ(str, len, pos, result, has_offset, false)) {
|
|
296
|
+
auto msg = Time::ConversionError(string(str, len));
|
|
297
|
+
HandleCastError::AssignError(msg, parameters);
|
|
298
|
+
mask.SetInvalid(idx);
|
|
299
|
+
} else if (!has_offset) {
|
|
300
|
+
// Convert parts to a TZ (default or parsed) if no offset was provided
|
|
301
|
+
auto calendar = cal.get();
|
|
302
|
+
|
|
303
|
+
// Extract the offset from the calendar
|
|
304
|
+
auto offset = ExtractField(calendar, UCAL_ZONE_OFFSET);
|
|
305
|
+
offset += ExtractField(calendar, UCAL_DST_OFFSET);
|
|
306
|
+
offset /= Interval::MSECS_PER_SEC;
|
|
307
|
+
|
|
308
|
+
// Apply it to the offset +00 time we parsed.
|
|
309
|
+
result = dtime_tz_t(result.time(), offset);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return result;
|
|
313
|
+
});
|
|
314
|
+
return true;
|
|
315
|
+
}
|
|
316
|
+
|
|
283
317
|
static BoundCastInfo BindCastFromVarchar(BindCastInput &input, const LogicalType &source,
|
|
284
318
|
const LogicalType &target) {
|
|
285
319
|
if (!input.context) {
|
|
286
|
-
throw InternalException("Missing context for VARCHAR to TIMESTAMPTZ cast.");
|
|
320
|
+
throw InternalException("Missing context for VARCHAR to TIME/TIMESTAMPTZ cast.");
|
|
287
321
|
}
|
|
288
322
|
|
|
289
323
|
auto cast_data = make_uniq<CastData>(make_uniq<BindData>(*input.context));
|
|
290
324
|
|
|
291
|
-
|
|
325
|
+
switch (target.id()) {
|
|
326
|
+
case LogicalTypeId::TIMESTAMP_TZ:
|
|
327
|
+
return BoundCastInfo(VarcharToTimestampTZ, std::move(cast_data));
|
|
328
|
+
case LogicalTypeId::TIME_TZ:
|
|
329
|
+
return BoundCastInfo(VarcharToTimeTZ, std::move(cast_data));
|
|
330
|
+
default:
|
|
331
|
+
throw InternalException("Unsupported type for VARCHAR to TIME/TIMESTAMPTZ cast.");
|
|
332
|
+
}
|
|
292
333
|
}
|
|
293
334
|
|
|
294
335
|
static void AddCasts(DatabaseInstance &db) {
|
|
@@ -296,6 +337,7 @@ struct ICUStrptime : public ICUDateFunc {
|
|
|
296
337
|
auto &casts = config.GetCastFunctions();
|
|
297
338
|
|
|
298
339
|
casts.RegisterCastFunction(LogicalType::VARCHAR, LogicalType::TIMESTAMP_TZ, BindCastFromVarchar);
|
|
340
|
+
casts.RegisterCastFunction(LogicalType::VARCHAR, LogicalType::TIME_TZ, BindCastFromVarchar);
|
|
299
341
|
}
|
|
300
342
|
};
|
|
301
343
|
|
|
@@ -90,6 +90,11 @@ struct ICUTableRange {
|
|
|
90
90
|
|
|
91
91
|
auto &inputs = input.inputs;
|
|
92
92
|
D_ASSERT(inputs.size() == 3);
|
|
93
|
+
for (const auto &value : inputs) {
|
|
94
|
+
if (value.IsNull()) {
|
|
95
|
+
throw BinderException("RANGE with NULL bounds is not supported");
|
|
96
|
+
}
|
|
97
|
+
}
|
|
93
98
|
result->start = inputs[0].GetValue<timestamp_t>();
|
|
94
99
|
result->end = inputs[1].GetValue<timestamp_t>();
|
|
95
100
|
result->increment = inputs[2].GetValue<interval_t>();
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#include "duckdb/parser/parsed_data/create_table_function_info.hpp"
|
|
9
9
|
#include "include/icu-datefunc.hpp"
|
|
10
10
|
#include "duckdb/transaction/meta_transaction.hpp"
|
|
11
|
+
#include "duckdb/common/operator/cast_operators.hpp"
|
|
11
12
|
|
|
12
13
|
namespace duckdb {
|
|
13
14
|
|
|
@@ -138,13 +139,23 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc {
|
|
|
138
139
|
return GetTime(calendar, micros);
|
|
139
140
|
}
|
|
140
141
|
|
|
142
|
+
struct CastTimestampUsToUs {
|
|
143
|
+
template <class SRC, class DST>
|
|
144
|
+
static inline DST Operation(SRC input) {
|
|
145
|
+
// no-op
|
|
146
|
+
return input;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
template <class OP>
|
|
141
151
|
static bool CastFromNaive(Vector &source, Vector &result, idx_t count, CastParameters ¶meters) {
|
|
142
152
|
auto &cast_data = parameters.cast_data->Cast<CastData>();
|
|
143
153
|
auto &info = cast_data.info->Cast<BindData>();
|
|
144
154
|
CalendarPtr calendar(info.calendar->clone());
|
|
145
155
|
|
|
146
|
-
UnaryExecutor::Execute<timestamp_t, timestamp_t>(
|
|
147
|
-
|
|
156
|
+
UnaryExecutor::Execute<timestamp_t, timestamp_t>(source, result, count, [&](timestamp_t input) {
|
|
157
|
+
return Operation(calendar.get(), OP::template Operation<timestamp_t, timestamp_t>(input));
|
|
158
|
+
});
|
|
148
159
|
return true;
|
|
149
160
|
}
|
|
150
161
|
|
|
@@ -154,8 +165,18 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc {
|
|
|
154
165
|
}
|
|
155
166
|
|
|
156
167
|
auto cast_data = make_uniq<CastData>(make_uniq<BindData>(*input.context));
|
|
157
|
-
|
|
158
|
-
|
|
168
|
+
switch (source.id()) {
|
|
169
|
+
case LogicalTypeId::TIMESTAMP:
|
|
170
|
+
return BoundCastInfo(CastFromNaive<CastTimestampUsToUs>, std::move(cast_data));
|
|
171
|
+
case LogicalTypeId::TIMESTAMP_MS:
|
|
172
|
+
return BoundCastInfo(CastFromNaive<CastTimestampMsToUs>, std::move(cast_data));
|
|
173
|
+
case LogicalTypeId::TIMESTAMP_NS:
|
|
174
|
+
return BoundCastInfo(CastFromNaive<CastTimestampNsToUs>, std::move(cast_data));
|
|
175
|
+
case LogicalTypeId::TIMESTAMP_SEC:
|
|
176
|
+
return BoundCastInfo(CastFromNaive<CastTimestampSecToUs>, std::move(cast_data));
|
|
177
|
+
default:
|
|
178
|
+
throw InternalException("Type %s not handled in BindCastFromNaive", LogicalTypeIdToString(source.id()));
|
|
179
|
+
}
|
|
159
180
|
}
|
|
160
181
|
|
|
161
182
|
static void AddCasts(DatabaseInstance &db) {
|
|
@@ -163,6 +184,9 @@ struct ICUFromNaiveTimestamp : public ICUDateFunc {
|
|
|
163
184
|
auto &casts = config.GetCastFunctions();
|
|
164
185
|
|
|
165
186
|
casts.RegisterCastFunction(LogicalType::TIMESTAMP, LogicalType::TIMESTAMP_TZ, BindCastFromNaive);
|
|
187
|
+
casts.RegisterCastFunction(LogicalType::TIMESTAMP_MS, LogicalType::TIMESTAMP_TZ, BindCastFromNaive);
|
|
188
|
+
casts.RegisterCastFunction(LogicalType::TIMESTAMP_NS, LogicalType::TIMESTAMP_TZ, BindCastFromNaive);
|
|
189
|
+
casts.RegisterCastFunction(LogicalType::TIMESTAMP_S, LogicalType::TIMESTAMP_TZ, BindCastFromNaive);
|
|
166
190
|
}
|
|
167
191
|
};
|
|
168
192
|
|
|
@@ -304,11 +304,11 @@ idx_t BufferedJSONReader::GetLineNumber(idx_t buf_index, idx_t line_or_object_in
|
|
|
304
304
|
line += buffer_line_or_object_counts[b_idx];
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
307
|
+
if (can_throw) {
|
|
308
|
+
thrown = true;
|
|
309
|
+
// SQL uses 1-based indexing so I guess we will do that in our exception here as well
|
|
310
|
+
return line + 1;
|
|
311
|
+
}
|
|
312
312
|
}
|
|
313
313
|
TaskScheduler::YieldThread();
|
|
314
314
|
}
|
|
@@ -331,6 +331,7 @@ void BufferedJSONReader::ThrowTransformError(idx_t buf_index, idx_t line_or_obje
|
|
|
331
331
|
}
|
|
332
332
|
|
|
333
333
|
double BufferedJSONReader::GetProgress() const {
|
|
334
|
+
lock_guard<mutex> guard(lock);
|
|
334
335
|
if (HasFileHandle()) {
|
|
335
336
|
return 100.0 - 100.0 * double(file_handle->Remaining()) / double(file_handle->FileSize());
|
|
336
337
|
} else {
|
|
@@ -90,9 +90,9 @@ private:
|
|
|
90
90
|
|
|
91
91
|
//! Read properties
|
|
92
92
|
idx_t read_position;
|
|
93
|
-
idx_t requested_reads;
|
|
93
|
+
atomic<idx_t> requested_reads;
|
|
94
94
|
atomic<idx_t> actual_reads;
|
|
95
|
-
bool last_read_requested;
|
|
95
|
+
atomic<bool> last_read_requested;
|
|
96
96
|
|
|
97
97
|
//! Cached buffers for resetting when reading stream
|
|
98
98
|
vector<AllocatedData> cached_buffers;
|
|
@@ -161,7 +161,7 @@ private:
|
|
|
161
161
|
bool thrown;
|
|
162
162
|
|
|
163
163
|
public:
|
|
164
|
-
mutex lock;
|
|
164
|
+
mutable mutex lock;
|
|
165
165
|
MultiFileReaderData reader_data;
|
|
166
166
|
};
|
|
167
167
|
|
|
@@ -61,6 +61,9 @@ static LogicalType GetJSONType(StructNames &const_struct_names, const LogicalTyp
|
|
|
61
61
|
// The nested types need to conform as well
|
|
62
62
|
case LogicalTypeId::LIST:
|
|
63
63
|
return LogicalType::LIST(GetJSONType(const_struct_names, ListType::GetChildType(type)));
|
|
64
|
+
case LogicalTypeId::ARRAY:
|
|
65
|
+
return LogicalType::ARRAY(GetJSONType(const_struct_names, ArrayType::GetChildType(type)),
|
|
66
|
+
ArrayType::GetSize(type));
|
|
64
67
|
// Struct and MAP are treated as JSON values
|
|
65
68
|
case LogicalTypeId::STRUCT: {
|
|
66
69
|
child_list_t<LogicalType> child_types;
|
|
@@ -435,6 +438,9 @@ static void CreateValuesList(const StructNames &names, yyjson_mut_doc *doc, yyjs
|
|
|
435
438
|
|
|
436
439
|
static void CreateValuesArray(const StructNames &names, yyjson_mut_doc *doc, yyjson_mut_val *vals[], Vector &value_v,
|
|
437
440
|
idx_t count) {
|
|
441
|
+
|
|
442
|
+
value_v.Flatten(count);
|
|
443
|
+
|
|
438
444
|
// Initialize array for the nested values
|
|
439
445
|
auto &child_v = ArrayVector::GetEntry(value_v);
|
|
440
446
|
auto array_size = ArrayType::GetSize(value_v.GetType());
|
|
@@ -13,13 +13,13 @@
|
|
|
13
13
|
|
|
14
14
|
namespace duckdb {
|
|
15
15
|
|
|
16
|
-
JSONTransformOptions::JSONTransformOptions() {
|
|
16
|
+
JSONTransformOptions::JSONTransformOptions() : parameters(false, &error_message) {
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
JSONTransformOptions::JSONTransformOptions(bool strict_cast_p, bool error_duplicate_key_p, bool error_missing_key_p,
|
|
20
20
|
bool error_unkown_key_p)
|
|
21
21
|
: strict_cast(strict_cast_p), error_duplicate_key(error_duplicate_key_p), error_missing_key(error_missing_key_p),
|
|
22
|
-
error_unknown_key(error_unkown_key_p) {
|
|
22
|
+
error_unknown_key(error_unkown_key_p), parameters(false, &error_message) {
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
//! Forward declaration for recursion
|
|
@@ -135,7 +135,7 @@ static inline bool GetValueDecimal(yyjson_val *val, T &result, uint8_t w, uint8_
|
|
|
135
135
|
bool success;
|
|
136
136
|
switch (unsafe_yyjson_get_tag(val)) {
|
|
137
137
|
case YYJSON_TYPE_STR | YYJSON_SUBTYPE_NONE:
|
|
138
|
-
success = OP::template Operation<string_t, T>(GetString(val), result,
|
|
138
|
+
success = OP::template Operation<string_t, T>(GetString(val), result, options.parameters, w, s);
|
|
139
139
|
break;
|
|
140
140
|
case YYJSON_TYPE_ARR | YYJSON_SUBTYPE_NONE:
|
|
141
141
|
case YYJSON_TYPE_OBJ | YYJSON_SUBTYPE_NONE:
|
|
@@ -143,17 +143,16 @@ static inline bool GetValueDecimal(yyjson_val *val, T &result, uint8_t w, uint8_
|
|
|
143
143
|
break;
|
|
144
144
|
case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_TRUE:
|
|
145
145
|
case YYJSON_TYPE_BOOL | YYJSON_SUBTYPE_FALSE:
|
|
146
|
-
success = OP::template Operation<bool, T>(unsafe_yyjson_get_bool(val), result,
|
|
146
|
+
success = OP::template Operation<bool, T>(unsafe_yyjson_get_bool(val), result, options.parameters, w, s);
|
|
147
147
|
break;
|
|
148
148
|
case YYJSON_TYPE_NUM | YYJSON_SUBTYPE_UINT:
|
|
149
|
-
success =
|
|
150
|
-
OP::template Operation<uint64_t, T>(unsafe_yyjson_get_uint(val), result, &options.error_message, w, s);
|
|
149
|
+
success = OP::template Operation<uint64_t, T>(unsafe_yyjson_get_uint(val), result, options.parameters, w, s);
|
|
151
150
|
break;
|
|
152
151
|
case YYJSON_TYPE_NUM | YYJSON_SUBTYPE_SINT:
|
|
153
|
-
success = OP::template Operation<int64_t, T>(unsafe_yyjson_get_sint(val), result,
|
|
152
|
+
success = OP::template Operation<int64_t, T>(unsafe_yyjson_get_sint(val), result, options.parameters, w, s);
|
|
154
153
|
break;
|
|
155
154
|
case YYJSON_TYPE_NUM | YYJSON_SUBTYPE_REAL:
|
|
156
|
-
success = OP::template Operation<double, T>(unsafe_yyjson_get_real(val), result,
|
|
155
|
+
success = OP::template Operation<double, T>(unsafe_yyjson_get_real(val), result, options.parameters, w, s);
|
|
157
156
|
break;
|
|
158
157
|
default:
|
|
159
158
|
throw InternalException("Unknown yyjson tag in GetValueString");
|
|
@@ -982,7 +981,7 @@ static bool JSONToAnyCast(Vector &source, Vector &result, idx_t count, CastParam
|
|
|
982
981
|
|
|
983
982
|
auto success = TransformFunctionInternal(source, count, result, alc, options);
|
|
984
983
|
if (!success) {
|
|
985
|
-
HandleCastError::AssignError(options.error_message, parameters
|
|
984
|
+
HandleCastError::AssignError(options.error_message, parameters);
|
|
986
985
|
}
|
|
987
986
|
return success;
|
|
988
987
|
}
|
|
@@ -224,8 +224,7 @@ static bool CastVarcharToJSON(Vector &source, Vector &result, idx_t count, CastP
|
|
|
224
224
|
if (!doc) {
|
|
225
225
|
mask.SetInvalid(idx);
|
|
226
226
|
if (success) {
|
|
227
|
-
HandleCastError::AssignError(JSONCommon::FormatParseError(data, length, error),
|
|
228
|
-
parameters.error_message);
|
|
227
|
+
HandleCastError::AssignError(JSONCommon::FormatParseError(data, length, error), parameters);
|
|
229
228
|
success = false;
|
|
230
229
|
}
|
|
231
230
|
}
|
|
@@ -569,6 +569,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
|
|
|
569
569
|
if (file_done) {
|
|
570
570
|
lock_guard<mutex> guard(gstate.lock);
|
|
571
571
|
TryIncrementFileIndex(gstate);
|
|
572
|
+
lock_guard<mutex> reader_guard(current_reader->lock);
|
|
572
573
|
current_reader->GetFileHandle().Close();
|
|
573
574
|
}
|
|
574
575
|
|
|
@@ -1004,7 +1004,23 @@ idx_t CastColumnReader::Read(uint64_t num_values, parquet_filter_t &filter, data
|
|
|
1004
1004
|
}
|
|
1005
1005
|
}
|
|
1006
1006
|
}
|
|
1007
|
-
|
|
1007
|
+
string error_message;
|
|
1008
|
+
bool all_succeeded = VectorOperations::DefaultTryCast(intermediate_vector, result, amount, &error_message);
|
|
1009
|
+
if (!all_succeeded) {
|
|
1010
|
+
string extended_error;
|
|
1011
|
+
extended_error =
|
|
1012
|
+
StringUtil::Format("In file \"%s\" the column \"%s\" has type %s, but we are trying to read it as type %s.",
|
|
1013
|
+
reader.file_name, schema.name, intermediate_vector.GetType(), result.GetType());
|
|
1014
|
+
extended_error += "\nThis can happen when reading multiple Parquet files. The schema information is taken from "
|
|
1015
|
+
"the first Parquet file by default. Possible solutions:\n";
|
|
1016
|
+
extended_error += "* Enable the union_by_name=True option to combine the schema of all Parquet files "
|
|
1017
|
+
"(duckdb.org/docs/data/multiple_files/combining_schemas)\n";
|
|
1018
|
+
extended_error += "* Use a COPY statement to automatically derive types from an existing table.";
|
|
1019
|
+
throw ConversionException(
|
|
1020
|
+
"In Parquet reader of file \"%s\": failed to cast column \"%s\" from type %s to %s: %s\n\n%s",
|
|
1021
|
+
reader.file_name, schema.name, intermediate_vector.GetType(), result.GetType(), error_message,
|
|
1022
|
+
extended_error);
|
|
1023
|
+
}
|
|
1008
1024
|
return amount;
|
|
1009
1025
|
}
|
|
1010
1026
|
|
|
@@ -176,7 +176,7 @@ void RleBpEncoder::FinishWrite(WriteStream &writer) {
|
|
|
176
176
|
ColumnWriter::ColumnWriter(ParquetWriter &writer, idx_t schema_idx, vector<string> schema_path_p, idx_t max_repeat,
|
|
177
177
|
idx_t max_define, bool can_have_nulls)
|
|
178
178
|
: writer(writer), schema_idx(schema_idx), schema_path(std::move(schema_path_p)), max_repeat(max_repeat),
|
|
179
|
-
max_define(max_define), can_have_nulls(can_have_nulls)
|
|
179
|
+
max_define(max_define), can_have_nulls(can_have_nulls) {
|
|
180
180
|
}
|
|
181
181
|
ColumnWriter::~ColumnWriter() {
|
|
182
182
|
}
|
|
@@ -254,7 +254,7 @@ void ColumnWriter::HandleDefineLevels(ColumnWriterState &state, ColumnWriterStat
|
|
|
254
254
|
if (!can_have_nulls) {
|
|
255
255
|
throw IOException("Parquet writer: map key column is not allowed to contain NULL values");
|
|
256
256
|
}
|
|
257
|
-
null_count++;
|
|
257
|
+
state.null_count++;
|
|
258
258
|
state.definition_levels.push_back(null_value);
|
|
259
259
|
}
|
|
260
260
|
if (parent->is_empty.empty() || !parent->is_empty[current_index]) {
|
|
@@ -270,7 +270,7 @@ void ColumnWriter::HandleDefineLevels(ColumnWriterState &state, ColumnWriterStat
|
|
|
270
270
|
if (!can_have_nulls) {
|
|
271
271
|
throw IOException("Parquet writer: map key column is not allowed to contain NULL values");
|
|
272
272
|
}
|
|
273
|
-
null_count++;
|
|
273
|
+
state.null_count++;
|
|
274
274
|
state.definition_levels.push_back(null_value);
|
|
275
275
|
}
|
|
276
276
|
}
|
|
@@ -285,7 +285,7 @@ public:
|
|
|
285
285
|
public:
|
|
286
286
|
template <class TARGET>
|
|
287
287
|
TARGET &Cast() {
|
|
288
|
-
|
|
288
|
+
DynamicCastCheck<TARGET>(this);
|
|
289
289
|
return reinterpret_cast<TARGET &>(*this);
|
|
290
290
|
}
|
|
291
291
|
template <class TARGET>
|
|
@@ -614,7 +614,7 @@ void BasicColumnWriter::Write(ColumnWriterState &state_p, Vector &vector, idx_t
|
|
|
614
614
|
void BasicColumnWriter::SetParquetStatistics(BasicColumnWriterState &state,
|
|
615
615
|
duckdb_parquet::format::ColumnChunk &column_chunk) {
|
|
616
616
|
if (max_repeat == 0) {
|
|
617
|
-
column_chunk.meta_data.statistics.null_count = null_count;
|
|
617
|
+
column_chunk.meta_data.statistics.null_count = NumericCast<int64_t>(state.null_count);
|
|
618
618
|
column_chunk.meta_data.statistics.__isset.null_count = true;
|
|
619
619
|
column_chunk.meta_data.__isset.statistics = true;
|
|
620
620
|
}
|
|
@@ -663,19 +663,17 @@ void BasicColumnWriter::FinalizeWrite(ColumnWriterState &state_p) {
|
|
|
663
663
|
|
|
664
664
|
auto &column_writer = writer.GetWriter();
|
|
665
665
|
auto start_offset = column_writer.GetTotalWritten();
|
|
666
|
-
auto page_offset = start_offset;
|
|
667
666
|
// flush the dictionary
|
|
668
667
|
if (HasDictionary(state)) {
|
|
669
668
|
column_chunk.meta_data.statistics.distinct_count = DictionarySize(state);
|
|
670
669
|
column_chunk.meta_data.statistics.__isset.distinct_count = true;
|
|
671
|
-
column_chunk.meta_data.dictionary_page_offset =
|
|
670
|
+
column_chunk.meta_data.dictionary_page_offset = start_offset;
|
|
672
671
|
column_chunk.meta_data.__isset.dictionary_page_offset = true;
|
|
673
672
|
FlushDictionary(state, state.stats_state.get());
|
|
674
|
-
page_offset += state.write_info[0].compressed_size;
|
|
675
673
|
}
|
|
676
674
|
|
|
677
675
|
// record the start position of the pages for this column
|
|
678
|
-
column_chunk.meta_data.data_page_offset =
|
|
676
|
+
column_chunk.meta_data.data_page_offset = column_writer.GetTotalWritten();
|
|
679
677
|
SetParquetStatistics(state, column_chunk);
|
|
680
678
|
|
|
681
679
|
// write the individual pages to disk
|
|
@@ -790,14 +788,14 @@ struct ParquetCastOperator : public BaseParquetOperator {
|
|
|
790
788
|
struct ParquetTimestampNSOperator : public BaseParquetOperator {
|
|
791
789
|
template <class SRC, class TGT>
|
|
792
790
|
static TGT Operation(SRC input) {
|
|
793
|
-
return Timestamp::
|
|
791
|
+
return Timestamp::FromEpochNanoSecondsPossiblyInfinite(input).value;
|
|
794
792
|
}
|
|
795
793
|
};
|
|
796
794
|
|
|
797
795
|
struct ParquetTimestampSOperator : public BaseParquetOperator {
|
|
798
796
|
template <class SRC, class TGT>
|
|
799
797
|
static TGT Operation(SRC input) {
|
|
800
|
-
return Timestamp::
|
|
798
|
+
return Timestamp::FromEpochSecondsPossiblyInfinite(input).value;
|
|
801
799
|
}
|
|
802
800
|
};
|
|
803
801
|
|
|
@@ -1687,7 +1685,7 @@ void StructColumnWriter::FinalizeWrite(ColumnWriterState &state_p) {
|
|
|
1687
1685
|
auto &state = state_p.Cast<StructColumnWriterState>();
|
|
1688
1686
|
for (idx_t child_idx = 0; child_idx < child_writers.size(); child_idx++) {
|
|
1689
1687
|
// we add the null count of the struct to the null count of the children
|
|
1690
|
-
|
|
1688
|
+
state.child_states[child_idx]->null_count += state_p.null_count;
|
|
1691
1689
|
child_writers[child_idx]->FinalizeWrite(*state.child_states[child_idx]);
|
|
1692
1690
|
}
|
|
1693
1691
|
}
|
|
@@ -1752,6 +1750,40 @@ void ListColumnWriter::FinalizeAnalyze(ColumnWriterState &state_p) {
|
|
|
1752
1750
|
child_writer->FinalizeAnalyze(*state.child_state);
|
|
1753
1751
|
}
|
|
1754
1752
|
|
|
1753
|
+
idx_t GetConsecutiveChildList(Vector &list, Vector &result, idx_t offset, idx_t count) {
|
|
1754
|
+
// returns a consecutive child list that fully flattens and repeats all required elements
|
|
1755
|
+
auto &validity = FlatVector::Validity(list);
|
|
1756
|
+
auto list_entries = FlatVector::GetData<list_entry_t>(list);
|
|
1757
|
+
bool is_consecutive = true;
|
|
1758
|
+
idx_t total_length = 0;
|
|
1759
|
+
for (idx_t c = offset; c < offset + count; c++) {
|
|
1760
|
+
if (!validity.RowIsValid(c)) {
|
|
1761
|
+
continue;
|
|
1762
|
+
}
|
|
1763
|
+
if (list_entries[c].offset != total_length) {
|
|
1764
|
+
is_consecutive = false;
|
|
1765
|
+
}
|
|
1766
|
+
total_length += list_entries[c].length;
|
|
1767
|
+
}
|
|
1768
|
+
if (is_consecutive) {
|
|
1769
|
+
// already consecutive - leave it as-is
|
|
1770
|
+
return total_length;
|
|
1771
|
+
}
|
|
1772
|
+
SelectionVector sel(total_length);
|
|
1773
|
+
idx_t index = 0;
|
|
1774
|
+
for (idx_t c = offset; c < offset + count; c++) {
|
|
1775
|
+
if (!validity.RowIsValid(c)) {
|
|
1776
|
+
continue;
|
|
1777
|
+
}
|
|
1778
|
+
for (idx_t k = 0; k < list_entries[c].length; k++) {
|
|
1779
|
+
sel.set_index(index++, list_entries[c].offset + k);
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
result.Slice(sel, total_length);
|
|
1783
|
+
result.Flatten(total_length);
|
|
1784
|
+
return total_length;
|
|
1785
|
+
}
|
|
1786
|
+
|
|
1755
1787
|
void ListColumnWriter::Prepare(ColumnWriterState &state_p, ColumnWriterState *parent, Vector &vector, idx_t count) {
|
|
1756
1788
|
auto &state = state_p.Cast<ListColumnWriterState>();
|
|
1757
1789
|
|
|
@@ -1805,7 +1837,7 @@ void ListColumnWriter::Prepare(ColumnWriterState &state_p, ColumnWriterState *pa
|
|
|
1805
1837
|
|
|
1806
1838
|
auto &list_child = ListVector::GetEntry(vector);
|
|
1807
1839
|
Vector child_list(list_child);
|
|
1808
|
-
auto child_length =
|
|
1840
|
+
auto child_length = GetConsecutiveChildList(vector, child_list, 0, count);
|
|
1809
1841
|
child_writer->Prepare(*state.child_state, &state_p, child_list, child_length);
|
|
1810
1842
|
}
|
|
1811
1843
|
|
|
@@ -1819,7 +1851,7 @@ void ListColumnWriter::Write(ColumnWriterState &state_p, Vector &vector, idx_t c
|
|
|
1819
1851
|
|
|
1820
1852
|
auto &list_child = ListVector::GetEntry(vector);
|
|
1821
1853
|
Vector child_list(list_child);
|
|
1822
|
-
auto child_length =
|
|
1854
|
+
auto child_length = GetConsecutiveChildList(vector, child_list, 0, count);
|
|
1823
1855
|
child_writer->Write(*state.child_state, child_list, child_length);
|
|
1824
1856
|
}
|
|
1825
1857
|
|
|
@@ -1828,9 +1860,102 @@ void ListColumnWriter::FinalizeWrite(ColumnWriterState &state_p) {
|
|
|
1828
1860
|
child_writer->FinalizeWrite(*state.child_state);
|
|
1829
1861
|
}
|
|
1830
1862
|
|
|
1863
|
+
//===--------------------------------------------------------------------===//
|
|
1864
|
+
// Array Column Writer
|
|
1865
|
+
//===--------------------------------------------------------------------===//
|
|
1866
|
+
class ArrayColumnWriter : public ListColumnWriter {
|
|
1867
|
+
public:
|
|
1868
|
+
ArrayColumnWriter(ParquetWriter &writer, idx_t schema_idx, vector<string> schema_path_p, idx_t max_repeat,
|
|
1869
|
+
idx_t max_define, unique_ptr<ColumnWriter> child_writer_p, bool can_have_nulls)
|
|
1870
|
+
: ListColumnWriter(writer, schema_idx, std::move(schema_path_p), max_repeat, max_define,
|
|
1871
|
+
std::move(child_writer_p), can_have_nulls) {
|
|
1872
|
+
}
|
|
1873
|
+
~ArrayColumnWriter() override = default;
|
|
1874
|
+
|
|
1875
|
+
public:
|
|
1876
|
+
void Analyze(ColumnWriterState &state, ColumnWriterState *parent, Vector &vector, idx_t count) override;
|
|
1877
|
+
void Prepare(ColumnWriterState &state, ColumnWriterState *parent, Vector &vector, idx_t count) override;
|
|
1878
|
+
void Write(ColumnWriterState &state, Vector &vector, idx_t count) override;
|
|
1879
|
+
};
|
|
1880
|
+
|
|
1881
|
+
void ArrayColumnWriter::Analyze(ColumnWriterState &state_p, ColumnWriterState *parent, Vector &vector, idx_t count) {
|
|
1882
|
+
auto &state = state_p.Cast<ListColumnWriterState>();
|
|
1883
|
+
auto &array_child = ArrayVector::GetEntry(vector);
|
|
1884
|
+
auto array_size = ArrayType::GetSize(vector.GetType());
|
|
1885
|
+
child_writer->Analyze(*state.child_state, &state_p, array_child, array_size * count);
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
void ArrayColumnWriter::Prepare(ColumnWriterState &state_p, ColumnWriterState *parent, Vector &vector, idx_t count) {
|
|
1889
|
+
auto &state = state_p.Cast<ListColumnWriterState>();
|
|
1890
|
+
|
|
1891
|
+
auto array_size = ArrayType::GetSize(vector.GetType());
|
|
1892
|
+
auto &validity = FlatVector::Validity(vector);
|
|
1893
|
+
|
|
1894
|
+
// write definition levels and repeats
|
|
1895
|
+
// the main difference between this and ListColumnWriter::Prepare is that we need to make sure to write out
|
|
1896
|
+
// repetition levels and definitions for the child elements of the array even if the array itself is NULL.
|
|
1897
|
+
idx_t start = 0;
|
|
1898
|
+
idx_t vcount = parent ? parent->definition_levels.size() - state.parent_index : count;
|
|
1899
|
+
idx_t vector_index = 0;
|
|
1900
|
+
for (idx_t i = start; i < vcount; i++) {
|
|
1901
|
+
idx_t parent_index = state.parent_index + i;
|
|
1902
|
+
if (parent && !parent->is_empty.empty() && parent->is_empty[parent_index]) {
|
|
1903
|
+
state.definition_levels.push_back(parent->definition_levels[parent_index]);
|
|
1904
|
+
state.repetition_levels.push_back(parent->repetition_levels[parent_index]);
|
|
1905
|
+
state.is_empty.push_back(true);
|
|
1906
|
+
continue;
|
|
1907
|
+
}
|
|
1908
|
+
auto first_repeat_level =
|
|
1909
|
+
parent && !parent->repetition_levels.empty() ? parent->repetition_levels[parent_index] : max_repeat;
|
|
1910
|
+
if (parent && parent->definition_levels[parent_index] != PARQUET_DEFINE_VALID) {
|
|
1911
|
+
state.definition_levels.push_back(parent->definition_levels[parent_index]);
|
|
1912
|
+
state.repetition_levels.push_back(first_repeat_level);
|
|
1913
|
+
state.is_empty.push_back(false);
|
|
1914
|
+
for (idx_t k = 1; k < array_size; k++) {
|
|
1915
|
+
state.repetition_levels.push_back(max_repeat + 1);
|
|
1916
|
+
state.definition_levels.push_back(parent->definition_levels[parent_index]);
|
|
1917
|
+
state.is_empty.push_back(false);
|
|
1918
|
+
}
|
|
1919
|
+
} else if (validity.RowIsValid(vector_index)) {
|
|
1920
|
+
// push the repetition levels
|
|
1921
|
+
state.definition_levels.push_back(PARQUET_DEFINE_VALID);
|
|
1922
|
+
state.is_empty.push_back(false);
|
|
1923
|
+
|
|
1924
|
+
state.repetition_levels.push_back(first_repeat_level);
|
|
1925
|
+
for (idx_t k = 1; k < array_size; k++) {
|
|
1926
|
+
state.repetition_levels.push_back(max_repeat + 1);
|
|
1927
|
+
state.definition_levels.push_back(PARQUET_DEFINE_VALID);
|
|
1928
|
+
state.is_empty.push_back(false);
|
|
1929
|
+
}
|
|
1930
|
+
} else {
|
|
1931
|
+
state.definition_levels.push_back(max_define - 1);
|
|
1932
|
+
state.repetition_levels.push_back(first_repeat_level);
|
|
1933
|
+
state.is_empty.push_back(false);
|
|
1934
|
+
for (idx_t k = 1; k < array_size; k++) {
|
|
1935
|
+
state.repetition_levels.push_back(max_repeat + 1);
|
|
1936
|
+
state.definition_levels.push_back(max_define - 1);
|
|
1937
|
+
state.is_empty.push_back(false);
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
vector_index++;
|
|
1941
|
+
}
|
|
1942
|
+
state.parent_index += vcount;
|
|
1943
|
+
|
|
1944
|
+
auto &array_child = ArrayVector::GetEntry(vector);
|
|
1945
|
+
child_writer->Prepare(*state.child_state, &state_p, array_child, count * array_size);
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
void ArrayColumnWriter::Write(ColumnWriterState &state_p, Vector &vector, idx_t count) {
|
|
1949
|
+
auto &state = state_p.Cast<ListColumnWriterState>();
|
|
1950
|
+
auto array_size = ArrayType::GetSize(vector.GetType());
|
|
1951
|
+
auto &array_child = ArrayVector::GetEntry(vector);
|
|
1952
|
+
child_writer->Write(*state.child_state, array_child, count * array_size);
|
|
1953
|
+
}
|
|
1954
|
+
|
|
1831
1955
|
//===--------------------------------------------------------------------===//
|
|
1832
1956
|
// Create Column Writer
|
|
1833
1957
|
//===--------------------------------------------------------------------===//
|
|
1958
|
+
|
|
1834
1959
|
unique_ptr<ColumnWriter> ColumnWriter::CreateWriterRecursive(vector<duckdb_parquet::format::SchemaElement> &schemas,
|
|
1835
1960
|
ParquetWriter &writer, const LogicalType &type,
|
|
1836
1961
|
const string &name, vector<string> schema_path,
|
|
@@ -1879,8 +2004,9 @@ unique_ptr<ColumnWriter> ColumnWriter::CreateWriterRecursive(vector<duckdb_parqu
|
|
|
1879
2004
|
return make_uniq<StructColumnWriter>(writer, schema_idx, std::move(schema_path), max_repeat, max_define,
|
|
1880
2005
|
std::move(child_writers), can_have_nulls);
|
|
1881
2006
|
}
|
|
1882
|
-
if (type.id() == LogicalTypeId::LIST) {
|
|
1883
|
-
auto
|
|
2007
|
+
if (type.id() == LogicalTypeId::LIST || type.id() == LogicalTypeId::ARRAY) {
|
|
2008
|
+
auto is_list = type.id() == LogicalTypeId::LIST;
|
|
2009
|
+
auto &child_type = is_list ? ListType::GetChildType(type) : ArrayType::GetChildType(type);
|
|
1884
2010
|
// set up the two schema elements for the list
|
|
1885
2011
|
// for some reason we only set the converted type in the OPTIONAL element
|
|
1886
2012
|
// first an OPTIONAL element
|
|
@@ -1907,14 +2033,19 @@ unique_ptr<ColumnWriter> ColumnWriter::CreateWriterRecursive(vector<duckdb_parqu
|
|
|
1907
2033
|
repeated_element.__isset.num_children = true;
|
|
1908
2034
|
repeated_element.__isset.type = false;
|
|
1909
2035
|
repeated_element.__isset.repetition_type = true;
|
|
1910
|
-
repeated_element.name = "list";
|
|
2036
|
+
repeated_element.name = is_list ? "list" : "array";
|
|
1911
2037
|
schemas.push_back(std::move(repeated_element));
|
|
1912
|
-
schema_path.emplace_back("list");
|
|
2038
|
+
schema_path.emplace_back(is_list ? "list" : "array");
|
|
1913
2039
|
|
|
1914
2040
|
auto child_writer = CreateWriterRecursive(schemas, writer, child_type, "element", schema_path, child_field_ids,
|
|
1915
2041
|
max_repeat + 1, max_define + 2);
|
|
1916
|
-
|
|
1917
|
-
|
|
2042
|
+
if (is_list) {
|
|
2043
|
+
return make_uniq<ListColumnWriter>(writer, schema_idx, std::move(schema_path), max_repeat, max_define,
|
|
2044
|
+
std::move(child_writer), can_have_nulls);
|
|
2045
|
+
} else {
|
|
2046
|
+
return make_uniq<ArrayColumnWriter>(writer, schema_idx, std::move(schema_path), max_repeat, max_define,
|
|
2047
|
+
std::move(child_writer), can_have_nulls);
|
|
2048
|
+
}
|
|
1918
2049
|
}
|
|
1919
2050
|
if (type.id() == LogicalTypeId::MAP) {
|
|
1920
2051
|
// map type
|