duckdb 0.10.2-dev0.0 → 0.10.2-dev3.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 +22 -18
- package/binding.gyp.in +3 -0
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu-timezone.cpp +3 -1
- package/src/duckdb/extension/icu/icu_extension.cpp +6 -2
- package/src/duckdb/extension/json/buffered_json_reader.cpp +10 -3
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
- package/src/duckdb/extension/json/include/json_scan.hpp +13 -7
- package/src/duckdb/extension/json/include/json_serializer.hpp +5 -4
- package/src/duckdb/extension/json/include/json_structure.hpp +3 -3
- package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +15 -5
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +15 -6
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +21 -20
- package/src/duckdb/extension/json/json_functions/read_json.cpp +37 -3
- package/src/duckdb/extension/json/json_functions.cpp +7 -2
- package/src/duckdb/extension/json/json_scan.cpp +57 -33
- package/src/duckdb/extension/parquet/column_reader.cpp +12 -3
- package/src/duckdb/extension/parquet/column_writer.cpp +44 -7
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +5 -1
- package/src/duckdb/extension/parquet/parquet_extension.cpp +30 -3
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
- package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -2
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +1 -1
- package/src/duckdb/src/catalog/catalog.cpp +5 -1
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +21 -5
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -9
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -7
- package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +1 -1
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -7
- package/src/duckdb/src/catalog/catalog_entry.cpp +8 -0
- package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -0
- package/src/duckdb/src/catalog/catalog_set.cpp +2 -2
- package/src/duckdb/src/catalog/default/default_functions.cpp +6 -6
- package/src/duckdb/src/catalog/default/default_schemas.cpp +1 -1
- package/src/duckdb/src/catalog/default/default_views.cpp +7 -7
- package/src/duckdb/src/catalog/dependency_catalog_set.cpp +2 -1
- package/src/duckdb/src/catalog/dependency_list.cpp +92 -8
- package/src/duckdb/src/catalog/dependency_manager.cpp +53 -68
- package/src/duckdb/src/catalog/duck_catalog.cpp +1 -1
- package/src/duckdb/src/common/adbc/adbc.cpp +287 -45
- package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -2
- package/src/duckdb/src/common/box_renderer.cpp +12 -12
- package/src/duckdb/src/common/crypto/md5.cpp +2 -1
- package/src/duckdb/src/common/enum_util.cpp +307 -1
- package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
- package/src/duckdb/src/common/enums/optimizer_type.cpp +1 -1
- package/src/duckdb/src/common/file_system.cpp +60 -13
- package/src/duckdb/src/common/filename_pattern.cpp +13 -13
- package/src/duckdb/src/common/gzip_file_system.cpp +1 -1
- package/src/duckdb/src/common/http_state.cpp +1 -1
- package/src/duckdb/src/common/local_file_system.cpp +72 -71
- package/src/duckdb/src/common/multi_file_reader.cpp +48 -28
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +13 -1
- package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +32 -13
- package/src/duckdb/src/common/string_util.cpp +2 -3
- package/src/duckdb/src/common/tree_renderer.cpp +32 -67
- package/src/duckdb/src/common/types/bit.cpp +6 -6
- package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +6 -6
- package/src/duckdb/src/common/types/hyperloglog.cpp +2 -0
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +13 -0
- package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +5 -7
- package/src/duckdb/src/common/types/uuid.cpp +1 -1
- package/src/duckdb/src/common/types/vector.cpp +22 -14
- package/src/duckdb/src/common/types.cpp +8 -1
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +20 -18
- package/src/duckdb/src/common/vector_operations/generators.cpp +1 -1
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +267 -110
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +52 -23
- package/src/duckdb/src/common/virtual_file_system.cpp +33 -20
- package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +2 -2
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +3 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +31 -16
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +3 -0
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -0
- package/src/duckdb/src/core_functions/core_functions.cpp +1 -1
- package/src/duckdb/src/core_functions/function_list.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/date/time_bucket.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +46 -17
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +82 -45
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +3 -0
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -2
- package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -4
- package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +12 -21
- package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -10
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +133 -66
- package/src/duckdb/src/execution/expression_executor/execute_function.cpp +0 -2
- package/src/duckdb/src/execution/expression_executor.cpp +0 -4
- package/src/duckdb/src/execution/expression_executor_state.cpp +1 -1
- package/src/duckdb/src/execution/index/art/art.cpp +2 -2
- package/src/duckdb/src/execution/index/unknown_index.cpp +13 -13
- package/src/duckdb/src/execution/join_hashtable.cpp +1 -1
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +0 -1
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +10 -7
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +32 -1
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +16 -2
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +7 -7
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +354 -159
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -2
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +22 -7
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +1 -1
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +10 -10
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +9 -18
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +180 -47
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +100 -58
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +88 -21
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +12 -13
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -0
- package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +118 -23
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +2 -2
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +14 -5
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -1
- package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +5 -5
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +0 -9
- package/src/duckdb/src/execution/physical_plan/plan_vacuum.cpp +18 -0
- package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +81 -106
- package/src/duckdb/src/execution/reservoir_sample.cpp +1 -1
- package/src/duckdb/src/execution/window_executor.cpp +48 -28
- package/src/duckdb/src/execution/window_segment_tree.cpp +20 -23
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +1 -1
- package/src/duckdb/src/function/cast/enum_casts.cpp +20 -55
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +10 -9
- package/src/duckdb/src/function/cast_rules.cpp +9 -1
- package/src/duckdb/src/function/compression_config.cpp +1 -1
- package/src/duckdb/src/function/function_binder.cpp +45 -44
- package/src/duckdb/src/function/function_set.cpp +9 -9
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +1 -2
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +21 -5
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/list_select.cpp +5 -2
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +5 -4
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +60 -32
- package/src/duckdb/src/function/scalar/sequence/nextval.cpp +1 -1
- package/src/duckdb/src/function/scalar/strftime_format.cpp +31 -25
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +6 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +23 -2
- package/src/duckdb/src/function/scalar/string/like.cpp +1 -1
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +1 -1
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +3 -3
- package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +1 -1
- package/src/duckdb/src/function/table/arrow.cpp +7 -1
- package/src/duckdb/src/function/table/copy_csv.cpp +17 -13
- package/src/duckdb/src/function/table/read_csv.cpp +52 -39
- package/src/duckdb/src/function/table/sniff_csv.cpp +7 -13
- package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
- package/src/duckdb/src/function/table/system/duckdb_databases.cpp +7 -1
- package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +12 -2
- package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +1 -2
- package/src/duckdb/src/function/table/system/duckdb_tables.cpp +2 -2
- package/src/duckdb/src/function/table/system/pragma_metadata_info.cpp +9 -2
- package/src/duckdb/src/function/table/system/pragma_table_info.cpp +10 -6
- package/src/duckdb/src/function/table/table_scan.cpp +1 -4
- package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +6 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/default/default_functions.hpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +26 -4
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +39 -6
- package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +19 -14
- package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +16 -16
- package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +0 -1
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +14 -10
- package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/exception.hpp +57 -58
- package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/file_open_flags.hpp +134 -0
- package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -6
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +35 -36
- package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +4 -6
- package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +13 -13
- package/src/duckdb/src/include/duckdb/common/helper.hpp +42 -47
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/index_vector.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +13 -10
- package/src/duckdb/src/include/duckdb/common/memory_safety.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +50 -24
- package/src/duckdb/src/include/duckdb/common/operator/abs.hpp +12 -4
- package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/pipe_file_system.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/platform.h +1 -1
- package/src/duckdb/src/include/duckdb/common/printer.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/profiler.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/random_engine.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +7 -7
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +17 -6
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +14 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +16 -0
- package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +4 -4
- package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +24 -25
- package/src/duckdb/src/include/duckdb/common/typedefs.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +1 -2
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +10 -10
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_iterators.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/constraint_conflict_info.hpp +1 -2
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/hash.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +4 -4
- 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_layout.hpp +10 -3
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +12 -12
- package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +21 -20
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +15 -7
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +14 -10
- package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/union_by_name.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/unique_ptr.hpp +15 -14
- package/src/duckdb/src/include/duckdb/common/vector.hpp +21 -21
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +50 -32
- package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +10 -11
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +1 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +13 -1
- package/src/duckdb/src/include/duckdb/core_functions/function_list.hpp +1 -1
- package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +2 -5
- package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/aggregate_object.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +0 -3
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +9 -6
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +40 -22
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +5 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +1 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +6 -4
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +0 -3
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +58 -17
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_prepare.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_set.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +4 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +16 -5
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +6 -6
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +5 -5
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +6 -6
- package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +10 -13
- package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +24 -23
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/function_set.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/pragma_function.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +7 -7
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +6 -6
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +4 -4
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +1 -3
- package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +12 -11
- package/src/duckdb/src/include/duckdb/function/udf_function.hpp +66 -60
- package/src/duckdb/src/include/duckdb/main/appender.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/client_properties.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/config.hpp +14 -5
- package/src/duckdb/src/include/duckdb/main/connection.hpp +27 -26
- package/src/duckdb/src/include/duckdb/main/database.hpp +19 -3
- package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +58 -0
- package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/error_manager.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +8 -0
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/external_dependencies.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +8 -8
- package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +2 -59
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +11 -7
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/settings.hpp +78 -70
- package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +45 -0
- package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +11 -13
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +7 -7
- package/src/duckdb/src/include/duckdb/optimizer/matcher/function_matcher.hpp +7 -7
- package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +32 -30
- package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parallel/pipeline_event.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -4
- package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +49 -8
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_database_info.hpp +40 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_pragma_function_info.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +2 -5
- package/src/duckdb/src/include/duckdb/parser/parser.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +3 -3
- package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -5
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +16 -9
- package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_expanded_expression.hpp +34 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +5 -8
- package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +3 -4
- package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +3 -5
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +6 -14
- package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +3 -6
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_bind_state.hpp +52 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +4 -10
- package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +3 -6
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +4 -12
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_vacuum.hpp +52 -0
- package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +5 -4
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +2 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +5 -5
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/magic_bytes.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/optimistic_data_writer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +24 -24
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +9 -6
- package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +2 -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 +10 -1
- package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/table/segment_lock.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +4 -4
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/delete_info.hpp +20 -1
- package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/transaction_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +1 -1
- package/src/duckdb/src/main/appender.cpp +1 -1
- package/src/duckdb/src/main/attached_database.cpp +11 -3
- package/src/duckdb/src/main/capi/arrow-c.cpp +6 -2
- package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
- package/src/duckdb/src/main/capi/duckdb-c.cpp +1 -1
- package/src/duckdb/src/main/capi/pending-c.cpp +1 -1
- package/src/duckdb/src/main/capi/prepared-c.cpp +2 -2
- package/src/duckdb/src/main/capi/result-c.cpp +4 -4
- package/src/duckdb/src/main/client_context.cpp +4 -12
- package/src/duckdb/src/main/client_context_file_opener.cpp +15 -3
- package/src/duckdb/src/main/client_data.cpp +5 -0
- package/src/duckdb/src/main/config.cpp +82 -82
- package/src/duckdb/src/main/database.cpp +31 -7
- package/src/duckdb/src/main/database_manager.cpp +3 -2
- package/src/duckdb/src/main/database_path_and_type.cpp +4 -4
- package/src/duckdb/src/main/error_manager.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_alias.cpp +9 -9
- package/src/duckdb/src/main/extension/extension_helper.cpp +10 -5
- package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
- package/src/duckdb/src/main/extension/extension_load.cpp +111 -37
- package/src/duckdb/src/main/query_profiler.cpp +1 -118
- package/src/duckdb/src/main/secret/secret_manager.cpp +1 -2
- package/src/duckdb/src/main/secret/secret_storage.cpp +1 -1
- package/src/duckdb/src/main/settings/settings.cpp +81 -65
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +8 -1
- package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -0
- package/src/duckdb/src/optimizer/compressed_materialization.cpp +26 -28
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +5 -5
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -6
- package/src/duckdb/src/optimizer/optimizer.cpp +14 -17
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +16 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +7 -4
- package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +2 -2
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +3 -3
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_between.cpp +8 -8
- package/src/duckdb/src/optimizer/statistics/expression/propagate_case.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +7 -7
- package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +6 -6
- package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -10
- package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_cross_product.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +14 -7
- package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +9 -9
- package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_projection.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +39 -18
- package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
- package/src/duckdb/src/parallel/task_scheduler.cpp +8 -1
- package/src/duckdb/src/parser/constraints/unique_constraint.cpp +4 -2
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +64 -0
- package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +13 -5
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +24 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -8
- package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +2 -1
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +3 -0
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +2 -6
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +2 -6
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -6
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +5 -2
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -8
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +1 -6
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -2
- package/src/duckdb/src/parser/transformer.cpp +14 -2
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +40 -17
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +8 -3
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +32 -30
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +28 -17
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +146 -101
- package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -26
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +29 -0
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -10
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +3 -2
- package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +23 -28
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +11 -12
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -11
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +10 -13
- package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +3 -3
- package/src/duckdb/src/planner/binder/statement/bind_set.cpp +3 -0
- package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +66 -65
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +54 -46
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +3 -0
- package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -5
- package/src/duckdb/src/planner/binder.cpp +78 -6
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +11 -3
- package/src/duckdb/src/planner/expression/bound_expanded_expression.cpp +22 -0
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +11 -58
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +5 -8
- package/src/duckdb/src/planner/expression_binder/group_binder.cpp +5 -4
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +5 -19
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +8 -8
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +42 -26
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -22
- package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +52 -0
- package/src/duckdb/src/planner/expression_binder/select_binder.cpp +43 -5
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +19 -7
- package/src/duckdb/src/planner/logical_operator.cpp +20 -3
- package/src/duckdb/src/planner/operator/logical_copy_database.cpp +4 -14
- package/src/duckdb/src/planner/operator/logical_delete.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_get.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_update.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_vacuum.cpp +65 -0
- package/src/duckdb/src/planner/planner.cpp +4 -4
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +26 -27
- package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
- package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +1 -1
- package/src/duckdb/src/storage/buffer_manager.cpp +2 -10
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +2 -3
- package/src/duckdb/src/storage/checkpoint_manager.cpp +15 -8
- package/src/duckdb/src/storage/compression/bitpacking.cpp +6 -1
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
- package/src/duckdb/src/storage/data_pointer.cpp +1 -1
- package/src/duckdb/src/storage/data_table.cpp +18 -7
- package/src/duckdb/src/storage/local_storage.cpp +8 -5
- package/src/duckdb/src/storage/magic_bytes.cpp +6 -5
- package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -9
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +12 -10
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +23 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -19
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +21 -5
- package/src/duckdb/src/storage/statistics/array_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +2 -3
- package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +1 -1
- package/src/duckdb/src/storage/storage_info.cpp +19 -19
- package/src/duckdb/src/storage/storage_manager.cpp +18 -13
- package/src/duckdb/src/storage/table/chunk_info.cpp +11 -3
- package/src/duckdb/src/storage/table/column_data.cpp +88 -66
- package/src/duckdb/src/storage/table/row_group.cpp +7 -7
- package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -2
- package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -0
- package/src/duckdb/src/storage/table/update_segment.cpp +3 -1
- package/src/duckdb/src/storage/table_index_list.cpp +6 -1
- package/src/duckdb/src/storage/temporary_file_manager.cpp +1 -1
- package/src/duckdb/src/storage/wal_replay.cpp +8 -7
- package/src/duckdb/src/storage/write_ahead_log.cpp +3 -4
- package/src/duckdb/src/transaction/cleanup_state.cpp +10 -3
- package/src/duckdb/src/transaction/commit_state.cpp +11 -4
- package/src/duckdb/src/transaction/duck_transaction.cpp +23 -3
- package/src/duckdb/src/transaction/rollback_state.cpp +1 -1
- package/src/duckdb/src/transaction/transaction_context.cpp +1 -1
- package/src/duckdb/src/transaction/undo_buffer.cpp +3 -1
- package/src/duckdb/third_party/fmt/include/fmt/core.h +0 -5
- package/src/duckdb/third_party/fsst/fsst.h +1 -1
- package/src/duckdb/third_party/fsst/libfsst.cpp +1 -140
- package/src/duckdb/third_party/fsst/libfsst.hpp +0 -13
- package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +4 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +8 -1
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +15401 -15354
- package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +299 -538
- package/src/duckdb/third_party/lz4/lz4.cpp +2605 -0
- package/src/duckdb/third_party/lz4/lz4.hpp +843 -0
- package/src/duckdb/third_party/parquet/parquet_types.cpp +3 -0
- package/src/duckdb/third_party/parquet/parquet_types.h +2 -1
- package/src/duckdb/third_party/re2/re2/bitmap256.cc +44 -0
- package/src/duckdb/third_party/re2/re2/bitmap256.h +3 -35
- package/src/duckdb/third_party/re2/re2/bitstate.cc +31 -24
- package/src/duckdb/third_party/re2/re2/compile.cc +146 -164
- package/src/duckdb/third_party/re2/re2/dfa.cc +174 -181
- package/src/duckdb/third_party/re2/re2/filtered_re2.cc +19 -3
- package/src/duckdb/third_party/re2/re2/filtered_re2.h +27 -23
- package/src/duckdb/third_party/re2/re2/mimics_pcre.cc +21 -11
- package/src/duckdb/third_party/re2/re2/nfa.cc +91 -131
- package/src/duckdb/third_party/re2/re2/onepass.cc +11 -10
- package/src/duckdb/third_party/re2/re2/parse.cc +171 -154
- package/src/duckdb/third_party/re2/re2/perl_groups.cc +35 -35
- package/src/duckdb/third_party/re2/re2/pod_array.h +55 -0
- package/src/duckdb/third_party/re2/re2/prefilter.cc +40 -40
- package/src/duckdb/third_party/re2/re2/prefilter.h +24 -2
- package/src/duckdb/third_party/re2/re2/prefilter_tree.cc +70 -84
- package/src/duckdb/third_party/re2/re2/prefilter_tree.h +5 -4
- package/src/duckdb/third_party/re2/re2/prog.cc +315 -58
- package/src/duckdb/third_party/re2/re2/prog.h +77 -44
- package/src/duckdb/third_party/re2/re2/re2.cc +333 -221
- package/src/duckdb/third_party/re2/re2/re2.h +277 -201
- package/src/duckdb/third_party/re2/re2/regexp.cc +137 -105
- package/src/duckdb/third_party/re2/re2/regexp.h +45 -40
- package/src/duckdb/third_party/re2/re2/set.cc +40 -17
- package/src/duckdb/third_party/re2/re2/set.h +11 -6
- package/src/duckdb/third_party/re2/re2/simplify.cc +50 -41
- package/src/duckdb/third_party/re2/re2/sparse_array.h +392 -0
- package/src/duckdb/third_party/re2/re2/sparse_set.h +264 -0
- package/src/duckdb/third_party/re2/re2/stringpiece.cc +1 -1
- package/src/duckdb/third_party/re2/re2/stringpiece.h +11 -8
- package/src/duckdb/third_party/re2/re2/tostring.cc +8 -6
- package/src/duckdb/third_party/re2/re2/unicode_casefold.cc +39 -10
- package/src/duckdb/third_party/re2/re2/unicode_casefold.h +1 -1
- package/src/duckdb/third_party/re2/re2/unicode_groups.cc +5019 -4566
- package/src/duckdb/third_party/re2/re2/unicode_groups.h +1 -1
- package/src/duckdb/third_party/re2/re2/walker-inl.h +21 -20
- package/src/duckdb/third_party/re2/util/logging.h +14 -18
- package/src/duckdb/third_party/re2/util/mix.h +4 -4
- package/src/duckdb/third_party/re2/util/mutex.h +48 -15
- package/src/duckdb/third_party/re2/util/rune.cc +5 -5
- package/src/duckdb/third_party/re2/util/strutil.cc +1 -16
- package/src/duckdb/third_party/re2/util/strutil.h +1 -3
- package/src/duckdb/third_party/re2/util/utf.h +1 -1
- package/src/duckdb/third_party/re2/util/util.h +9 -1
- package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +2 -0
- package/src/duckdb/third_party/utf8proc/utf8proc_wrapper.cpp +36 -1
- package/src/duckdb/ub_src_common.cpp +0 -2
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
|
@@ -148,9 +148,6 @@ JSONScanLocalState::JSONScanLocalState(ClientContext &context, JSONScanGlobalSta
|
|
|
148
148
|
: scan_count(0), batch_index(DConstants::INVALID_INDEX), total_read_size(0), total_tuple_count(0),
|
|
149
149
|
bind_data(gstate.bind_data), allocator(BufferAllocator::Get(context)), is_last(false),
|
|
150
150
|
fs(FileSystem::GetFileSystem(context)), buffer_size(0), buffer_offset(0), prev_buffer_remainder(0) {
|
|
151
|
-
|
|
152
|
-
// Buffer to reconstruct JSON values when they cross a buffer boundary
|
|
153
|
-
reconstruct_buffer = gstate.allocator.Allocate(gstate.buffer_capacity);
|
|
154
151
|
}
|
|
155
152
|
|
|
156
153
|
JSONGlobalTableFunctionState::JSONGlobalTableFunctionState(ClientContext &context, TableFunctionInitInput &input)
|
|
@@ -276,13 +273,13 @@ idx_t JSONScanLocalState::ReadNext(JSONScanGlobalState &gstate) {
|
|
|
276
273
|
}
|
|
277
274
|
if (current_buffer_handle->buffer_index != 0 &&
|
|
278
275
|
current_reader->GetFormat() == JSONFormat::NEWLINE_DELIMITED) {
|
|
279
|
-
if (ReconstructFirstObject()) {
|
|
276
|
+
if (ReconstructFirstObject(gstate)) {
|
|
280
277
|
scan_count++;
|
|
281
278
|
}
|
|
282
279
|
}
|
|
283
280
|
}
|
|
284
281
|
|
|
285
|
-
ParseNextChunk();
|
|
282
|
+
ParseNextChunk(gstate);
|
|
286
283
|
}
|
|
287
284
|
|
|
288
285
|
return scan_count;
|
|
@@ -540,16 +537,12 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
|
|
|
540
537
|
}
|
|
541
538
|
}
|
|
542
539
|
|
|
543
|
-
// If we cannot re-use a buffer we create a new one
|
|
544
|
-
if (!buffer.IsSet()) {
|
|
545
|
-
buffer = gstate.allocator.Allocate(gstate.buffer_capacity);
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
buffer_ptr = char_ptr_cast(buffer.get());
|
|
549
|
-
|
|
550
540
|
// Copy last bit of previous buffer
|
|
551
541
|
if (current_reader && current_reader->GetFormat() != JSONFormat::NEWLINE_DELIMITED && !is_last) {
|
|
552
|
-
|
|
542
|
+
if (!buffer.IsSet()) {
|
|
543
|
+
buffer = AllocateBuffer(gstate);
|
|
544
|
+
}
|
|
545
|
+
memcpy(buffer_ptr, GetReconstructBuffer(gstate), prev_buffer_remainder);
|
|
553
546
|
}
|
|
554
547
|
|
|
555
548
|
optional_idx buffer_index;
|
|
@@ -558,7 +551,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
|
|
|
558
551
|
if (current_reader) {
|
|
559
552
|
// Try to read (if we were not the last read in the previous iteration)
|
|
560
553
|
bool file_done = false;
|
|
561
|
-
bool read_success = ReadNextBufferInternal(gstate, buffer_index, file_done);
|
|
554
|
+
bool read_success = ReadNextBufferInternal(gstate, buffer, buffer_index, file_done);
|
|
562
555
|
if (!is_last && read_success) {
|
|
563
556
|
// We read something
|
|
564
557
|
if (buffer_index.GetIndex() == 0 && current_reader->GetFormat() == JSONFormat::ARRAY) {
|
|
@@ -603,7 +596,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
|
|
|
603
596
|
// Open the file if it is not yet open
|
|
604
597
|
if (!current_reader->IsOpen()) {
|
|
605
598
|
current_reader->OpenJSONFile();
|
|
606
|
-
if (current_reader->GetFileHandle().FileSize() == 0) {
|
|
599
|
+
if (current_reader->GetFileHandle().FileSize() == 0 && !current_reader->GetFileHandle().IsPipe()) {
|
|
607
600
|
current_reader->GetFileHandle().Close();
|
|
608
601
|
// Skip over empty files
|
|
609
602
|
if (gstate.enable_parallel_scans) {
|
|
@@ -616,7 +609,7 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
|
|
|
616
609
|
// Auto-detect if we haven't yet done this during the bind
|
|
617
610
|
if (gstate.bind_data.options.record_type == JSONRecordType::AUTO_DETECT ||
|
|
618
611
|
current_reader->GetFormat() == JSONFormat::AUTO_DETECT) {
|
|
619
|
-
ReadAndAutoDetect(gstate, buffer_index);
|
|
612
|
+
ReadAndAutoDetect(gstate, buffer, buffer_index);
|
|
620
613
|
}
|
|
621
614
|
|
|
622
615
|
if (gstate.enable_parallel_scans) {
|
|
@@ -655,10 +648,11 @@ bool JSONScanLocalState::ReadNextBuffer(JSONScanGlobalState &gstate) {
|
|
|
655
648
|
return true;
|
|
656
649
|
}
|
|
657
650
|
|
|
658
|
-
void JSONScanLocalState::ReadAndAutoDetect(JSONScanGlobalState &gstate,
|
|
651
|
+
void JSONScanLocalState::ReadAndAutoDetect(JSONScanGlobalState &gstate, AllocatedData &buffer,
|
|
652
|
+
optional_idx &buffer_index) {
|
|
659
653
|
// We have to detect the JSON format - hold the gstate lock while we do this
|
|
660
654
|
bool file_done = false;
|
|
661
|
-
if (!ReadNextBufferInternal(gstate, buffer_index, file_done)) {
|
|
655
|
+
if (!ReadNextBufferInternal(gstate, buffer, buffer_index, file_done)) {
|
|
662
656
|
return;
|
|
663
657
|
}
|
|
664
658
|
if (buffer_size == 0) {
|
|
@@ -676,21 +670,21 @@ void JSONScanLocalState::ReadAndAutoDetect(JSONScanGlobalState &gstate, optional
|
|
|
676
670
|
SkipOverArrayStart();
|
|
677
671
|
}
|
|
678
672
|
|
|
679
|
-
if (bind_data.options.record_type == JSONRecordType::RECORDS &&
|
|
673
|
+
if (!bind_data.ignore_errors && bind_data.options.record_type == JSONRecordType::RECORDS &&
|
|
680
674
|
current_reader->GetRecordType() != JSONRecordType::RECORDS) {
|
|
681
675
|
throw InvalidInputException("Expected file \"%s\" to contain records, detected non-record JSON instead.",
|
|
682
676
|
current_reader->GetFileName());
|
|
683
677
|
}
|
|
684
678
|
}
|
|
685
679
|
|
|
686
|
-
bool JSONScanLocalState::ReadNextBufferInternal(JSONScanGlobalState &gstate,
|
|
687
|
-
bool &file_done) {
|
|
680
|
+
bool JSONScanLocalState::ReadNextBufferInternal(JSONScanGlobalState &gstate, AllocatedData &buffer,
|
|
681
|
+
optional_idx &buffer_index, bool &file_done) {
|
|
688
682
|
if (current_reader->GetFileHandle().CanSeek()) {
|
|
689
|
-
if (!ReadNextBufferSeek(gstate, buffer_index, file_done)) {
|
|
683
|
+
if (!ReadNextBufferSeek(gstate, buffer, buffer_index, file_done)) {
|
|
690
684
|
return false;
|
|
691
685
|
}
|
|
692
686
|
} else {
|
|
693
|
-
if (!ReadNextBufferNoSeek(gstate, buffer_index, file_done)) {
|
|
687
|
+
if (!ReadNextBufferNoSeek(gstate, buffer, buffer_index, file_done)) {
|
|
694
688
|
return false;
|
|
695
689
|
}
|
|
696
690
|
}
|
|
@@ -700,7 +694,8 @@ bool JSONScanLocalState::ReadNextBufferInternal(JSONScanGlobalState &gstate, opt
|
|
|
700
694
|
return true;
|
|
701
695
|
}
|
|
702
696
|
|
|
703
|
-
bool JSONScanLocalState::ReadNextBufferSeek(JSONScanGlobalState &gstate,
|
|
697
|
+
bool JSONScanLocalState::ReadNextBufferSeek(JSONScanGlobalState &gstate, AllocatedData &buffer,
|
|
698
|
+
optional_idx &buffer_index, bool &file_done) {
|
|
704
699
|
auto &file_handle = current_reader->GetFileHandle();
|
|
705
700
|
|
|
706
701
|
idx_t request_size = gstate.buffer_capacity - prev_buffer_remainder - YYJSON_PADDING_SIZE;
|
|
@@ -709,6 +704,12 @@ bool JSONScanLocalState::ReadNextBufferSeek(JSONScanGlobalState &gstate, optiona
|
|
|
709
704
|
|
|
710
705
|
{
|
|
711
706
|
lock_guard<mutex> reader_guard(current_reader->lock);
|
|
707
|
+
if (file_handle.LastReadRequested()) {
|
|
708
|
+
return false;
|
|
709
|
+
}
|
|
710
|
+
if (!buffer.IsSet()) {
|
|
711
|
+
buffer = AllocateBuffer(gstate);
|
|
712
|
+
}
|
|
712
713
|
if (!file_handle.GetPositionAndSize(read_position, read_size, request_size)) {
|
|
713
714
|
return false; // We weren't able to read
|
|
714
715
|
}
|
|
@@ -742,16 +743,25 @@ bool JSONScanLocalState::ReadNextBufferSeek(JSONScanGlobalState &gstate, optiona
|
|
|
742
743
|
return true;
|
|
743
744
|
}
|
|
744
745
|
|
|
745
|
-
bool JSONScanLocalState::ReadNextBufferNoSeek(JSONScanGlobalState &gstate,
|
|
746
|
-
bool &file_done) {
|
|
746
|
+
bool JSONScanLocalState::ReadNextBufferNoSeek(JSONScanGlobalState &gstate, AllocatedData &buffer,
|
|
747
|
+
optional_idx &buffer_index, bool &file_done) {
|
|
747
748
|
idx_t request_size = gstate.buffer_capacity - prev_buffer_remainder - YYJSON_PADDING_SIZE;
|
|
748
749
|
idx_t read_size;
|
|
749
750
|
|
|
750
751
|
{
|
|
751
752
|
lock_guard<mutex> reader_guard(current_reader->lock);
|
|
752
|
-
if (!current_reader->HasFileHandle() || !current_reader->IsOpen()
|
|
753
|
-
|
|
754
|
-
|
|
753
|
+
if (!current_reader->HasFileHandle() || !current_reader->IsOpen()) {
|
|
754
|
+
return false; // Couldn't read anything
|
|
755
|
+
}
|
|
756
|
+
auto &file_handle = current_reader->GetFileHandle();
|
|
757
|
+
if (file_handle.LastReadRequested()) {
|
|
758
|
+
return false;
|
|
759
|
+
}
|
|
760
|
+
if (!buffer.IsSet()) {
|
|
761
|
+
buffer = AllocateBuffer(gstate);
|
|
762
|
+
}
|
|
763
|
+
if (!file_handle.Read(buffer_ptr + prev_buffer_remainder, read_size, request_size, file_done,
|
|
764
|
+
gstate.bind_data.type == JSONScanType::SAMPLE)) {
|
|
755
765
|
return false; // Couldn't read anything
|
|
756
766
|
}
|
|
757
767
|
buffer_index = current_reader->GetBufferIndex();
|
|
@@ -766,6 +776,19 @@ bool JSONScanLocalState::ReadNextBufferNoSeek(JSONScanGlobalState &gstate, optio
|
|
|
766
776
|
return true;
|
|
767
777
|
}
|
|
768
778
|
|
|
779
|
+
AllocatedData JSONScanLocalState::AllocateBuffer(JSONScanGlobalState &gstate) {
|
|
780
|
+
auto buffer = gstate.allocator.Allocate(gstate.buffer_capacity);
|
|
781
|
+
buffer_ptr = char_ptr_cast(buffer.get());
|
|
782
|
+
return buffer;
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
data_ptr_t JSONScanLocalState::GetReconstructBuffer(JSONScanGlobalState &gstate) {
|
|
786
|
+
if (!reconstruct_buffer.IsSet()) {
|
|
787
|
+
reconstruct_buffer = gstate.allocator.Allocate(gstate.buffer_capacity);
|
|
788
|
+
}
|
|
789
|
+
return reconstruct_buffer.get();
|
|
790
|
+
}
|
|
791
|
+
|
|
769
792
|
void JSONScanLocalState::SkipOverArrayStart() {
|
|
770
793
|
// First read of this buffer, check if it's actually an array and skip over the bytes
|
|
771
794
|
SkipWhitespace(buffer_ptr, buffer_offset, buffer_size);
|
|
@@ -795,7 +818,7 @@ void JSONScanLocalState::SkipOverArrayStart() {
|
|
|
795
818
|
}
|
|
796
819
|
}
|
|
797
820
|
|
|
798
|
-
bool JSONScanLocalState::ReconstructFirstObject() {
|
|
821
|
+
bool JSONScanLocalState::ReconstructFirstObject(JSONScanGlobalState &gstate) {
|
|
799
822
|
D_ASSERT(current_buffer_handle->buffer_index != 0);
|
|
800
823
|
D_ASSERT(current_reader->GetFormat() == JSONFormat::NEWLINE_DELIMITED);
|
|
801
824
|
|
|
@@ -811,7 +834,7 @@ bool JSONScanLocalState::ReconstructFirstObject() {
|
|
|
811
834
|
auto part1_size = prev_buffer_ptr - part1_ptr;
|
|
812
835
|
|
|
813
836
|
// Now copy the data to our reconstruct buffer
|
|
814
|
-
const auto reconstruct_ptr =
|
|
837
|
+
const auto reconstruct_ptr = GetReconstructBuffer(gstate);
|
|
815
838
|
memcpy(reconstruct_ptr, part1_ptr, part1_size);
|
|
816
839
|
|
|
817
840
|
// We copied the object, so we are no longer reading the previous buffer
|
|
@@ -851,7 +874,7 @@ bool JSONScanLocalState::ReconstructFirstObject() {
|
|
|
851
874
|
return true;
|
|
852
875
|
}
|
|
853
876
|
|
|
854
|
-
void JSONScanLocalState::ParseNextChunk() {
|
|
877
|
+
void JSONScanLocalState::ParseNextChunk(JSONScanGlobalState &gstate) {
|
|
855
878
|
auto buffer_offset_before = buffer_offset;
|
|
856
879
|
|
|
857
880
|
const auto format = current_reader->GetFormat();
|
|
@@ -862,6 +885,7 @@ void JSONScanLocalState::ParseNextChunk() {
|
|
|
862
885
|
if (remaining == 0) {
|
|
863
886
|
break;
|
|
864
887
|
}
|
|
888
|
+
D_ASSERT(format != JSONFormat::AUTO_DETECT);
|
|
865
889
|
const char *json_end = format == JSONFormat::NEWLINE_DELIMITED ? NextNewline(json_start, remaining)
|
|
866
890
|
: NextJSON(json_start, remaining);
|
|
867
891
|
if (json_end == nullptr) {
|
|
@@ -872,7 +896,7 @@ void JSONScanLocalState::ParseNextChunk() {
|
|
|
872
896
|
if (remaining > bind_data.maximum_object_size) {
|
|
873
897
|
ThrowObjectSizeError(remaining);
|
|
874
898
|
}
|
|
875
|
-
memcpy(
|
|
899
|
+
memcpy(GetReconstructBuffer(gstate), json_start, remaining);
|
|
876
900
|
prev_buffer_remainder = remaining;
|
|
877
901
|
}
|
|
878
902
|
buffer_offset = buffer_size;
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#include "templated_column_reader.hpp"
|
|
17
17
|
#include "utf8proc_wrapper.hpp"
|
|
18
18
|
#include "zstd.h"
|
|
19
|
+
#include "lz4.hpp"
|
|
19
20
|
|
|
20
21
|
#ifndef DUCKDB_AMALGAMATION
|
|
21
22
|
#include "duckdb/common/types/bit.hpp"
|
|
@@ -339,6 +340,13 @@ void ColumnReader::DecompressInternal(CompressionCodec::type codec, const_data_p
|
|
|
339
340
|
s.Decompress(const_char_ptr_cast(src), src_size, char_ptr_cast(dst), dst_size);
|
|
340
341
|
break;
|
|
341
342
|
}
|
|
343
|
+
case CompressionCodec::LZ4_RAW: {
|
|
344
|
+
auto res = duckdb_lz4::LZ4_decompress_safe(const_char_ptr_cast(src), char_ptr_cast(dst), src_size, dst_size);
|
|
345
|
+
if (res != NumericCast<int>(dst_size)) {
|
|
346
|
+
throw std::runtime_error("LZ4 decompression failure");
|
|
347
|
+
}
|
|
348
|
+
break;
|
|
349
|
+
}
|
|
342
350
|
case CompressionCodec::SNAPPY: {
|
|
343
351
|
{
|
|
344
352
|
size_t uncompressed_size = 0;
|
|
@@ -346,7 +354,7 @@ void ColumnReader::DecompressInternal(CompressionCodec::type codec, const_data_p
|
|
|
346
354
|
if (!res) {
|
|
347
355
|
throw std::runtime_error("Snappy decompression failure");
|
|
348
356
|
}
|
|
349
|
-
if (uncompressed_size !=
|
|
357
|
+
if (uncompressed_size != dst_size) {
|
|
350
358
|
throw std::runtime_error("Snappy decompression failure: Uncompressed data size mismatch");
|
|
351
359
|
}
|
|
352
360
|
}
|
|
@@ -358,16 +366,17 @@ void ColumnReader::DecompressInternal(CompressionCodec::type codec, const_data_p
|
|
|
358
366
|
}
|
|
359
367
|
case CompressionCodec::ZSTD: {
|
|
360
368
|
auto res = duckdb_zstd::ZSTD_decompress(dst, dst_size, src, src_size);
|
|
361
|
-
if (duckdb_zstd::ZSTD_isError(res) || res !=
|
|
369
|
+
if (duckdb_zstd::ZSTD_isError(res) || res != dst_size) {
|
|
362
370
|
throw std::runtime_error("ZSTD Decompression failure");
|
|
363
371
|
}
|
|
364
372
|
break;
|
|
365
373
|
}
|
|
374
|
+
|
|
366
375
|
default: {
|
|
367
376
|
std::stringstream codec_name;
|
|
368
377
|
codec_name << codec;
|
|
369
378
|
throw std::runtime_error("Unsupported compression codec \"" + codec_name.str() +
|
|
370
|
-
"\". Supported options are uncompressed, gzip, snappy or zstd");
|
|
379
|
+
"\". Supported options are uncompressed, gzip, lz4_raw, snappy or zstd");
|
|
371
380
|
}
|
|
372
381
|
}
|
|
373
382
|
}
|
|
@@ -15,12 +15,13 @@
|
|
|
15
15
|
#include "duckdb/common/string_map_set.hpp"
|
|
16
16
|
#include "duckdb/common/types/date.hpp"
|
|
17
17
|
#include "duckdb/common/types/hugeint.hpp"
|
|
18
|
-
#include "duckdb/common/types/uhugeint.hpp"
|
|
19
18
|
#include "duckdb/common/types/string_heap.hpp"
|
|
20
19
|
#include "duckdb/common/types/time.hpp"
|
|
21
20
|
#include "duckdb/common/types/timestamp.hpp"
|
|
21
|
+
#include "duckdb/common/types/uhugeint.hpp"
|
|
22
22
|
#endif
|
|
23
23
|
|
|
24
|
+
#include "lz4.hpp"
|
|
24
25
|
#include "miniz_wrapper.hpp"
|
|
25
26
|
#include "snappy.h"
|
|
26
27
|
#include "zstd.h"
|
|
@@ -191,6 +192,7 @@ void ColumnWriter::CompressPage(MemoryStream &temp_writer, size_t &compressed_si
|
|
|
191
192
|
compressed_size = temp_writer.GetPosition();
|
|
192
193
|
compressed_data = temp_writer.GetData();
|
|
193
194
|
break;
|
|
195
|
+
|
|
194
196
|
case CompressionCodec::SNAPPY: {
|
|
195
197
|
compressed_size = duckdb_snappy::MaxCompressedLength(temp_writer.GetPosition());
|
|
196
198
|
compressed_buf = unique_ptr<data_t[]>(new data_t[compressed_size]);
|
|
@@ -200,6 +202,15 @@ void ColumnWriter::CompressPage(MemoryStream &temp_writer, size_t &compressed_si
|
|
|
200
202
|
D_ASSERT(compressed_size <= duckdb_snappy::MaxCompressedLength(temp_writer.GetPosition()));
|
|
201
203
|
break;
|
|
202
204
|
}
|
|
205
|
+
case CompressionCodec::LZ4_RAW: {
|
|
206
|
+
compressed_size = duckdb_lz4::LZ4_compressBound(temp_writer.GetPosition());
|
|
207
|
+
compressed_buf = unique_ptr<data_t[]>(new data_t[compressed_size]);
|
|
208
|
+
compressed_size = duckdb_lz4::LZ4_compress_default(const_char_ptr_cast(temp_writer.GetData()),
|
|
209
|
+
char_ptr_cast(compressed_buf.get()),
|
|
210
|
+
temp_writer.GetPosition(), compressed_size);
|
|
211
|
+
compressed_data = compressed_buf.get();
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
203
214
|
case CompressionCodec::GZIP: {
|
|
204
215
|
MiniZStream s;
|
|
205
216
|
compressed_size = s.MaxCompressedLength(temp_writer.GetPosition());
|
|
@@ -344,15 +355,18 @@ public:
|
|
|
344
355
|
~BasicColumnWriter() override = default;
|
|
345
356
|
|
|
346
357
|
//! We limit the uncompressed page size to 100MB
|
|
347
|
-
|
|
358
|
+
//! The max size in Parquet is 2GB, but we choose a more conservative limit
|
|
348
359
|
static constexpr const idx_t MAX_UNCOMPRESSED_PAGE_SIZE = 100000000;
|
|
349
360
|
//! Dictionary pages must be below 2GB. Unlike data pages, there's only one dictionary page.
|
|
350
|
-
|
|
361
|
+
//! For this reason we go with a much higher, but still a conservative upper bound of 1GB;
|
|
351
362
|
static constexpr const idx_t MAX_UNCOMPRESSED_DICT_PAGE_SIZE = 1e9;
|
|
363
|
+
//! If the dictionary has this many entries, but the compression ratio is still below 1,
|
|
364
|
+
//! we stop creating the dictionary
|
|
365
|
+
static constexpr const idx_t DICTIONARY_ANALYZE_THRESHOLD = 1e4;
|
|
352
366
|
|
|
353
|
-
|
|
367
|
+
//! The maximum size a key entry in an RLE page takes
|
|
354
368
|
static constexpr const idx_t MAX_DICTIONARY_KEY_SIZE = sizeof(uint32_t);
|
|
355
|
-
|
|
369
|
+
//! The size of encoding the string length
|
|
356
370
|
static constexpr const idx_t STRING_LENGTH_SIZE = sizeof(uint32_t);
|
|
357
371
|
|
|
358
372
|
public:
|
|
@@ -1282,6 +1296,12 @@ public:
|
|
|
1282
1296
|
|
|
1283
1297
|
void Analyze(ColumnWriterState &state_p, ColumnWriterState *parent, Vector &vector, idx_t count) override {
|
|
1284
1298
|
auto &state = state_p.Cast<StringColumnWriterState>();
|
|
1299
|
+
if (writer.DictionaryCompressionRatioThreshold() == NumericLimits<double>::Maximum() ||
|
|
1300
|
+
(state.dictionary.size() > DICTIONARY_ANALYZE_THRESHOLD && WontUseDictionary(state))) {
|
|
1301
|
+
// Early out: compression ratio is less than the specified parameter
|
|
1302
|
+
// after seeing more entries than the threshold
|
|
1303
|
+
return;
|
|
1304
|
+
}
|
|
1285
1305
|
|
|
1286
1306
|
idx_t vcount = parent ? parent->definition_levels.size() - state.definition_levels.size() : count;
|
|
1287
1307
|
idx_t parent_index = state.definition_levels.size();
|
|
@@ -1308,6 +1328,7 @@ public:
|
|
|
1308
1328
|
new_value_index++;
|
|
1309
1329
|
state.estimated_dict_page_size += value.GetSize() + MAX_DICTIONARY_KEY_SIZE;
|
|
1310
1330
|
}
|
|
1331
|
+
|
|
1311
1332
|
// if the value changed, we will encode it in the page
|
|
1312
1333
|
if (last_value_index != found.first->second) {
|
|
1313
1334
|
// we will add the value index size later, when we know the total number of keys
|
|
@@ -1329,8 +1350,7 @@ public:
|
|
|
1329
1350
|
|
|
1330
1351
|
// check if a dictionary will require more space than a plain write, or if the dictionary page is going to
|
|
1331
1352
|
// be too large
|
|
1332
|
-
if (state
|
|
1333
|
-
state.estimated_rle_pages_size + state.estimated_dict_page_size > state.estimated_plain_size) {
|
|
1353
|
+
if (WontUseDictionary(state)) {
|
|
1334
1354
|
// clearing the dictionary signals a plain write
|
|
1335
1355
|
state.dictionary.clear();
|
|
1336
1356
|
state.key_bit_width = 0;
|
|
@@ -1446,6 +1466,23 @@ public:
|
|
|
1446
1466
|
return strings[index].GetSize();
|
|
1447
1467
|
}
|
|
1448
1468
|
}
|
|
1469
|
+
|
|
1470
|
+
private:
|
|
1471
|
+
bool WontUseDictionary(StringColumnWriterState &state) const {
|
|
1472
|
+
return state.estimated_dict_page_size > MAX_UNCOMPRESSED_DICT_PAGE_SIZE ||
|
|
1473
|
+
DictionaryCompressionRatio(state) < writer.DictionaryCompressionRatioThreshold();
|
|
1474
|
+
}
|
|
1475
|
+
|
|
1476
|
+
static double DictionaryCompressionRatio(StringColumnWriterState &state) {
|
|
1477
|
+
// If any are 0, we just return a compression ratio of 1
|
|
1478
|
+
if (state.estimated_plain_size == 0 || state.estimated_rle_pages_size == 0 ||
|
|
1479
|
+
state.estimated_dict_page_size == 0) {
|
|
1480
|
+
return 1;
|
|
1481
|
+
}
|
|
1482
|
+
// Otherwise, plain size divided by compressed size
|
|
1483
|
+
return double(state.estimated_plain_size) /
|
|
1484
|
+
double(state.estimated_rle_pages_size + state.estimated_dict_page_size);
|
|
1485
|
+
}
|
|
1449
1486
|
};
|
|
1450
1487
|
|
|
1451
1488
|
//===--------------------------------------------------------------------===//
|
|
@@ -64,7 +64,7 @@ public:
|
|
|
64
64
|
ParquetWriter(FileSystem &fs, string file_name, vector<LogicalType> types, vector<string> names,
|
|
65
65
|
duckdb_parquet::format::CompressionCodec::type codec, ChildFieldIDs field_ids,
|
|
66
66
|
const vector<pair<string, string>> &kv_metadata,
|
|
67
|
-
shared_ptr<ParquetEncryptionConfig> encryption_config);
|
|
67
|
+
shared_ptr<ParquetEncryptionConfig> encryption_config, double dictionary_compression_ratio_threshold);
|
|
68
68
|
|
|
69
69
|
public:
|
|
70
70
|
void PrepareRowGroup(ColumnDataCollection &buffer, PreparedRowGroup &result);
|
|
@@ -91,6 +91,9 @@ public:
|
|
|
91
91
|
lock_guard<mutex> glock(lock);
|
|
92
92
|
return writer->total_written;
|
|
93
93
|
}
|
|
94
|
+
double DictionaryCompressionRatioThreshold() const {
|
|
95
|
+
return dictionary_compression_ratio_threshold;
|
|
96
|
+
}
|
|
94
97
|
|
|
95
98
|
static CopyTypeSupport TypeIsSupported(const LogicalType &type);
|
|
96
99
|
|
|
@@ -106,6 +109,7 @@ private:
|
|
|
106
109
|
duckdb_parquet::format::CompressionCodec::type codec;
|
|
107
110
|
ChildFieldIDs field_ids;
|
|
108
111
|
shared_ptr<ParquetEncryptionConfig> encryption_config;
|
|
112
|
+
double dictionary_compression_ratio_threshold;
|
|
109
113
|
|
|
110
114
|
unique_ptr<BufferedFileWriter> writer;
|
|
111
115
|
shared_ptr<duckdb_apache::thrift::protocol::TProtocol> protocol;
|
|
@@ -130,6 +130,9 @@ struct ParquetWriteBindData : public TableFunctionData {
|
|
|
130
130
|
//! How/Whether to encrypt the data
|
|
131
131
|
shared_ptr<ParquetEncryptionConfig> encryption_config;
|
|
132
132
|
|
|
133
|
+
//! Dictionary compression is applied only if the compression ratio exceeds this threshold
|
|
134
|
+
double dictionary_compression_ratio_threshold = 1.0;
|
|
135
|
+
|
|
133
136
|
ChildFieldIDs field_ids;
|
|
134
137
|
};
|
|
135
138
|
|
|
@@ -947,6 +950,10 @@ unique_ptr<FunctionData> ParquetWriteBind(ClientContext &context, CopyFunctionBi
|
|
|
947
950
|
bind_data->codec = duckdb_parquet::format::CompressionCodec::GZIP;
|
|
948
951
|
} else if (roption == "zstd") {
|
|
949
952
|
bind_data->codec = duckdb_parquet::format::CompressionCodec::ZSTD;
|
|
953
|
+
} else if (roption == "lz4" || roption == "lz4_raw") {
|
|
954
|
+
/* LZ4 is technically another compression scheme, but deprecated and arrow also uses them
|
|
955
|
+
* interchangeably */
|
|
956
|
+
bind_data->codec = duckdb_parquet::format::CompressionCodec::LZ4_RAW;
|
|
950
957
|
} else {
|
|
951
958
|
throw BinderException("Expected %s argument to be either [uncompressed, snappy, gzip or zstd]",
|
|
952
959
|
loption);
|
|
@@ -988,6 +995,15 @@ unique_ptr<FunctionData> ParquetWriteBind(ClientContext &context, CopyFunctionBi
|
|
|
988
995
|
}
|
|
989
996
|
} else if (loption == "encryption_config") {
|
|
990
997
|
bind_data->encryption_config = ParquetEncryptionConfig::Create(context, option.second[0]);
|
|
998
|
+
} else if (loption == "dictionary_compression_ratio_threshold") {
|
|
999
|
+
auto val = option.second[0].GetValue<double>();
|
|
1000
|
+
if (val == -1) {
|
|
1001
|
+
val = NumericLimits<double>::Maximum();
|
|
1002
|
+
} else if (val < 0) {
|
|
1003
|
+
throw BinderException("dictionary_compression_ratio_threshold must be greater than 0, or -1 to disable "
|
|
1004
|
+
"dictionary compression");
|
|
1005
|
+
}
|
|
1006
|
+
bind_data->dictionary_compression_ratio_threshold = val;
|
|
991
1007
|
} else {
|
|
992
1008
|
throw NotImplementedException("Unrecognized option for PARQUET: %s", option.first.c_str());
|
|
993
1009
|
}
|
|
@@ -1013,9 +1029,10 @@ unique_ptr<GlobalFunctionData> ParquetWriteInitializeGlobal(ClientContext &conte
|
|
|
1013
1029
|
auto &parquet_bind = bind_data.Cast<ParquetWriteBindData>();
|
|
1014
1030
|
|
|
1015
1031
|
auto &fs = FileSystem::GetFileSystem(context);
|
|
1016
|
-
global_state->writer =
|
|
1017
|
-
|
|
1018
|
-
|
|
1032
|
+
global_state->writer =
|
|
1033
|
+
make_uniq<ParquetWriter>(fs, file_path, parquet_bind.sql_types, parquet_bind.column_names, parquet_bind.codec,
|
|
1034
|
+
parquet_bind.field_ids.Copy(), parquet_bind.kv_metadata,
|
|
1035
|
+
parquet_bind.encryption_config, parquet_bind.dictionary_compression_ratio_threshold);
|
|
1019
1036
|
return std::move(global_state);
|
|
1020
1037
|
}
|
|
1021
1038
|
|
|
@@ -1081,6 +1098,9 @@ const char *EnumUtil::ToChars<duckdb_parquet::format::CompressionCodec::type>(
|
|
|
1081
1098
|
case CompressionCodec::LZ4:
|
|
1082
1099
|
return "LZ4";
|
|
1083
1100
|
break;
|
|
1101
|
+
case CompressionCodec::LZ4_RAW:
|
|
1102
|
+
return "LZ4_RAW";
|
|
1103
|
+
break;
|
|
1084
1104
|
case CompressionCodec::ZSTD:
|
|
1085
1105
|
return "ZSTD";
|
|
1086
1106
|
break;
|
|
@@ -1110,6 +1130,9 @@ EnumUtil::FromString<duckdb_parquet::format::CompressionCodec::type>(const char
|
|
|
1110
1130
|
if (StringUtil::Equals(value, "LZ4")) {
|
|
1111
1131
|
return CompressionCodec::LZ4;
|
|
1112
1132
|
}
|
|
1133
|
+
if (StringUtil::Equals(value, "LZ4_RAW")) {
|
|
1134
|
+
return CompressionCodec::LZ4_RAW;
|
|
1135
|
+
}
|
|
1113
1136
|
if (StringUtil::Equals(value, "ZSTD")) {
|
|
1114
1137
|
return CompressionCodec::ZSTD;
|
|
1115
1138
|
}
|
|
@@ -1128,6 +1151,8 @@ static void ParquetCopySerialize(Serializer &serializer, const FunctionData &bin
|
|
|
1128
1151
|
serializer.WriteProperty(106, "field_ids", bind_data.field_ids);
|
|
1129
1152
|
serializer.WritePropertyWithDefault<shared_ptr<ParquetEncryptionConfig>>(107, "encryption_config",
|
|
1130
1153
|
bind_data.encryption_config, nullptr);
|
|
1154
|
+
serializer.WriteProperty(108, "dictionary_compression_ratio_threshold",
|
|
1155
|
+
bind_data.dictionary_compression_ratio_threshold);
|
|
1131
1156
|
}
|
|
1132
1157
|
|
|
1133
1158
|
static unique_ptr<FunctionData> ParquetCopyDeserialize(Deserializer &deserializer, CopyFunction &function) {
|
|
@@ -1141,6 +1166,8 @@ static unique_ptr<FunctionData> ParquetCopyDeserialize(Deserializer &deserialize
|
|
|
1141
1166
|
data->field_ids = deserializer.ReadProperty<ChildFieldIDs>(106, "field_ids");
|
|
1142
1167
|
deserializer.ReadPropertyWithDefault<shared_ptr<ParquetEncryptionConfig>>(107, "encryption_config",
|
|
1143
1168
|
data->encryption_config, nullptr);
|
|
1169
|
+
deserializer.ReadPropertyWithDefault<double>(108, "dictionary_compression_ratio_threshold",
|
|
1170
|
+
data->dictionary_compression_ratio_threshold, 1.0);
|
|
1144
1171
|
return std::move(data);
|
|
1145
1172
|
}
|
|
1146
1173
|
// LCOV_EXCL_STOP
|
|
@@ -24,7 +24,7 @@ public:
|
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
26
|
|
|
27
|
-
enum class ParquetMetadataOperatorType { META_DATA, SCHEMA, KEY_VALUE_META_DATA, FILE_META_DATA };
|
|
27
|
+
enum class ParquetMetadataOperatorType : uint8_t { META_DATA, SCHEMA, KEY_VALUE_META_DATA, FILE_META_DATA };
|
|
28
28
|
|
|
29
29
|
struct ParquetMetaDataOperatorData : public GlobalTableFunctionState {
|
|
30
30
|
explicit ParquetMetaDataOperatorData(ClientContext &context, const vector<LogicalType> &types)
|
|
@@ -350,9 +350,11 @@ void VerifyUniqueNames(const vector<string> &names) {
|
|
|
350
350
|
ParquetWriter::ParquetWriter(FileSystem &fs, string file_name_p, vector<LogicalType> types_p, vector<string> names_p,
|
|
351
351
|
CompressionCodec::type codec, ChildFieldIDs field_ids_p,
|
|
352
352
|
const vector<pair<string, string>> &kv_metadata,
|
|
353
|
-
shared_ptr<ParquetEncryptionConfig> encryption_config_p
|
|
353
|
+
shared_ptr<ParquetEncryptionConfig> encryption_config_p,
|
|
354
|
+
double dictionary_compression_ratio_threshold_p)
|
|
354
355
|
: file_name(std::move(file_name_p)), sql_types(std::move(types_p)), column_names(std::move(names_p)), codec(codec),
|
|
355
|
-
field_ids(std::move(field_ids_p)), encryption_config(std::move(encryption_config_p))
|
|
356
|
+
field_ids(std::move(field_ids_p)), encryption_config(std::move(encryption_config_p)),
|
|
357
|
+
dictionary_compression_ratio_threshold(dictionary_compression_ratio_threshold_p) {
|
|
356
358
|
// initialize the file writer
|
|
357
359
|
writer = make_uniq<BufferedFileWriter>(fs, file_name.c_str(),
|
|
358
360
|
FileFlags::FILE_FLAGS_WRITE | FileFlags::FILE_FLAGS_FILE_CREATE_NEW);
|
|
@@ -55,7 +55,11 @@ AttachedDatabase &Catalog::GetAttached() {
|
|
|
55
55
|
return db;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
const
|
|
58
|
+
const AttachedDatabase &Catalog::GetAttached() const {
|
|
59
|
+
return db;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const string &Catalog::GetName() const {
|
|
59
63
|
return GetAttached().GetName();
|
|
60
64
|
}
|
|
61
65
|
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
|
|
37
37
|
namespace duckdb {
|
|
38
38
|
|
|
39
|
-
void FindForeignKeyInformation(CatalogEntry &entry, AlterForeignKeyType alter_fk_type,
|
|
40
|
-
|
|
39
|
+
static void FindForeignKeyInformation(CatalogEntry &entry, AlterForeignKeyType alter_fk_type,
|
|
40
|
+
vector<unique_ptr<AlterForeignKeyInfo>> &fk_arrays) {
|
|
41
41
|
if (entry.type != CatalogType::TABLE_ENTRY) {
|
|
42
42
|
return;
|
|
43
43
|
}
|
|
@@ -63,6 +63,19 @@ void FindForeignKeyInformation(CatalogEntry &entry, AlterForeignKeyType alter_fk
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
static void LazyLoadIndexes(ClientContext &context, CatalogEntry &entry) {
|
|
67
|
+
if (entry.type == CatalogType::TABLE_ENTRY) {
|
|
68
|
+
auto &table_entry = entry.Cast<TableCatalogEntry>();
|
|
69
|
+
table_entry.GetStorage().info->InitializeIndexes(context);
|
|
70
|
+
} else if (entry.type == CatalogType::INDEX_ENTRY) {
|
|
71
|
+
auto &index_entry = entry.Cast<IndexCatalogEntry>();
|
|
72
|
+
auto &table_entry = Catalog::GetEntry(context, CatalogType::TABLE_ENTRY, index_entry.catalog.GetName(),
|
|
73
|
+
index_entry.GetSchemaName(), index_entry.GetTableName())
|
|
74
|
+
.Cast<TableCatalogEntry>();
|
|
75
|
+
table_entry.GetStorage().info->InitializeIndexes(context);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
66
79
|
DuckSchemaEntry::DuckSchemaEntry(Catalog &catalog, CreateSchemaInfo &info)
|
|
67
80
|
: SchemaCatalogEntry(catalog, info), tables(catalog, make_uniq<DefaultViewGenerator>(catalog, *this)),
|
|
68
81
|
indexes(catalog), table_functions(catalog), copy_functions(catalog), pragma_functions(catalog),
|
|
@@ -82,7 +95,7 @@ unique_ptr<CatalogEntry> DuckSchemaEntry::Copy(ClientContext &context) const {
|
|
|
82
95
|
optional_ptr<CatalogEntry> DuckSchemaEntry::AddEntryInternal(CatalogTransaction transaction,
|
|
83
96
|
unique_ptr<StandardEntry> entry,
|
|
84
97
|
OnCreateConflict on_conflict,
|
|
85
|
-
|
|
98
|
+
LogicalDependencyList dependencies) {
|
|
86
99
|
auto entry_name = entry->name;
|
|
87
100
|
auto entry_type = entry->type;
|
|
88
101
|
auto result = entry.get();
|
|
@@ -184,7 +197,7 @@ optional_ptr<CatalogEntry> DuckSchemaEntry::CreateFunction(CatalogTransaction tr
|
|
|
184
197
|
|
|
185
198
|
optional_ptr<CatalogEntry> DuckSchemaEntry::AddEntry(CatalogTransaction transaction, unique_ptr<StandardEntry> entry,
|
|
186
199
|
OnCreateConflict on_conflict) {
|
|
187
|
-
|
|
200
|
+
LogicalDependencyList dependencies;
|
|
188
201
|
return AddEntryInternal(transaction, std::move(entry), on_conflict, dependencies);
|
|
189
202
|
}
|
|
190
203
|
|
|
@@ -205,7 +218,7 @@ optional_ptr<CatalogEntry> DuckSchemaEntry::CreateView(CatalogTransaction transa
|
|
|
205
218
|
|
|
206
219
|
optional_ptr<CatalogEntry> DuckSchemaEntry::CreateIndex(ClientContext &context, CreateIndexInfo &info,
|
|
207
220
|
TableCatalogEntry &table) {
|
|
208
|
-
|
|
221
|
+
LogicalDependencyList dependencies;
|
|
209
222
|
dependencies.AddDependency(table);
|
|
210
223
|
|
|
211
224
|
// currently, we can not alter PK/FK/UNIQUE constraints
|
|
@@ -287,6 +300,9 @@ void DuckSchemaEntry::DropEntry(ClientContext &context, DropInfo &info) {
|
|
|
287
300
|
CatalogTypeToString(existing_entry->type), CatalogTypeToString(info.type));
|
|
288
301
|
}
|
|
289
302
|
|
|
303
|
+
// if this is a index or table with indexes, initialize any unknown index instances
|
|
304
|
+
LazyLoadIndexes(context, *existing_entry);
|
|
305
|
+
|
|
290
306
|
// if there is a foreign key constraint, get that information
|
|
291
307
|
vector<unique_ptr<AlterForeignKeyInfo>> fk_arrays;
|
|
292
308
|
FindForeignKeyInformation(*existing_entry, AlterForeignKeyType::AFT_DELETE, fk_arrays);
|