duckdb 0.8.2-dev37.0 → 0.8.2-dev3949.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/README.md +7 -0
- package/binding.gyp +29 -13
- package/binding.gyp.in +1 -1
- package/configure.py +11 -3
- package/duckdb_extension_config.cmake +10 -0
- package/package.json +1 -1
- package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
- package/src/duckdb/extension/icu/icu-datefunc.cpp +10 -1
- package/src/duckdb/extension/icu/icu-datepart.cpp +162 -41
- package/src/duckdb/extension/icu/icu-datesub.cpp +3 -2
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +2 -1
- package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
- package/src/duckdb/extension/icu/icu-makedate.cpp +19 -6
- package/src/duckdb/extension/icu/icu-strptime.cpp +5 -24
- package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
- package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
- package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
- package/src/duckdb/extension/icu/icu_extension.cpp +10 -12
- package/src/duckdb/extension/json/buffered_json_reader.cpp +2 -0
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +5 -19
- package/src/duckdb/extension/json/include/json_common.hpp +47 -231
- package/src/duckdb/extension/json/include/json_deserializer.hpp +7 -16
- package/src/duckdb/extension/json/include/json_enums.hpp +60 -0
- package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
- package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
- package/src/duckdb/extension/json/include/json_scan.hpp +14 -10
- package/src/duckdb/extension/json/include/json_serializer.hpp +9 -15
- package/src/duckdb/extension/json/include/json_transform.hpp +3 -0
- package/src/duckdb/extension/json/json_common.cpp +272 -40
- package/src/duckdb/extension/json/json_deserializer.cpp +37 -73
- package/src/duckdb/extension/json/json_enums.cpp +105 -0
- package/src/duckdb/extension/json/json_functions/json_create.cpp +21 -2
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +93 -38
- package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +26 -25
- package/src/duckdb/extension/json/json_scan.cpp +47 -6
- package/src/duckdb/extension/json/json_serializer.cpp +29 -72
- package/src/duckdb/extension/json/serialize_json.cpp +92 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +37 -25
- package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
- package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
- package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
- package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
- package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
- package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_reader.hpp +4 -0
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +1 -0
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +28 -5
- package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
- package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
- package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
- package/src/duckdb/extension/parquet/parquet_extension.cpp +258 -40
- package/src/duckdb/extension/parquet/parquet_reader.cpp +10 -10
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +25 -8
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +6 -0
- package/src/duckdb/extension/parquet/parquet_writer.cpp +149 -31
- package/src/duckdb/extension/parquet/serialize_parquet.cpp +26 -0
- package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
- package/src/duckdb/src/catalog/catalog.cpp +147 -70
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -11
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +17 -41
- package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +2 -10
- package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +4 -14
- package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +11 -28
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +11 -42
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +7 -26
- package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +11 -27
- package/src/duckdb/src/catalog/catalog_entry.cpp +25 -1
- package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
- package/src/duckdb/src/catalog/catalog_set.cpp +0 -63
- package/src/duckdb/src/catalog/default/default_functions.cpp +21 -0
- package/src/duckdb/src/catalog/dependency_manager.cpp +0 -36
- package/src/duckdb/src/common/adbc/adbc.cpp +541 -171
- package/src/duckdb/src/common/adbc/driver_manager.cpp +92 -39
- package/src/duckdb/src/common/adbc/nanoarrow/allocator.cpp +57 -0
- package/src/duckdb/src/common/adbc/nanoarrow/metadata.cpp +121 -0
- package/src/duckdb/src/common/adbc/nanoarrow/schema.cpp +474 -0
- package/src/duckdb/src/common/adbc/nanoarrow/single_batch_array_stream.cpp +84 -0
- package/src/duckdb/src/common/allocator.cpp +14 -2
- package/src/duckdb/src/common/arrow/appender/bool_data.cpp +44 -0
- package/src/duckdb/src/common/arrow/appender/list_data.cpp +78 -0
- package/src/duckdb/src/common/arrow/appender/map_data.cpp +86 -0
- package/src/duckdb/src/common/arrow/appender/struct_data.cpp +45 -0
- package/src/duckdb/src/common/arrow/appender/union_data.cpp +70 -0
- package/src/duckdb/src/common/arrow/arrow_appender.cpp +95 -666
- package/src/duckdb/src/common/arrow/arrow_converter.cpp +65 -37
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +37 -42
- package/src/duckdb/src/common/assert.cpp +3 -0
- package/src/duckdb/src/common/constants.cpp +2 -1
- package/src/duckdb/src/common/enum_util.cpp +4979 -4458
- package/src/duckdb/src/common/enums/date_part_specifier.cpp +2 -0
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
- package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
- package/src/duckdb/src/common/exception.cpp +15 -2
- package/src/duckdb/src/common/extra_type_info.cpp +487 -0
- package/src/duckdb/src/common/field_writer.cpp +1 -1
- package/src/duckdb/src/common/file_system.cpp +46 -12
- package/src/duckdb/src/common/filename_pattern.cpp +1 -1
- package/src/duckdb/src/common/gzip_file_system.cpp +7 -12
- package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
- package/src/duckdb/src/common/http_state.cpp +78 -0
- package/src/duckdb/src/common/local_file_system.cpp +36 -28
- package/src/duckdb/src/common/multi_file_reader.cpp +193 -20
- package/src/duckdb/src/common/operator/cast_operators.cpp +92 -1
- package/src/duckdb/src/common/operator/string_cast.cpp +45 -8
- package/src/duckdb/src/common/radix_partitioning.cpp +34 -39
- package/src/duckdb/src/common/re2_regex.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_aggregate.cpp +18 -3
- package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +63 -73
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +85 -80
- package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +0 -9
- package/src/duckdb/src/common/serializer/format_serializer.cpp +15 -0
- package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
- package/src/duckdb/src/common/sort/partition_state.cpp +102 -74
- package/src/duckdb/src/common/sort/sort_state.cpp +1 -1
- package/src/duckdb/src/common/sort/sorted_block.cpp +1 -1
- package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
- package/src/duckdb/src/common/types/bit.cpp +51 -0
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +68 -2
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +20 -6
- package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
- package/src/duckdb/src/common/types/data_chunk.cpp +46 -10
- package/src/duckdb/src/common/types/date.cpp +15 -0
- package/src/duckdb/src/common/types/hugeint.cpp +40 -0
- package/src/duckdb/src/common/types/hyperloglog.cpp +21 -0
- package/src/duckdb/src/common/types/interval.cpp +6 -0
- package/src/duckdb/src/common/types/list_segment.cpp +56 -198
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +251 -131
- package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +35 -5
- package/src/duckdb/src/common/types/row/row_layout.cpp +3 -31
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +40 -32
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +41 -26
- package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +11 -1
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
- package/src/duckdb/src/common/types/row/tuple_data_segment.cpp +21 -16
- package/src/duckdb/src/common/types/string_heap.cpp +4 -0
- package/src/duckdb/src/common/types/time.cpp +105 -0
- package/src/duckdb/src/common/types/timestamp.cpp +7 -0
- package/src/duckdb/src/common/types/uuid.cpp +2 -2
- package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
- package/src/duckdb/src/common/types/value.cpp +99 -60
- package/src/duckdb/src/common/types/vector.cpp +73 -80
- package/src/duckdb/src/common/types.cpp +38 -724
- package/src/duckdb/src/common/virtual_file_system.cpp +142 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +26 -0
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +5 -7
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +64 -19
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +30 -0
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +1 -0
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +83 -59
- package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
- package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
- package/src/duckdb/src/core_functions/function_list.cpp +10 -4
- package/src/duckdb/src/core_functions/scalar/date/date_diff.cpp +2 -0
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +380 -89
- package/src/duckdb/src/core_functions/scalar/date/date_sub.cpp +2 -0
- package/src/duckdb/src/core_functions/scalar/date/date_trunc.cpp +4 -0
- package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +10 -0
- package/src/duckdb/src/core_functions/scalar/debug/vector_type.cpp +23 -0
- package/src/duckdb/src/core_functions/scalar/enum/enum_functions.cpp +16 -12
- package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +3 -1
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +314 -82
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
- package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +23 -3
- package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/string/to_base.cpp +66 -0
- package/src/duckdb/src/core_functions/scalar/union/union_tag.cpp +1 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +226 -346
- package/src/duckdb/src/execution/column_binding_resolver.cpp +10 -7
- package/src/duckdb/src/execution/expression_executor/execute_parameter.cpp +2 -2
- package/src/duckdb/src/execution/expression_executor.cpp +1 -1
- package/src/duckdb/src/execution/index/art/art.cpp +219 -259
- package/src/duckdb/src/execution/index/art/art_key.cpp +0 -11
- package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +11 -15
- package/src/duckdb/src/execution/index/art/iterator.cpp +130 -214
- package/src/duckdb/src/execution/index/art/leaf.cpp +300 -266
- package/src/duckdb/src/execution/index/art/node.cpp +211 -205
- package/src/duckdb/src/execution/index/art/node16.cpp +10 -19
- package/src/duckdb/src/execution/index/art/node256.cpp +10 -18
- package/src/duckdb/src/execution/index/art/node4.cpp +21 -23
- package/src/duckdb/src/execution/index/art/node48.cpp +10 -20
- package/src/duckdb/src/execution/index/art/prefix.cpp +308 -338
- package/src/duckdb/src/execution/join_hashtable.cpp +9 -10
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +250 -317
- package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +6 -4
- package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +231 -190
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +367 -1068
- package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/base_csv_reader.cpp +157 -174
- package/src/duckdb/src/execution/operator/csv_scanner/buffered_csv_reader.cpp +434 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer.cpp +80 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_buffer_manager.cpp +90 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_file_handle.cpp +95 -0
- package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/csv_reader_options.cpp +67 -28
- package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine.cpp +35 -0
- package/src/duckdb/src/execution/operator/csv_scanner/csv_state_machine_cache.cpp +107 -0
- package/src/duckdb/src/execution/operator/{persistent → csv_scanner}/parallel_csv_reader.cpp +46 -47
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +52 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +336 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +165 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +398 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +175 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +39 -0
- package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
- package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +12 -9
- package/src/duckdb/src/execution/operator/helper/physical_explain_analyze.cpp +2 -2
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +10 -8
- package/src/duckdb/src/execution/operator/helper/physical_load.cpp +2 -1
- package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +7 -5
- package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +3 -1
- package/src/duckdb/src/execution/operator/helper/physical_set.cpp +3 -1
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +7 -5
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +449 -288
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -2
- package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +13 -6
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +28 -15
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +35 -17
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +7 -4
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +31 -10
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
- package/src/duckdb/src/execution/operator/order/physical_order.cpp +7 -5
- package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +7 -5
- package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +14 -10
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +11 -9
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +9 -7
- package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +14 -12
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +11 -11
- package/src/duckdb/src/execution/operator/persistent/physical_update.cpp +4 -2
- package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +24 -27
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
- package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -12
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +2 -1
- package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +198 -0
- package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +2 -6
- package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +16 -7
- package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +37 -6
- package/src/duckdb/src/execution/physical_operator.cpp +20 -16
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
- package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +57 -35
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +32 -15
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +45 -34
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
- package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +2 -5
- package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
- package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
- package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -11
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +636 -349
- package/src/duckdb/src/execution/window_executor.cpp +1285 -0
- package/src/duckdb/src/execution/window_segment_tree.cpp +408 -144
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +2 -13
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +6 -12
- package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
- package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
- package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -0
- package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
- package/src/duckdb/src/function/cast/string_cast.cpp +2 -2
- package/src/duckdb/src/function/cast/time_casts.cpp +7 -6
- package/src/duckdb/src/function/function.cpp +3 -1
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +7 -1
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
- package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +9 -0
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +6 -3
- package/src/duckdb/src/function/scalar/strftime_format.cpp +4 -4
- package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +39 -5
- package/src/duckdb/src/function/scalar_function.cpp +5 -20
- package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +57 -0
- package/src/duckdb/src/function/table/arrow.cpp +110 -88
- package/src/duckdb/src/function/table/arrow_conversion.cpp +86 -73
- package/src/duckdb/src/function/table/copy_csv.cpp +102 -97
- package/src/duckdb/src/function/table/read_csv.cpp +263 -141
- package/src/duckdb/src/function/table/system/test_all_types.cpp +48 -21
- package/src/duckdb/src/function/table/system_functions.cpp +1 -0
- package/src/duckdb/src/function/table/table_scan.cpp +42 -0
- package/src/duckdb/src/function/table/version/pragma_version.cpp +49 -2
- package/src/duckdb/src/function/table_function.cpp +4 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +20 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +3 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/macro_catalog_entry.hpp +1 -4
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +2 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -6
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +2 -13
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -4
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +14 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +0 -6
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1 -0
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +4 -1
- package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +16 -0
- package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/append_data.hpp +109 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/bool_data.hpp +15 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/enum_data.hpp +69 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/list.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/list_data.hpp +18 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/map_data.hpp +18 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/scalar_data.hpp +88 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/struct_data.hpp +18 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/union_data.hpp +21 -0
- package/src/duckdb/src/include/duckdb/common/arrow/appender/varchar_data.hpp +105 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_appender.hpp +9 -4
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_converter.hpp +3 -5
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +5 -3
- package/src/duckdb/src/include/duckdb/common/arrow/nanoarrow/nanoarrow.h +462 -0
- package/src/duckdb/src/include/duckdb/common/arrow/nanoarrow/nanoarrow.hpp +14 -0
- package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/assert.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +70 -55
- package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
- package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/constants.hpp +4 -0
- package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +681 -577
- package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
- package/src/duckdb/src/include/duckdb/common/enums/date_part_specifier.hpp +9 -1
- package/src/duckdb/src/include/duckdb/common/enums/index_type.hpp +4 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/operator_result_type.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/pending_execution_result.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +15 -1
- package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +215 -0
- package/src/duckdb/src/include/duckdb/common/field_writer.hpp +0 -4
- package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/file_system.hpp +10 -8
- package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +208 -0
- package/src/duckdb/src/include/duckdb/common/helper.hpp +8 -3
- package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +61 -28
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +15 -0
- package/src/duckdb/src/include/duckdb/common/index_vector.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/limits.hpp +52 -149
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +11 -5
- package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +12 -42
- package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +48 -0
- package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/operator/add.hpp +5 -2
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +65 -4
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/perfect_map_set.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/printer.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
- package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +71 -30
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +48 -39
- package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +0 -4
- package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +128 -0
- package/src/duckdb/src/include/duckdb/common/serializer/encoding_util.hpp +132 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +186 -133
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +166 -121
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +27 -4
- package/src/duckdb/src/include/duckdb/common/serializer.hpp +0 -7
- package/src/duckdb/src/include/duckdb/common/shared_ptr.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +34 -13
- package/src/duckdb/src/include/duckdb/common/stack_checker.hpp +34 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
- package/src/duckdb/src/include/duckdb/common/type_util.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/typedefs.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +11 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +12 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +6 -3
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +9 -5
- package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +46 -3
- package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +11 -15
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +46 -11
- package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection_scanner.hpp +10 -1
- package/src/duckdb/src/include/duckdb/common/types/row/row_layout.hpp +1 -23
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_allocator.hpp +14 -8
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +7 -3
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +13 -8
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +5 -0
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +16 -10
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +10 -3
- package/src/duckdb/src/include/duckdb/common/types.hpp +6 -25
- package/src/duckdb/src/include/duckdb/common/vector.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +40 -97
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +4 -2
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -11
- package/src/duckdb/src/include/duckdb/core_functions/scalar/debug_functions.hpp +27 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +7 -5
- package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +6 -4
- package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +4 -2
- package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +12 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +128 -131
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +13 -12
- package/src/duckdb/src/include/duckdb/execution/index/art/art_key.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/index/art/fixed_size_allocator.hpp +22 -24
- package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +32 -28
- package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +46 -51
- package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +134 -53
- package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +5 -7
- package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +5 -7
- package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +7 -9
- package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +5 -7
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +8 -7
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_ungrouped_aggregate.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +6 -5
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +2 -2
- 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_limit.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_materialized_collector.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +5 -12
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +3 -3
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_copy_to_file.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_fixed_batch_copy.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_insert.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_update.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/base_csv_reader.hpp +19 -19
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/buffered_csv_reader.hpp +72 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer.hpp +110 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_buffer_manager.hpp +103 -0
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_file_handle.hpp +8 -15
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_line_info.hpp +5 -4
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/csv_reader_options.hpp +61 -28
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_sniffer.hpp +127 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine.hpp +75 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/csv_state_machine_cache.hpp +51 -0
- package/src/duckdb/src/include/duckdb/execution/operator/{persistent → scan/csv}/parallel_csv_reader.hpp +22 -28
- package/src/duckdb/src/include/duckdb/execution/operator/scan/csv/quote_rules.hpp +21 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -5
- package/src/duckdb/src/include/duckdb/execution/operator/schema/{physical_create_index.hpp → physical_create_art_index.hpp} +14 -7
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
- package/src/duckdb/src/include/duckdb/execution/perfect_aggregate_hashtable.hpp +4 -2
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +6 -5
- package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +11 -0
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +19 -21
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +313 -0
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +79 -63
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +12 -4
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -1
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +80 -0
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +12 -4
- package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +8 -3
- package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +99 -0
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +6 -36
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +24 -12
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +5 -1
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -0
- package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/udf_function.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +4 -3
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +29 -0
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +43 -0
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +7 -2
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +16 -14
- package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +1 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/client_properties.hpp +25 -0
- package/src/duckdb/src/include/duckdb/main/config.hpp +16 -1
- package/src/duckdb/src/include/duckdb/main/connection.hpp +3 -4
- package/src/duckdb/src/include/duckdb/main/extension/generated_extension_loader.hpp +27 -0
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +210 -144
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +34 -3
- package/src/duckdb/src/include/duckdb/main/extension_util.hpp +4 -0
- package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -0
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +73 -5
- package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +2 -27
- package/src/duckdb/src/include/duckdb/main/relation/aggregate_relation.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
- package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
- package/src/duckdb/src/include/duckdb/main/settings.hpp +71 -11
- package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
- package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
- package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +7 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +38 -64
- package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +37 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +14 -29
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +8 -22
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -12
- package/src/duckdb/src/include/duckdb/optimizer/join_order/plan_enumerator.hpp +89 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +19 -30
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +113 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +73 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +73 -0
- package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
- package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
- package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
- package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +12 -1
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -3
- package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -2
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +9 -1
- package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +6 -5
- package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/constraint.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/constraints/check_constraint.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/constraints/foreign_key_constraint.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/constraints/not_null_constraint.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +6 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +21 -4
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +18 -2
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/parser/group_by_node.hpp +11 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +12 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +66 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +8 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_info.hpp +8 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +9 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +9 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_sequence_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/detach_info.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/exported_table_data.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/load_info.hpp +17 -3
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +22 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +10 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/show_select_info.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/transaction_info.hpp +10 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +10 -0
- package/src/duckdb/src/include/duckdb/parser/parser.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/execute_statement.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +23 -26
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +16 -5
- package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +0 -8
- package/src/duckdb/src/include/duckdb/planner/bound_parameter_map.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +9 -0
- package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +3 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_data.hpp +24 -6
- package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +9 -2
- package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +13 -1
- package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/joinside.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -2
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/operator/logical_aggregate.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_any_join.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_column_data_get.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +12 -7
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create.hpp +9 -6
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_index.hpp +12 -23
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_table.hpp +10 -6
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cross_product.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +9 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_delete.hpp +7 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +6 -10
- package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_empty_result.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +8 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_filter.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +11 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_limit.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_limit_percent.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +52 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_order.hpp +7 -35
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_positional_join.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_projection.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +10 -7
- package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_sample.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_simple.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_unnest.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_update.hpp +6 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_window.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/planner.hpp +4 -3
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
- package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +7 -1
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/block.hpp +33 -4
- package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +11 -11
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +5 -5
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_reader.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +19 -16
- package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/in_memory_block_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +88 -0
- package/src/duckdb/src/include/duckdb/storage/metadata/metadata_reader.hpp +54 -0
- package/src/duckdb/src/include/duckdb/storage/metadata/metadata_writer.hpp +45 -0
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +8 -5
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +7 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +18 -3
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
- package/src/duckdb/src/include/duckdb/storage/table_io_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +3 -4
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
- package/src/duckdb/src/include/duckdb/verification/deserialized_statement_verifier_v2.hpp +6 -0
- package/src/duckdb/src/include/duckdb/verification/prepared_statement_verifier.hpp +1 -1
- package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +1 -0
- package/src/duckdb/src/include/duckdb.h +98 -1
- package/src/duckdb/src/main/appender.cpp +3 -1
- package/src/duckdb/src/main/attached_database.cpp +2 -2
- package/src/duckdb/src/main/capi/arrow-c.cpp +196 -8
- package/src/duckdb/src/main/capi/duckdb-c.cpp +16 -0
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
- package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -0
- package/src/duckdb/src/main/capi/pending-c.cpp +23 -0
- package/src/duckdb/src/main/capi/prepared-c.cpp +106 -28
- package/src/duckdb/src/main/capi/result-c.cpp +3 -1
- package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +53 -0
- package/src/duckdb/src/main/chunk_scan_state.cpp +48 -0
- package/src/duckdb/src/main/client_context.cpp +42 -19
- package/src/duckdb/src/main/client_context_file_opener.cpp +17 -0
- package/src/duckdb/src/main/client_verify.cpp +18 -0
- package/src/duckdb/src/main/config.cpp +9 -3
- package/src/duckdb/src/main/connection.cpp +3 -3
- package/src/duckdb/src/main/database.cpp +2 -11
- package/src/duckdb/src/main/db_instance_cache.cpp +14 -6
- package/src/duckdb/src/main/extension/extension_helper.cpp +164 -88
- package/src/duckdb/src/main/extension/extension_install.cpp +56 -8
- package/src/duckdb/src/main/extension/extension_load.cpp +26 -6
- package/src/duckdb/src/main/extension/extension_util.cpp +16 -0
- package/src/duckdb/src/main/pending_query_result.cpp +9 -1
- package/src/duckdb/src/main/prepared_statement.cpp +38 -11
- package/src/duckdb/src/main/prepared_statement_data.cpp +23 -18
- package/src/duckdb/src/main/query_result.cpp +0 -21
- package/src/duckdb/src/main/relation/aggregate_relation.cpp +20 -10
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
- package/src/duckdb/src/main/relation/join_relation.cpp +6 -6
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +19 -13
- package/src/duckdb/src/main/relation.cpp +10 -9
- package/src/duckdb/src/main/settings/settings.cpp +125 -33
- package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +2 -4
- package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
- package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
- package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
- package/src/duckdb/src/optimizer/compressed_materialization.cpp +477 -0
- package/src/duckdb/src/optimizer/deliminator.cpp +180 -323
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +23 -6
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +79 -325
- package/src/duckdb/src/optimizer/join_order/cost_model.cpp +19 -0
- package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
- package/src/duckdb/src/optimizer/join_order/join_node.cpp +5 -37
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +48 -1047
- package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
- package/src/duckdb/src/optimizer/join_order/plan_enumerator.cpp +552 -0
- package/src/duckdb/src/optimizer/join_order/query_graph.cpp +52 -41
- package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +409 -0
- package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +356 -0
- package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +351 -0
- package/src/duckdb/src/optimizer/optimizer.cpp +49 -14
- package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
- package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
- package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +34 -7
- package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
- package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
- package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
- package/src/duckdb/src/optimizer/topn_optimizer.cpp +27 -10
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +3 -5
- package/src/duckdb/src/parallel/executor.cpp +25 -1
- package/src/duckdb/src/parallel/pipeline.cpp +0 -17
- package/src/duckdb/src/parallel/pipeline_executor.cpp +33 -13
- package/src/duckdb/src/parallel/pipeline_finish_event.cpp +55 -1
- package/src/duckdb/src/parallel/task_scheduler.cpp +18 -2
- package/src/duckdb/src/parser/column_definition.cpp +20 -32
- package/src/duckdb/src/parser/column_list.cpp +8 -0
- package/src/duckdb/src/parser/constraints/foreign_key_constraint.cpp +3 -0
- package/src/duckdb/src/parser/constraints/unique_constraint.cpp +3 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
- package/src/duckdb/src/parser/expression/case_expression.cpp +0 -25
- package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
- package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
- package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
- package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
- package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +7 -19
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
- package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
- package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
- package/src/duckdb/src/parser/parsed_data/alter_info.cpp +5 -2
- package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +38 -0
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +17 -1
- package/src/duckdb/src/parser/parsed_data/create_sequence_info.cpp +2 -0
- package/src/duckdb/src/parser/parsed_data/detach_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/drop_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +0 -18
- package/src/duckdb/src/parser/parsed_data/transaction_info.cpp +4 -1
- package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -1
- package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
- package/src/duckdb/src/parser/parser.cpp +62 -36
- package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
- package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
- package/src/duckdb/src/parser/query_node.cpp +15 -47
- package/src/duckdb/src/parser/result_modifier.cpp +0 -87
- package/src/duckdb/src/parser/statement/execute_statement.cpp +2 -2
- package/src/duckdb/src/parser/statement/select_statement.cpp +0 -10
- package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
- package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
- package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -55
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
- package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
- package/src/duckdb/src/parser/tableref.cpp +0 -44
- package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +55 -38
- package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +13 -4
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
- package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +3 -0
- package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
- package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +45 -26
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +16 -1
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +32 -17
- package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
- package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
- package/src/duckdb/src/parser/transform/statement/transform_load.cpp +1 -0
- package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
- package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +28 -6
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
- package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
- package/src/duckdb/src/parser/transformer.cpp +44 -25
- package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +5 -3
- package/src/duckdb/src/planner/binder/expression/bind_parameter_expression.cpp +10 -10
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
- package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +36 -33
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +1 -1
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +14 -52
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +0 -23
- package/src/duckdb/src/planner/binder/statement/bind_execute.cpp +13 -7
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +70 -29
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +93 -28
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -50
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +67 -31
- package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
- package/src/duckdb/src/planner/binder.cpp +44 -31
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +24 -1
- package/src/duckdb/src/planner/expression/bound_between_expression.cpp +4 -0
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +13 -8
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +22 -0
- package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +28 -20
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +48 -4
- package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +5 -4
- package/src/duckdb/src/planner/expression_binder.cpp +23 -0
- package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
- package/src/duckdb/src/planner/logical_operator.cpp +19 -7
- package/src/duckdb/src/planner/logical_operator_visitor.cpp +5 -6
- package/src/duckdb/src/planner/operator/logical_comparison_join.cpp +4 -2
- package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +8 -0
- package/src/duckdb/src/planner/operator/logical_create.cpp +14 -0
- package/src/duckdb/src/planner/operator/logical_create_index.cpp +36 -7
- package/src/duckdb/src/planner/operator/logical_create_table.cpp +16 -0
- package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
- package/src/duckdb/src/planner/operator/logical_delete.cpp +9 -2
- package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
- package/src/duckdb/src/planner/operator/logical_distinct.cpp +13 -0
- package/src/duckdb/src/planner/operator/logical_explain.cpp +1 -1
- package/src/duckdb/src/planner/operator/logical_extension_operator.cpp +39 -0
- package/src/duckdb/src/planner/operator/logical_get.cpp +82 -4
- package/src/duckdb/src/planner/operator/logical_insert.cpp +8 -2
- package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +22 -0
- package/src/duckdb/src/planner/operator/logical_order.cpp +39 -0
- package/src/duckdb/src/planner/operator/logical_pivot.cpp +3 -0
- package/src/duckdb/src/planner/operator/logical_recursive_cte.cpp +5 -5
- package/src/duckdb/src/planner/operator/logical_sample.cpp +3 -0
- package/src/duckdb/src/planner/operator/logical_update.cpp +8 -2
- package/src/duckdb/src/planner/parsed_data/bound_create_table_info.cpp +4 -2
- package/src/duckdb/src/planner/planner.cpp +18 -7
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
- package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
- package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
- package/src/duckdb/src/storage/arena_allocator.cpp +13 -2
- package/src/duckdb/src/storage/buffer/block_manager.cpp +13 -9
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +3 -4
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +7 -7
- package/src/duckdb/src/storage/checkpoint_manager.cpp +78 -72
- package/src/duckdb/src/storage/compression/bitpacking.cpp +87 -63
- package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +295 -0
- package/src/duckdb/src/storage/compression/fsst.cpp +1 -1
- package/src/duckdb/src/storage/compression/rle.cpp +52 -13
- package/src/duckdb/src/storage/data_table.cpp +36 -25
- package/src/duckdb/src/storage/index.cpp +4 -26
- package/src/duckdb/src/storage/local_storage.cpp +3 -4
- package/src/duckdb/src/storage/metadata/metadata_manager.cpp +267 -0
- package/src/duckdb/src/storage/metadata/metadata_reader.cpp +80 -0
- package/src/duckdb/src/storage/metadata/metadata_writer.cpp +86 -0
- package/src/duckdb/src/storage/serialization/serialize_constraint.cpp +98 -0
- package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +194 -0
- package/src/duckdb/src/storage/serialization/serialize_expression.cpp +283 -0
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +762 -0
- package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +62 -0
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +461 -0
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +421 -0
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +342 -0
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
- package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +97 -0
- package/src/duckdb/src/storage/serialization/serialize_statement.cpp +22 -0
- package/src/duckdb/src/storage/serialization/serialize_storage.cpp +39 -0
- package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +97 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +164 -0
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +69 -51
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +67 -4
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +16 -0
- package/src/duckdb/src/storage/statistics/list_stats.cpp +21 -0
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +126 -1
- package/src/duckdb/src/storage/statistics/string_stats.cpp +44 -2
- package/src/duckdb/src/storage/statistics/struct_stats.cpp +27 -0
- package/src/duckdb/src/storage/storage_info.cpp +3 -2
- package/src/duckdb/src/storage/storage_manager.cpp +11 -5
- package/src/duckdb/src/storage/table/chunk_info.cpp +99 -3
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +3 -3
- package/src/duckdb/src/storage/table/list_column_data.cpp +6 -3
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +1 -2
- package/src/duckdb/src/storage/table/row_group.cpp +102 -20
- package/src/duckdb/src/storage/table/row_group_collection.cpp +23 -19
- package/src/duckdb/src/storage/table/table_statistics.cpp +21 -0
- package/src/duckdb/src/storage/table/update_segment.cpp +1 -1
- package/src/duckdb/src/storage/table_index_list.cpp +1 -1
- package/src/duckdb/src/storage/wal_replay.cpp +26 -26
- package/src/duckdb/src/storage/write_ahead_log.cpp +3 -2
- package/src/duckdb/src/verification/deserialized_statement_verifier_v2.cpp +15 -1
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +16 -11
- package/src/duckdb/src/verification/statement_verifier.cpp +2 -0
- package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
- package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +5 -2
- package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
- package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +11 -0
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
- package/src/duckdb/third_party/libpg_query/pg_functions.cpp +13 -0
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11019 -10364
- package/src/duckdb/third_party/libpg_query/src_backend_parser_scansup.cpp +9 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +10 -0
- package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +31 -1
- package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +8 -0
- package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
- package/src/duckdb/ub_src_common.cpp +4 -0
- package/src/duckdb/ub_src_common_adbc_nanoarrow.cpp +8 -0
- package/src/duckdb/ub_src_common_arrow_appender.cpp +10 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_debug.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_string.cpp +2 -0
- package/src/duckdb/ub_src_execution.cpp +2 -2
- package/src/duckdb/ub_src_execution_index_art.cpp +0 -6
- package/src/duckdb/ub_src_execution_operator_csv_scanner.cpp +18 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_sniffer.cpp +12 -0
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +1 -11
- package/src/duckdb/ub_src_execution_operator_schema.cpp +1 -1
- package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
- package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
- package/src/duckdb/ub_src_function_table_arrow.cpp +2 -0
- package/src/duckdb/ub_src_main.cpp +2 -0
- package/src/duckdb/ub_src_main_chunk_scan_state.cpp +2 -0
- package/src/duckdb/ub_src_optimizer.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_join_order.cpp +10 -0
- package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
- package/src/duckdb/ub_src_parser.cpp +0 -2
- package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
- package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
- package/src/duckdb/ub_src_planner_operator.cpp +3 -3
- package/src/duckdb/ub_src_storage.cpp +0 -4
- package/src/duckdb/ub_src_storage_compression.cpp +2 -0
- package/src/duckdb/ub_src_storage_metadata.cpp +6 -0
- package/src/duckdb/ub_src_storage_serialization.cpp +30 -0
- package/src/duckdb_node.hpp +1 -0
- package/src/statement.cpp +10 -5
- package/test/columns.test.ts +25 -3
- package/test/extension.test.ts +1 -1
- package/test/test_all_types.test.ts +234 -0
- package/tsconfig.json +1 -0
- package/src/duckdb/src/execution/index/art/leaf_segment.cpp +0 -52
- package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
- package/src/duckdb/src/execution/index/art/swizzleable_pointer.cpp +0 -22
- package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +0 -1487
- package/src/duckdb/src/execution/operator/persistent/csv_buffer.cpp +0 -72
- package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +0 -158
- package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +0 -193
- package/src/duckdb/src/execution/partitionable_hashtable.cpp +0 -172
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_options.hpp +0 -25
- package/src/duckdb/src/include/duckdb/execution/index/art/leaf_segment.hpp +0 -38
- package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
- package/src/duckdb/src/include/duckdb/execution/index/art/swizzleable_pointer.hpp +0 -58
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/buffered_csv_reader.hpp +0 -133
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +0 -74
- package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +0 -69
- package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +0 -27
- package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_join.hpp +0 -32
- package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +0 -49
- package/src/duckdb/src/include/duckdb/storage/meta_block_writer.hpp +0 -50
- package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
- package/src/duckdb/src/parser/common_table_expression_info.cpp +0 -19
- package/src/duckdb/src/planner/operator/logical_asof_join.cpp +0 -14
- package/src/duckdb/src/planner/operator/logical_delim_join.cpp +0 -27
- package/src/duckdb/src/storage/meta_block_reader.cpp +0 -78
- package/src/duckdb/src/storage/meta_block_writer.cpp +0 -80
@@ -6,12 +6,14 @@
|
|
6
6
|
|
7
7
|
#include "duckdb.h"
|
8
8
|
#include "duckdb/common/arrow/arrow_wrapper.hpp"
|
9
|
-
#include "duckdb/common/arrow/
|
9
|
+
#include "duckdb/common/arrow/nanoarrow/nanoarrow.hpp"
|
10
10
|
|
11
11
|
#ifndef DUCKDB_AMALGAMATION
|
12
12
|
#include "duckdb/main/connection.hpp"
|
13
13
|
#endif
|
14
14
|
|
15
|
+
#include "duckdb/common/adbc/single_batch_array_stream.hpp"
|
16
|
+
|
15
17
|
#include <string.h>
|
16
18
|
#include <stdlib.h>
|
17
19
|
|
@@ -33,7 +35,7 @@ duckdb_adbc::AdbcStatusCode duckdb_adbc_init(size_t count, struct duckdb_adbc::A
|
|
33
35
|
driver->ConnectionGetTableTypes = duckdb_adbc::ConnectionGetTableTypes;
|
34
36
|
driver->StatementNew = duckdb_adbc::StatementNew;
|
35
37
|
driver->StatementRelease = duckdb_adbc::StatementRelease;
|
36
|
-
|
38
|
+
driver->StatementBind = duckdb_adbc::StatementBind;
|
37
39
|
driver->StatementBindStream = duckdb_adbc::StatementBindStream;
|
38
40
|
driver->StatementExecuteQuery = duckdb_adbc::StatementExecuteQuery;
|
39
41
|
driver->StatementPrepare = duckdb_adbc::StatementPrepare;
|
@@ -44,18 +46,48 @@ duckdb_adbc::AdbcStatusCode duckdb_adbc_init(size_t count, struct duckdb_adbc::A
|
|
44
46
|
driver->ConnectionRollback = duckdb_adbc::ConnectionRollback;
|
45
47
|
driver->ConnectionReadPartition = duckdb_adbc::ConnectionReadPartition;
|
46
48
|
driver->StatementExecutePartitions = duckdb_adbc::StatementExecutePartitions;
|
49
|
+
driver->ConnectionGetInfo = duckdb_adbc::ConnectionGetInfo;
|
50
|
+
driver->StatementGetParameterSchema = duckdb_adbc::StatementGetParameterSchema;
|
51
|
+
driver->ConnectionGetTableSchema = duckdb_adbc::ConnectionGetTableSchema;
|
52
|
+
driver->StatementSetSubstraitPlan = duckdb_adbc::StatementSetSubstraitPlan;
|
53
|
+
|
54
|
+
driver->ConnectionGetInfo = duckdb_adbc::ConnectionGetInfo;
|
55
|
+
driver->StatementGetParameterSchema = duckdb_adbc::StatementGetParameterSchema;
|
47
56
|
return ADBC_STATUS_OK;
|
48
57
|
}
|
49
58
|
|
50
59
|
namespace duckdb_adbc {
|
51
|
-
|
52
|
-
|
53
|
-
|
60
|
+
|
61
|
+
enum class IngestionMode { CREATE = 0, APPEND = 1 };
|
62
|
+
struct DuckDBAdbcStatementWrapper {
|
63
|
+
::duckdb_connection connection;
|
64
|
+
::duckdb_arrow result;
|
65
|
+
::duckdb_prepared_statement statement;
|
66
|
+
char *ingestion_table_name;
|
67
|
+
ArrowArrayStream ingestion_stream;
|
68
|
+
IngestionMode ingestion_mode = IngestionMode::CREATE;
|
69
|
+
};
|
70
|
+
|
71
|
+
static AdbcStatusCode QueryInternal(struct AdbcConnection *connection, struct ArrowArrayStream *out, const char *query,
|
72
|
+
struct AdbcError *error) {
|
73
|
+
AdbcStatement statement;
|
74
|
+
|
75
|
+
auto status = StatementNew(connection, &statement, error);
|
76
|
+
if (status != ADBC_STATUS_OK) {
|
77
|
+
SetError(error, "unable to initialize statement");
|
78
|
+
return status;
|
54
79
|
}
|
55
|
-
|
56
|
-
|
57
|
-
|
80
|
+
status = StatementSetSqlQuery(&statement, query, error);
|
81
|
+
if (status != ADBC_STATUS_OK) {
|
82
|
+
SetError(error, "unable to initialize statement");
|
83
|
+
return status;
|
58
84
|
}
|
85
|
+
status = StatementExecuteQuery(&statement, out, nullptr, error);
|
86
|
+
if (status != ADBC_STATUS_OK) {
|
87
|
+
SetError(error, "unable to initialize statement");
|
88
|
+
return status;
|
89
|
+
}
|
90
|
+
|
59
91
|
return ADBC_STATUS_OK;
|
60
92
|
}
|
61
93
|
|
@@ -68,12 +100,20 @@ struct DuckDBAdbcDatabaseWrapper {
|
|
68
100
|
std::string path;
|
69
101
|
};
|
70
102
|
|
71
|
-
void
|
103
|
+
static void EmptyErrorRelease(AdbcError *error) {
|
104
|
+
// The object is valid but doesn't contain any data that needs to be cleaned up
|
105
|
+
// Just set the release to nullptr to indicate that it's no longer valid.
|
106
|
+
error->release = nullptr;
|
107
|
+
return;
|
108
|
+
}
|
109
|
+
|
110
|
+
void InitializeADBCError(AdbcError *error) {
|
72
111
|
if (!error) {
|
73
112
|
return;
|
74
113
|
}
|
75
114
|
error->message = nullptr;
|
76
|
-
|
115
|
+
// Don't set to nullptr, as that indicates that it's invalid
|
116
|
+
error->release = EmptyErrorRelease;
|
77
117
|
std::memset(error->sqlstate, '\0', sizeof(error->sqlstate));
|
78
118
|
error->vendor_code = -1;
|
79
119
|
}
|
@@ -91,34 +131,55 @@ AdbcStatusCode CheckResult(duckdb_state &res, AdbcError *error, const char *erro
|
|
91
131
|
}
|
92
132
|
|
93
133
|
AdbcStatusCode DatabaseNew(struct AdbcDatabase *database, struct AdbcError *error) {
|
94
|
-
|
95
|
-
|
96
|
-
return
|
134
|
+
if (!database) {
|
135
|
+
SetError(error, "Missing database object");
|
136
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
97
137
|
}
|
98
138
|
database->private_data = nullptr;
|
99
139
|
// you can't malloc a struct with a non-trivial C++ constructor
|
100
140
|
// and std::string has a non-trivial constructor. so we need
|
101
141
|
// to use new and delete rather than malloc and free.
|
102
|
-
auto wrapper = new DuckDBAdbcDatabaseWrapper;
|
103
|
-
|
104
|
-
|
105
|
-
return
|
142
|
+
auto wrapper = new (std::nothrow) DuckDBAdbcDatabaseWrapper;
|
143
|
+
if (!wrapper) {
|
144
|
+
SetError(error, "Allocation error");
|
145
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
106
146
|
}
|
107
147
|
database->private_data = wrapper;
|
108
148
|
auto res = duckdb_create_config(&wrapper->config);
|
109
149
|
return CheckResult(res, error, "Failed to allocate");
|
110
150
|
}
|
111
151
|
|
152
|
+
AdbcStatusCode StatementSetSubstraitPlan(struct AdbcStatement *statement, const uint8_t *plan, size_t length,
|
153
|
+
struct AdbcError *error) {
|
154
|
+
if (!statement) {
|
155
|
+
SetError(error, "Statement is not set");
|
156
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
157
|
+
}
|
158
|
+
if (!plan) {
|
159
|
+
SetError(error, "Substrait Plan is not set");
|
160
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
161
|
+
}
|
162
|
+
if (length == 0) {
|
163
|
+
SetError(error, "Can't execute plan with size = 0");
|
164
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
165
|
+
}
|
166
|
+
auto wrapper = reinterpret_cast<DuckDBAdbcStatementWrapper *>(statement->private_data);
|
167
|
+
auto plan_str = std::string(reinterpret_cast<const char *>(plan), length);
|
168
|
+
auto query = "CALL from_substrait('" + plan_str + "'::BLOB)";
|
169
|
+
auto res = duckdb_prepare(wrapper->connection, query.c_str(), &wrapper->statement);
|
170
|
+
auto error_msg = duckdb_prepare_error(wrapper->statement);
|
171
|
+
return CheckResult(res, error, error_msg);
|
172
|
+
}
|
173
|
+
|
112
174
|
AdbcStatusCode DatabaseSetOption(struct AdbcDatabase *database, const char *key, const char *value,
|
113
175
|
struct AdbcError *error) {
|
114
|
-
|
115
|
-
|
116
|
-
return
|
176
|
+
if (!database) {
|
177
|
+
SetError(error, "Missing database object");
|
178
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
117
179
|
}
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
return status;
|
180
|
+
if (!key) {
|
181
|
+
SetError(error, "Missing key");
|
182
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
122
183
|
}
|
123
184
|
|
124
185
|
auto wrapper = (DuckDBAdbcDatabaseWrapper *)database->private_data;
|
@@ -159,10 +220,49 @@ AdbcStatusCode DatabaseRelease(struct AdbcDatabase *database, struct AdbcError *
|
|
159
220
|
return ADBC_STATUS_OK;
|
160
221
|
}
|
161
222
|
|
223
|
+
AdbcStatusCode ConnectionGetTableSchema(struct AdbcConnection *connection, const char *catalog, const char *db_schema,
|
224
|
+
const char *table_name, struct ArrowSchema *schema, struct AdbcError *error) {
|
225
|
+
if (!connection) {
|
226
|
+
SetError(error, "Connection is not set");
|
227
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
228
|
+
}
|
229
|
+
if (db_schema == nullptr) {
|
230
|
+
// if schema is not set, we use the default schema
|
231
|
+
db_schema = "main";
|
232
|
+
}
|
233
|
+
if (catalog != nullptr && strlen(catalog) > 0) {
|
234
|
+
// In DuckDB this is the name of the database, not sure what's the expected functionality here, so for now,
|
235
|
+
// scream.
|
236
|
+
SetError(error, "Catalog Name is not used in DuckDB. It must be set to nullptr or an empty string");
|
237
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
238
|
+
} else if (table_name == nullptr) {
|
239
|
+
SetError(error, "AdbcConnectionGetTableSchema: must provide table_name");
|
240
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
241
|
+
} else if (strlen(table_name) == 0) {
|
242
|
+
SetError(error, "AdbcConnectionGetTableSchema: must provide table_name");
|
243
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
244
|
+
}
|
245
|
+
ArrowArrayStream arrow_stream;
|
246
|
+
|
247
|
+
std::string query = "SELECT * FROM ";
|
248
|
+
if (strlen(db_schema) > 0) {
|
249
|
+
query += std::string(db_schema) + ".";
|
250
|
+
}
|
251
|
+
query += std::string(table_name) + " LIMIT 0;";
|
252
|
+
|
253
|
+
auto success = QueryInternal(connection, &arrow_stream, query.c_str(), error);
|
254
|
+
if (success != ADBC_STATUS_OK) {
|
255
|
+
return success;
|
256
|
+
}
|
257
|
+
arrow_stream.get_schema(&arrow_stream, schema);
|
258
|
+
arrow_stream.release(&arrow_stream);
|
259
|
+
return ADBC_STATUS_OK;
|
260
|
+
}
|
261
|
+
|
162
262
|
AdbcStatusCode ConnectionNew(struct AdbcConnection *connection, struct AdbcError *error) {
|
163
|
-
|
164
|
-
|
165
|
-
return
|
263
|
+
if (!connection) {
|
264
|
+
SetError(error, "Missing connection object");
|
265
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
166
266
|
}
|
167
267
|
|
168
268
|
connection->private_data = nullptr;
|
@@ -269,19 +369,129 @@ AdbcStatusCode ConnectionRollback(struct AdbcConnection *connection, struct Adbc
|
|
269
369
|
return ExecuteQuery(conn, "START TRANSACTION", error);
|
270
370
|
}
|
271
371
|
|
372
|
+
enum class AdbcInfoCode : uint32_t {
|
373
|
+
VENDOR_NAME,
|
374
|
+
VENDOR_VERSION,
|
375
|
+
DRIVER_NAME,
|
376
|
+
DRIVER_VERSION,
|
377
|
+
DRIVER_ARROW_VERSION,
|
378
|
+
UNRECOGNIZED // always the last entry of the enum
|
379
|
+
};
|
380
|
+
|
381
|
+
static AdbcInfoCode ConvertToInfoCode(uint32_t info_code) {
|
382
|
+
switch (info_code) {
|
383
|
+
case 0:
|
384
|
+
return AdbcInfoCode::VENDOR_NAME;
|
385
|
+
case 1:
|
386
|
+
return AdbcInfoCode::VENDOR_VERSION;
|
387
|
+
case 2:
|
388
|
+
return AdbcInfoCode::DRIVER_NAME;
|
389
|
+
case 3:
|
390
|
+
return AdbcInfoCode::DRIVER_VERSION;
|
391
|
+
case 4:
|
392
|
+
return AdbcInfoCode::DRIVER_ARROW_VERSION;
|
393
|
+
default:
|
394
|
+
return AdbcInfoCode::UNRECOGNIZED;
|
395
|
+
}
|
396
|
+
}
|
397
|
+
|
398
|
+
AdbcStatusCode ConnectionGetInfo(struct AdbcConnection *connection, uint32_t *info_codes, size_t info_codes_length,
|
399
|
+
struct ArrowArrayStream *out, struct AdbcError *error) {
|
400
|
+
if (!connection) {
|
401
|
+
SetError(error, "Missing connection object");
|
402
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
403
|
+
}
|
404
|
+
if (!connection->private_data) {
|
405
|
+
SetError(error, "Connection is invalid");
|
406
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
407
|
+
}
|
408
|
+
if (!out) {
|
409
|
+
SetError(error, "Output parameter was not provided");
|
410
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
411
|
+
}
|
412
|
+
|
413
|
+
// If 'info_codes' is NULL, we should output all the info codes we recognize
|
414
|
+
size_t length = info_codes ? info_codes_length : (size_t)AdbcInfoCode::UNRECOGNIZED;
|
415
|
+
|
416
|
+
duckdb::string q = R"EOF(
|
417
|
+
select
|
418
|
+
name::UINTEGER as info_name,
|
419
|
+
info::UNION(
|
420
|
+
string_value VARCHAR,
|
421
|
+
bool_value BOOL,
|
422
|
+
int64_value BIGINT,
|
423
|
+
int32_bitmask INTEGER,
|
424
|
+
string_list VARCHAR[],
|
425
|
+
int32_to_int32_list_map MAP(INTEGER, INTEGER[])
|
426
|
+
) as info_value from values
|
427
|
+
)EOF";
|
428
|
+
|
429
|
+
duckdb::string results = "";
|
430
|
+
|
431
|
+
for (size_t i = 0; i < length; i++) {
|
432
|
+
uint32_t code = info_codes ? info_codes[i] : i;
|
433
|
+
auto info_code = ConvertToInfoCode(code);
|
434
|
+
switch (info_code) {
|
435
|
+
case AdbcInfoCode::VENDOR_NAME: {
|
436
|
+
results += "(0, 'duckdb'),";
|
437
|
+
break;
|
438
|
+
}
|
439
|
+
case AdbcInfoCode::VENDOR_VERSION: {
|
440
|
+
results += duckdb::StringUtil::Format("(1, '%s'),", duckdb_library_version());
|
441
|
+
break;
|
442
|
+
}
|
443
|
+
case AdbcInfoCode::DRIVER_NAME: {
|
444
|
+
results += "(2, 'ADBC DuckDB Driver'),";
|
445
|
+
break;
|
446
|
+
}
|
447
|
+
case AdbcInfoCode::DRIVER_VERSION: {
|
448
|
+
// TODO: fill in driver version
|
449
|
+
results += "(3, '(unknown)'),";
|
450
|
+
break;
|
451
|
+
}
|
452
|
+
case AdbcInfoCode::DRIVER_ARROW_VERSION: {
|
453
|
+
// TODO: fill in arrow version
|
454
|
+
results += "(4, '(unknown)'),";
|
455
|
+
break;
|
456
|
+
}
|
457
|
+
case AdbcInfoCode::UNRECOGNIZED: {
|
458
|
+
// Unrecognized codes are not an error, just ignored
|
459
|
+
continue;
|
460
|
+
}
|
461
|
+
default: {
|
462
|
+
// Codes that we have implemented but not handled here are a developer error
|
463
|
+
SetError(error, "Info code recognized but not handled");
|
464
|
+
return ADBC_STATUS_INTERNAL;
|
465
|
+
}
|
466
|
+
}
|
467
|
+
}
|
468
|
+
if (results.empty()) {
|
469
|
+
// Add a group of values so the query parses
|
470
|
+
q += "(NULL, NULL)";
|
471
|
+
} else {
|
472
|
+
q += results;
|
473
|
+
}
|
474
|
+
q += " tbl(name, info)";
|
475
|
+
if (results.empty()) {
|
476
|
+
// Add an impossible where clause to return an empty result set
|
477
|
+
q += " where true = false";
|
478
|
+
}
|
479
|
+
return QueryInternal(connection, out, q.c_str(), error);
|
480
|
+
}
|
481
|
+
|
272
482
|
AdbcStatusCode ConnectionInit(struct AdbcConnection *connection, struct AdbcDatabase *database,
|
273
483
|
struct AdbcError *error) {
|
274
|
-
|
275
|
-
|
276
|
-
return
|
484
|
+
if (!database) {
|
485
|
+
SetError(error, "Missing database object");
|
486
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
277
487
|
}
|
278
|
-
|
279
|
-
|
280
|
-
return
|
488
|
+
if (!database->private_data) {
|
489
|
+
SetError(error, "Invalid database");
|
490
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
281
491
|
}
|
282
|
-
|
283
|
-
|
284
|
-
return
|
492
|
+
if (!connection) {
|
493
|
+
SetError(error, "Missing connection object");
|
494
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
285
495
|
}
|
286
496
|
auto database_wrapper = (DuckDBAdbcDatabaseWrapper *)database->private_data;
|
287
497
|
|
@@ -355,35 +565,33 @@ void stream_schema(uintptr_t factory_ptr, duckdb::ArrowSchemaWrapper &schema) {
|
|
355
565
|
}
|
356
566
|
|
357
567
|
AdbcStatusCode Ingest(duckdb_connection connection, const char *table_name, struct ArrowArrayStream *input,
|
358
|
-
struct AdbcError *error) {
|
568
|
+
struct AdbcError *error, IngestionMode ingestion_mode) {
|
359
569
|
|
360
|
-
|
361
|
-
|
362
|
-
return
|
570
|
+
if (!connection) {
|
571
|
+
SetError(error, "Missing connection object");
|
572
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
363
573
|
}
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
return status;
|
574
|
+
if (!input) {
|
575
|
+
SetError(error, "Missing input arrow stream pointer");
|
576
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
368
577
|
}
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
return status;
|
578
|
+
if (!table_name) {
|
579
|
+
SetError(error, "Missing database object name");
|
580
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
373
581
|
}
|
582
|
+
|
374
583
|
auto cconn = (duckdb::Connection *)connection;
|
375
584
|
|
376
|
-
auto has_table = cconn->TableInfo(table_name);
|
377
585
|
auto arrow_scan = cconn->TableFunction("arrow_scan", {duckdb::Value::POINTER((uintptr_t)input),
|
378
586
|
duckdb::Value::POINTER((uintptr_t)stream_produce),
|
379
|
-
duckdb::Value::POINTER((uintptr_t)get_schema)});
|
587
|
+
duckdb::Value::POINTER((uintptr_t)input->get_schema)});
|
380
588
|
try {
|
381
|
-
if (
|
589
|
+
if (ingestion_mode == IngestionMode::CREATE) {
|
382
590
|
// We create the table based on an Arrow Scanner
|
383
591
|
arrow_scan->Create(table_name);
|
384
592
|
} else {
|
385
593
|
arrow_scan->CreateView("temp_adbc_view", true, true);
|
386
|
-
auto query = "insert into "
|
594
|
+
auto query = duckdb::StringUtil::Format("insert into \"%s\" select * from temp_adbc_view", table_name);
|
387
595
|
auto result = cconn->Query(query);
|
388
596
|
}
|
389
597
|
// After creating a table, the arrow array stream is released. Hence we must set it as released to avoid
|
@@ -400,88 +608,136 @@ AdbcStatusCode Ingest(duckdb_connection connection, const char *table_name, stru
|
|
400
608
|
return ADBC_STATUS_OK;
|
401
609
|
}
|
402
610
|
|
403
|
-
struct DuckDBAdbcStatementWrapper {
|
404
|
-
::duckdb_connection connection;
|
405
|
-
::duckdb_arrow result;
|
406
|
-
::duckdb_prepared_statement statement;
|
407
|
-
char *ingestion_table_name;
|
408
|
-
ArrowArrayStream *ingestion_stream;
|
409
|
-
};
|
410
|
-
|
411
611
|
AdbcStatusCode StatementNew(struct AdbcConnection *connection, struct AdbcStatement *statement,
|
412
612
|
struct AdbcError *error) {
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
return status;
|
613
|
+
if (!connection) {
|
614
|
+
SetError(error, "Missing connection object");
|
615
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
417
616
|
}
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
return status;
|
617
|
+
if (!connection->private_data) {
|
618
|
+
SetError(error, "Invalid connection object");
|
619
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
422
620
|
}
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
return status;
|
621
|
+
if (!statement) {
|
622
|
+
SetError(error, "Missing statement object");
|
623
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
427
624
|
}
|
428
625
|
|
429
626
|
statement->private_data = nullptr;
|
430
627
|
|
431
628
|
auto statement_wrapper = (DuckDBAdbcStatementWrapper *)malloc(sizeof(DuckDBAdbcStatementWrapper));
|
432
|
-
|
433
|
-
|
434
|
-
return
|
629
|
+
if (!statement_wrapper) {
|
630
|
+
SetError(error, "Allocation error");
|
631
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
435
632
|
}
|
436
633
|
|
437
634
|
statement->private_data = statement_wrapper;
|
438
635
|
statement_wrapper->connection = (duckdb_connection)connection->private_data;
|
439
636
|
statement_wrapper->statement = nullptr;
|
440
637
|
statement_wrapper->result = nullptr;
|
441
|
-
statement_wrapper->ingestion_stream = nullptr;
|
638
|
+
statement_wrapper->ingestion_stream.release = nullptr;
|
442
639
|
statement_wrapper->ingestion_table_name = nullptr;
|
640
|
+
statement_wrapper->ingestion_mode = IngestionMode::CREATE;
|
443
641
|
return ADBC_STATUS_OK;
|
444
642
|
}
|
445
643
|
|
446
644
|
AdbcStatusCode StatementRelease(struct AdbcStatement *statement, struct AdbcError *error) {
|
645
|
+
if (!statement || !statement->private_data) {
|
646
|
+
return ADBC_STATUS_OK;
|
647
|
+
}
|
648
|
+
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
649
|
+
if (wrapper->statement) {
|
650
|
+
duckdb_destroy_prepare(&wrapper->statement);
|
651
|
+
wrapper->statement = nullptr;
|
652
|
+
}
|
653
|
+
if (wrapper->result) {
|
654
|
+
duckdb_destroy_arrow(&wrapper->result);
|
655
|
+
wrapper->result = nullptr;
|
656
|
+
}
|
657
|
+
if (wrapper->ingestion_stream.release) {
|
658
|
+
wrapper->ingestion_stream.release(&wrapper->ingestion_stream);
|
659
|
+
wrapper->ingestion_stream.release = nullptr;
|
660
|
+
}
|
661
|
+
if (wrapper->ingestion_table_name) {
|
662
|
+
free(wrapper->ingestion_table_name);
|
663
|
+
wrapper->ingestion_table_name = nullptr;
|
664
|
+
}
|
665
|
+
free(statement->private_data);
|
666
|
+
statement->private_data = nullptr;
|
667
|
+
return ADBC_STATUS_OK;
|
668
|
+
}
|
447
669
|
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
670
|
+
AdbcStatusCode StatementGetParameterSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
671
|
+
struct AdbcError *error) {
|
672
|
+
if (!statement) {
|
673
|
+
SetError(error, "Missing statement object");
|
674
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
675
|
+
}
|
676
|
+
if (!statement->private_data) {
|
677
|
+
SetError(error, "Invalid statement object");
|
678
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
679
|
+
}
|
680
|
+
if (!schema) {
|
681
|
+
SetError(error, "Missing schema object");
|
682
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
683
|
+
}
|
684
|
+
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
685
|
+
// TODO: we might want to cache this, but then we need to return a deep copy anyways.., so I'm not sure if that
|
686
|
+
// would be worth the extra management
|
687
|
+
auto res = duckdb_prepared_arrow_schema(wrapper->statement, (duckdb_arrow_schema *)&schema);
|
688
|
+
if (res != DuckDBSuccess) {
|
689
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
690
|
+
}
|
691
|
+
return ADBC_STATUS_OK;
|
692
|
+
}
|
693
|
+
|
694
|
+
AdbcStatusCode GetPreparedParameters(duckdb_connection connection, duckdb::unique_ptr<duckdb::QueryResult> &result,
|
695
|
+
ArrowArrayStream *input, AdbcError *error) {
|
696
|
+
|
697
|
+
auto cconn = (duckdb::Connection *)connection;
|
698
|
+
|
699
|
+
try {
|
700
|
+
auto arrow_scan = cconn->TableFunction("arrow_scan", {duckdb::Value::POINTER((uintptr_t)input),
|
701
|
+
duckdb::Value::POINTER((uintptr_t)stream_produce),
|
702
|
+
duckdb::Value::POINTER((uintptr_t)input->get_schema)});
|
703
|
+
result = arrow_scan->Execute();
|
704
|
+
// After creating a table, the arrow array stream is released. Hence we must set it as released to avoid
|
705
|
+
// double-releasing it
|
706
|
+
input->release = nullptr;
|
707
|
+
} catch (std::exception &ex) {
|
708
|
+
if (error) {
|
709
|
+
error->message = strdup(ex.what());
|
466
710
|
}
|
467
|
-
|
468
|
-
|
711
|
+
return ADBC_STATUS_INTERNAL;
|
712
|
+
} catch (...) {
|
713
|
+
return ADBC_STATUS_INTERNAL;
|
469
714
|
}
|
470
715
|
return ADBC_STATUS_OK;
|
471
716
|
}
|
472
717
|
|
718
|
+
static AdbcStatusCode IngestToTableFromBoundStream(DuckDBAdbcStatementWrapper *statement, AdbcError *error) {
|
719
|
+
// See ADBC_INGEST_OPTION_TARGET_TABLE
|
720
|
+
D_ASSERT(statement->ingestion_stream.release);
|
721
|
+
D_ASSERT(statement->ingestion_table_name);
|
722
|
+
|
723
|
+
// Take the input stream from the statement
|
724
|
+
auto stream = statement->ingestion_stream;
|
725
|
+
statement->ingestion_stream.release = nullptr;
|
726
|
+
|
727
|
+
// Ingest into a table from the bound stream
|
728
|
+
return Ingest(statement->connection, statement->ingestion_table_name, &stream, error, statement->ingestion_mode);
|
729
|
+
}
|
730
|
+
|
473
731
|
AdbcStatusCode StatementExecuteQuery(struct AdbcStatement *statement, struct ArrowArrayStream *out,
|
474
732
|
int64_t *rows_affected, struct AdbcError *error) {
|
475
|
-
|
476
|
-
|
477
|
-
return
|
733
|
+
if (!statement) {
|
734
|
+
SetError(error, "Missing statement object");
|
735
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
478
736
|
}
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
return status;
|
737
|
+
if (!statement->private_data) {
|
738
|
+
SetError(error, "Invalid statement object");
|
739
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
483
740
|
}
|
484
|
-
|
485
741
|
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
486
742
|
|
487
743
|
// TODO: Set affected rows, careful with early return
|
@@ -489,16 +745,59 @@ AdbcStatusCode StatementExecuteQuery(struct AdbcStatement *statement, struct Arr
|
|
489
745
|
*rows_affected = 0;
|
490
746
|
}
|
491
747
|
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
748
|
+
const auto has_stream = wrapper->ingestion_stream.release != nullptr;
|
749
|
+
const auto to_table = wrapper->ingestion_table_name != nullptr;
|
750
|
+
|
751
|
+
if (has_stream && to_table) {
|
752
|
+
return IngestToTableFromBoundStream(wrapper, error);
|
496
753
|
}
|
497
754
|
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
755
|
+
if (has_stream) {
|
756
|
+
// A stream was bound to the statement, use that to bind parameters
|
757
|
+
duckdb::unique_ptr<duckdb::QueryResult> result;
|
758
|
+
ArrowArrayStream stream = wrapper->ingestion_stream;
|
759
|
+
wrapper->ingestion_stream.release = nullptr;
|
760
|
+
auto adbc_res = GetPreparedParameters(wrapper->connection, result, &stream, error);
|
761
|
+
if (adbc_res != ADBC_STATUS_OK) {
|
762
|
+
return adbc_res;
|
763
|
+
}
|
764
|
+
if (!result) {
|
765
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
766
|
+
}
|
767
|
+
duckdb::unique_ptr<duckdb::DataChunk> chunk;
|
768
|
+
while ((chunk = result->Fetch()) != nullptr) {
|
769
|
+
if (chunk->size() == 0) {
|
770
|
+
SetError(error, "Please provide a non-empty chunk to be bound");
|
771
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
772
|
+
}
|
773
|
+
if (chunk->size() != 1) {
|
774
|
+
// TODO: add support for binding multiple rows
|
775
|
+
SetError(error, "Binding multiple rows at once is not supported yet");
|
776
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
777
|
+
}
|
778
|
+
duckdb_clear_bindings(wrapper->statement);
|
779
|
+
for (idx_t col_idx = 0; col_idx < chunk->ColumnCount(); col_idx++) {
|
780
|
+
auto val = chunk->GetValue(col_idx, 0);
|
781
|
+
auto duck_val = (duckdb_value)&val;
|
782
|
+
auto res = duckdb_bind_value(wrapper->statement, 1 + col_idx, duck_val);
|
783
|
+
if (res != DuckDBSuccess) {
|
784
|
+
SetError(error, duckdb_prepare_error(wrapper->statement));
|
785
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
786
|
+
}
|
787
|
+
}
|
788
|
+
|
789
|
+
auto res = duckdb_execute_prepared_arrow(wrapper->statement, &wrapper->result);
|
790
|
+
if (res != DuckDBSuccess) {
|
791
|
+
SetError(error, duckdb_query_arrow_error(wrapper->result));
|
792
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
793
|
+
}
|
794
|
+
}
|
795
|
+
} else {
|
796
|
+
auto res = duckdb_execute_prepared_arrow(wrapper->statement, &wrapper->result);
|
797
|
+
if (res != DuckDBSuccess) {
|
798
|
+
SetError(error, duckdb_query_arrow_error(wrapper->result));
|
799
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
800
|
+
}
|
502
801
|
}
|
503
802
|
|
504
803
|
if (out) {
|
@@ -518,27 +817,29 @@ AdbcStatusCode StatementExecuteQuery(struct AdbcStatement *statement, struct Arr
|
|
518
817
|
|
519
818
|
// this is a nop for us
|
520
819
|
AdbcStatusCode StatementPrepare(struct AdbcStatement *statement, struct AdbcError *error) {
|
521
|
-
|
522
|
-
|
523
|
-
return
|
820
|
+
if (!statement) {
|
821
|
+
SetError(error, "Missing statement object");
|
822
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
524
823
|
}
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
return status;
|
824
|
+
if (!statement->private_data) {
|
825
|
+
SetError(error, "Invalid statement object");
|
826
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
529
827
|
}
|
530
|
-
|
531
828
|
return ADBC_STATUS_OK;
|
532
829
|
}
|
533
830
|
|
534
831
|
AdbcStatusCode StatementSetSqlQuery(struct AdbcStatement *statement, const char *query, struct AdbcError *error) {
|
535
|
-
|
536
|
-
|
537
|
-
return
|
832
|
+
if (!statement) {
|
833
|
+
SetError(error, "Missing statement object");
|
834
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
538
835
|
}
|
539
|
-
|
540
|
-
|
541
|
-
return
|
836
|
+
if (!statement->private_data) {
|
837
|
+
SetError(error, "Invalid statement object");
|
838
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
839
|
+
}
|
840
|
+
if (!query) {
|
841
|
+
SetError(error, "Missing query");
|
842
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
542
843
|
}
|
543
844
|
|
544
845
|
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
@@ -547,61 +848,93 @@ AdbcStatusCode StatementSetSqlQuery(struct AdbcStatement *statement, const char
|
|
547
848
|
return CheckResult(res, error, error_msg);
|
548
849
|
}
|
549
850
|
|
851
|
+
AdbcStatusCode StatementBind(struct AdbcStatement *statement, struct ArrowArray *values, struct ArrowSchema *schemas,
|
852
|
+
struct AdbcError *error) {
|
853
|
+
if (!statement) {
|
854
|
+
SetError(error, "Missing statement object");
|
855
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
856
|
+
}
|
857
|
+
if (!statement->private_data) {
|
858
|
+
SetError(error, "Invalid statement object");
|
859
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
860
|
+
}
|
861
|
+
if (!values) {
|
862
|
+
SetError(error, "Missing values object");
|
863
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
864
|
+
}
|
865
|
+
if (!schemas) {
|
866
|
+
SetError(error, "Invalid schemas object");
|
867
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
868
|
+
}
|
869
|
+
|
870
|
+
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
871
|
+
if (wrapper->ingestion_stream.release) {
|
872
|
+
// Free the stream that was previously bound
|
873
|
+
wrapper->ingestion_stream.release(&wrapper->ingestion_stream);
|
874
|
+
}
|
875
|
+
auto status = BatchToArrayStream(values, schemas, &wrapper->ingestion_stream, error);
|
876
|
+
return status;
|
877
|
+
}
|
878
|
+
|
550
879
|
AdbcStatusCode StatementBindStream(struct AdbcStatement *statement, struct ArrowArrayStream *values,
|
551
880
|
struct AdbcError *error) {
|
552
|
-
|
553
|
-
|
554
|
-
return
|
881
|
+
if (!statement) {
|
882
|
+
SetError(error, "Missing statement object");
|
883
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
555
884
|
}
|
556
|
-
|
557
|
-
|
558
|
-
return
|
885
|
+
if (!statement->private_data) {
|
886
|
+
SetError(error, "Invalid statement object");
|
887
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
888
|
+
}
|
889
|
+
if (!values) {
|
890
|
+
SetError(error, "Missing values object");
|
891
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
559
892
|
}
|
893
|
+
|
560
894
|
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
561
|
-
wrapper->ingestion_stream
|
895
|
+
if (wrapper->ingestion_stream.release) {
|
896
|
+
// Release any resources currently held by the ingestion stream before we overwrite it
|
897
|
+
wrapper->ingestion_stream.release(&wrapper->ingestion_stream);
|
898
|
+
}
|
899
|
+
wrapper->ingestion_stream = *values;
|
900
|
+
values->release = nullptr;
|
562
901
|
return ADBC_STATUS_OK;
|
563
902
|
}
|
564
903
|
|
565
904
|
AdbcStatusCode StatementSetOption(struct AdbcStatement *statement, const char *key, const char *value,
|
566
905
|
struct AdbcError *error) {
|
567
|
-
|
568
|
-
|
569
|
-
return
|
906
|
+
if (!statement) {
|
907
|
+
SetError(error, "Missing statement object");
|
908
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
570
909
|
}
|
571
|
-
|
572
|
-
|
573
|
-
return
|
910
|
+
if (!statement->private_data) {
|
911
|
+
SetError(error, "Invalid statement object");
|
912
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
574
913
|
}
|
914
|
+
if (!key) {
|
915
|
+
SetError(error, "Missing key object");
|
916
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
917
|
+
}
|
918
|
+
|
575
919
|
auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
|
576
920
|
|
577
921
|
if (strcmp(key, ADBC_INGEST_OPTION_TARGET_TABLE) == 0) {
|
578
922
|
wrapper->ingestion_table_name = strdup(value);
|
579
923
|
return ADBC_STATUS_OK;
|
580
924
|
}
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
}
|
593
|
-
status = StatementSetSqlQuery(&statement, query, error);
|
594
|
-
if (status != ADBC_STATUS_OK) {
|
595
|
-
SetError(error, "unable to initialize statement");
|
596
|
-
return status;
|
597
|
-
}
|
598
|
-
status = StatementExecuteQuery(&statement, out, nullptr, error);
|
599
|
-
if (status != ADBC_STATUS_OK) {
|
600
|
-
SetError(error, "unable to initialize statement");
|
601
|
-
return status;
|
925
|
+
if (strcmp(key, ADBC_INGEST_OPTION_MODE) == 0) {
|
926
|
+
if (strcmp(value, ADBC_INGEST_OPTION_MODE_CREATE) == 0) {
|
927
|
+
wrapper->ingestion_mode = IngestionMode::CREATE;
|
928
|
+
return ADBC_STATUS_OK;
|
929
|
+
} else if (strcmp(value, ADBC_INGEST_OPTION_MODE_APPEND) == 0) {
|
930
|
+
wrapper->ingestion_mode = IngestionMode::APPEND;
|
931
|
+
return ADBC_STATUS_OK;
|
932
|
+
} else {
|
933
|
+
SetError(error, "Invalid ingestion mode");
|
934
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
935
|
+
}
|
602
936
|
}
|
603
|
-
|
604
|
-
return ADBC_STATUS_OK;
|
937
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
605
938
|
}
|
606
939
|
|
607
940
|
AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth, const char *catalog,
|
@@ -618,16 +951,53 @@ AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth
|
|
618
951
|
SetError(error, "Table types parameter not yet supported");
|
619
952
|
return ADBC_STATUS_NOT_IMPLEMENTED;
|
620
953
|
}
|
954
|
+
std::string query;
|
955
|
+
switch (depth) {
|
956
|
+
case ADBC_OBJECT_DEPTH_CATALOGS:
|
957
|
+
SetError(error, "ADBC_OBJECT_DEPTH_CATALOGS not yet supported");
|
958
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
959
|
+
case ADBC_OBJECT_DEPTH_DB_SCHEMAS:
|
960
|
+
// Return metadata on catalogs and schemas.
|
961
|
+
query = duckdb::StringUtil::Format(R"(
|
962
|
+
SELECT table_schema db_schema_name
|
963
|
+
FROM information_schema.columns
|
964
|
+
WHERE table_schema LIKE '%s' AND table_name LIKE '%s' AND column_name LIKE '%s' ;
|
965
|
+
)",
|
966
|
+
db_schema ? db_schema : "%", table_name ? table_name : "%",
|
967
|
+
column_name ? column_name : "%");
|
968
|
+
break;
|
969
|
+
case ADBC_OBJECT_DEPTH_TABLES:
|
970
|
+
// Return metadata on catalogs, schemas, and tables.
|
971
|
+
query = duckdb::StringUtil::Format(R"(
|
972
|
+
SELECT table_schema db_schema_name, LIST(table_schema_list) db_schema_tables
|
973
|
+
FROM (
|
974
|
+
SELECT table_schema, { table_name : table_name} table_schema_list
|
975
|
+
FROM information_schema.columns
|
976
|
+
WHERE table_schema LIKE '%s' AND table_name LIKE '%s' AND column_name LIKE '%s' GROUP BY table_schema, table_name
|
977
|
+
) GROUP BY table_schema;
|
978
|
+
)",
|
979
|
+
db_schema ? db_schema : "%", table_name ? table_name : "%",
|
980
|
+
column_name ? column_name : "%");
|
981
|
+
break;
|
982
|
+
case ADBC_OBJECT_DEPTH_COLUMNS:
|
983
|
+
// Return metadata on catalogs, schemas, tables, and columns.
|
984
|
+
query = duckdb::StringUtil::Format(R"(
|
985
|
+
SELECT table_schema db_schema_name, LIST(table_schema_list) db_schema_tables
|
986
|
+
FROM (
|
987
|
+
SELECT table_schema, { table_name : table_name, table_columns : LIST({column_name : column_name, ordinal_position : ordinal_position + 1, remarks : ''})} table_schema_list
|
988
|
+
FROM information_schema.columns
|
989
|
+
WHERE table_schema LIKE '%s' AND table_name LIKE '%s' AND column_name LIKE '%s' GROUP BY table_schema, table_name
|
990
|
+
) GROUP BY table_schema;
|
991
|
+
)",
|
992
|
+
db_schema ? db_schema : "%", table_name ? table_name : "%",
|
993
|
+
column_name ? column_name : "%");
|
994
|
+
break;
|
995
|
+
default:
|
996
|
+
SetError(error, "Invalid value of Depth");
|
997
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
998
|
+
}
|
621
999
|
|
622
|
-
|
623
|
-
SELECT table_schema db_schema_name, LIST(table_schema_list) db_schema_tables FROM (
|
624
|
-
SELECT table_schema, { table_name : table_name, table_columns : LIST({column_name : column_name, ordinal_position : ordinal_position + 1, remarks : ''})} table_schema_list FROM information_schema.columns WHERE table_schema LIKE '%s' AND table_name LIKE '%s' AND column_name LIKE '%s' GROUP BY table_schema, table_name
|
625
|
-
) GROUP BY table_schema;
|
626
|
-
)",
|
627
|
-
db_schema ? db_schema : "%", table_name ? table_name : "%",
|
628
|
-
column_name ? column_name : "%");
|
629
|
-
|
630
|
-
return QueryInternal(connection, out, q.c_str(), error);
|
1000
|
+
return QueryInternal(connection, out, query.c_str(), error);
|
631
1001
|
}
|
632
1002
|
|
633
1003
|
AdbcStatusCode ConnectionGetTableTypes(struct AdbcConnection *connection, struct ArrowArrayStream *out,
|