duckdb 0.9.3-dev0.0 → 0.9.3-dev14.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/LICENSE +1 -1
- package/binding.gyp +32 -7
- package/package.json +1 -1
- package/src/connection.cpp +6 -6
- package/src/database.cpp +12 -10
- package/src/duckdb/extension/icu/icu-datefunc.cpp +22 -10
- package/src/duckdb/extension/icu/icu-datepart.cpp +42 -22
- package/src/duckdb/extension/icu/icu-datetrunc.cpp +40 -7
- package/src/duckdb/extension/icu/icu-strptime.cpp +14 -8
- package/src/duckdb/extension/icu/icu-table-range.cpp +1 -1
- package/src/duckdb/extension/icu/icu-timezone.cpp +43 -16
- package/src/duckdb/extension/icu/icu_extension.cpp +1 -1
- package/src/duckdb/extension/icu/include/icu-datefunc.hpp +3 -0
- package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
- package/src/duckdb/extension/json/buffered_json_reader.cpp +78 -62
- package/src/duckdb/extension/json/include/buffered_json_reader.hpp +11 -7
- package/src/duckdb/extension/json/include/json_common.hpp +0 -14
- package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
- package/src/duckdb/extension/json/include/json_scan.hpp +19 -5
- package/src/duckdb/extension/json/include/json_serializer.hpp +2 -1
- package/src/duckdb/extension/json/include/json_structure.hpp +12 -10
- package/src/duckdb/extension/json/json_common.cpp +1 -0
- package/src/duckdb/extension/json/json_deserializer.cpp +13 -0
- package/src/duckdb/extension/json/json_extension.cpp +3 -3
- package/src/duckdb/extension/json/json_functions/copy_json.cpp +8 -4
- package/src/duckdb/extension/json/json_functions/json_array_length.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_contains.cpp +3 -3
- package/src/duckdb/extension/json/json_functions/json_create.cpp +53 -8
- package/src/duckdb/extension/json/json_functions/json_extract.cpp +10 -6
- package/src/duckdb/extension/json/json_functions/json_keys.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -3
- package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +210 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +22 -19
- package/src/duckdb/extension/json/json_functions/json_structure.cpp +71 -43
- package/src/duckdb/extension/json/json_functions/json_transform.cpp +105 -8
- package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/json_valid.cpp +1 -1
- package/src/duckdb/extension/json/json_functions/read_json.cpp +43 -18
- package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +1 -1
- package/src/duckdb/extension/json/json_functions.cpp +9 -5
- package/src/duckdb/extension/json/json_scan.cpp +147 -125
- package/src/duckdb/extension/json/json_serializer.cpp +9 -0
- package/src/duckdb/extension/json/serialize_json.cpp +6 -0
- package/src/duckdb/extension/parquet/column_reader.cpp +53 -18
- package/src/duckdb/extension/parquet/column_writer.cpp +29 -6
- package/src/duckdb/extension/parquet/include/column_reader.hpp +0 -1
- package/src/duckdb/extension/parquet/include/decode_utils.hpp +2 -2
- package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +87 -0
- package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -3
- package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +16 -3
- package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +10 -0
- package/src/duckdb/extension/parquet/include/parquet_reader.hpp +34 -6
- package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +3 -2
- package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -0
- package/src/duckdb/extension/parquet/include/parquet_writer.hpp +21 -1
- package/src/duckdb/extension/parquet/parquet_crypto.cpp +370 -0
- package/src/duckdb/extension/parquet/parquet_extension.cpp +254 -24
- package/src/duckdb/extension/parquet/parquet_metadata.cpp +204 -16
- package/src/duckdb/extension/parquet/parquet_reader.cpp +108 -34
- package/src/duckdb/extension/parquet/parquet_statistics.cpp +75 -30
- package/src/duckdb/extension/parquet/parquet_timestamp.cpp +15 -8
- package/src/duckdb/extension/parquet/parquet_writer.cpp +62 -10
- package/src/duckdb/extension/parquet/serialize_parquet.cpp +60 -0
- package/src/duckdb/src/catalog/catalog.cpp +23 -25
- package/src/duckdb/src/catalog/catalog_entry/column_dependency_manager.cpp +1 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_dependent_entry.cpp +31 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_entry.cpp +44 -0
- package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_subject_entry.cpp +31 -0
- package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +35 -10
- package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +22 -6
- package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +110 -33
- package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +33 -17
- package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +16 -0
- package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +7 -6
- package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +88 -14
- package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -15
- package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +20 -20
- package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +4 -0
- package/src/duckdb/src/catalog/catalog_entry.cpp +29 -0
- package/src/duckdb/src/catalog/catalog_set.cpp +358 -343
- package/src/duckdb/src/catalog/catalog_transaction.cpp +4 -0
- package/src/duckdb/src/catalog/default/default_functions.cpp +13 -4
- package/src/duckdb/src/catalog/default/default_schemas.cpp +5 -1
- package/src/duckdb/src/catalog/default/default_views.cpp +6 -2
- package/src/duckdb/src/catalog/dependency_catalog_set.cpp +51 -0
- package/src/duckdb/src/catalog/dependency_manager.cpp +510 -114
- package/src/duckdb/src/catalog/duck_catalog.cpp +4 -4
- package/src/duckdb/src/common/adbc/adbc.cpp +73 -53
- package/src/duckdb/src/common/adbc/driver_manager.cpp +1101 -268
- package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +20 -9
- package/src/duckdb/src/common/bind_helpers.cpp +1 -0
- package/src/duckdb/src/common/box_renderer.cpp +52 -1
- package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
- package/src/duckdb/src/common/constants.cpp +0 -1
- package/src/duckdb/src/common/enum_util.cpp +522 -107
- package/src/duckdb/src/common/enums/catalog_type.cpp +64 -1
- package/src/duckdb/src/common/enums/compression_type.cpp +14 -0
- package/src/duckdb/src/common/enums/date_part_specifier.cpp +1 -0
- package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
- package/src/duckdb/src/common/enums/file_compression_type.cpp +1 -0
- package/src/duckdb/src/common/enums/join_type.cpp +33 -0
- package/src/duckdb/src/common/enums/logical_operator_type.cpp +5 -3
- package/src/duckdb/src/common/enums/optimizer_type.cpp +9 -1
- package/src/duckdb/src/common/enums/physical_operator_type.cpp +8 -4
- package/src/duckdb/src/common/enums/statement_type.cpp +2 -2
- package/src/duckdb/src/common/error_data.cpp +113 -0
- package/src/duckdb/src/common/exception/binder_exception.cpp +47 -0
- package/src/duckdb/src/common/exception/catalog_exception.cpp +55 -0
- package/src/duckdb/src/common/exception/parser_exception.cpp +19 -0
- package/src/duckdb/src/common/exception.cpp +110 -121
- package/src/duckdb/src/common/exception_format_value.cpp +9 -1
- package/src/duckdb/src/common/extra_type_info.cpp +48 -0
- package/src/duckdb/src/common/file_system.cpp +12 -7
- package/src/duckdb/src/common/gzip_file_system.cpp +18 -18
- package/src/duckdb/src/common/hive_partitioning.cpp +5 -1
- package/src/duckdb/src/common/http_state.cpp +20 -3
- package/src/duckdb/src/common/local_file_system.cpp +214 -15
- package/src/duckdb/src/common/multi_file_reader.cpp +20 -7
- package/src/duckdb/src/common/operator/cast_operators.cpp +397 -414
- package/src/duckdb/src/common/operator/convert_to_string.cpp +4 -0
- package/src/duckdb/src/common/operator/string_cast.cpp +5 -0
- package/src/duckdb/src/common/progress_bar/progress_bar.cpp +61 -12
- package/src/duckdb/src/common/progress_bar/terminal_progress_bar_display.cpp +13 -4
- package/src/duckdb/src/common/radix_partitioning.cpp +1 -1
- package/src/duckdb/src/common/row_operations/row_aggregate.cpp +2 -1
- package/src/duckdb/src/common/row_operations/row_gather.cpp +7 -1
- package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +78 -12
- package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +222 -61
- package/src/duckdb/src/common/row_operations/row_matcher.cpp +6 -1
- package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +51 -0
- package/src/duckdb/src/common/row_operations/row_scatter.cpp +8 -1
- package/src/duckdb/src/common/serializer/binary_deserializer.cpp +6 -0
- package/src/duckdb/src/common/serializer/binary_serializer.cpp +5 -0
- package/src/duckdb/src/common/serializer/serializer.cpp +19 -0
- package/src/duckdb/src/common/sort/comparators.cpp +126 -0
- package/src/duckdb/src/common/sort/partition_state.cpp +17 -17
- package/src/duckdb/src/common/sort/radix_sort.cpp +2 -1
- package/src/duckdb/src/common/sort/sort_state.cpp +10 -5
- package/src/duckdb/src/common/sort/sorted_block.cpp +7 -6
- package/src/duckdb/src/common/string_util.cpp +302 -24
- package/src/duckdb/src/common/tree_renderer.cpp +8 -6
- package/src/duckdb/src/common/types/cast_helpers.cpp +6 -0
- package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
- package/src/duckdb/src/common/types/column/column_data_collection.cpp +58 -0
- package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +8 -1
- package/src/duckdb/src/common/types/data_chunk.cpp +9 -0
- package/src/duckdb/src/common/types/date.cpp +2 -2
- package/src/duckdb/src/common/types/hash.cpp +9 -1
- package/src/duckdb/src/common/types/hugeint.cpp +229 -51
- package/src/duckdb/src/common/types/hyperloglog.cpp +10 -3
- package/src/duckdb/src/common/types/interval.cpp +67 -12
- package/src/duckdb/src/common/types/list_segment.cpp +98 -4
- package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +11 -1
- package/src/duckdb/src/common/types/row/row_data_collection.cpp +1 -1
- package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +2 -2
- package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +3 -2
- package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +63 -3
- package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +331 -127
- package/src/duckdb/src/common/types/time.cpp +47 -75
- package/src/duckdb/src/common/types/timestamp.cpp +16 -3
- package/src/duckdb/src/common/types/uhugeint.cpp +746 -0
- package/src/duckdb/src/common/types/validity_mask.cpp +6 -2
- package/src/duckdb/src/common/types/value.cpp +183 -27
- package/src/duckdb/src/common/types/vector.cpp +331 -30
- package/src/duckdb/src/common/types/vector_buffer.cpp +29 -1
- package/src/duckdb/src/common/types/vector_cache.cpp +22 -1
- package/src/duckdb/src/common/types.cpp +606 -90
- package/src/duckdb/src/common/value_operations/comparison_operations.cpp +21 -1
- package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +5 -0
- package/src/duckdb/src/common/vector_operations/generators.cpp +2 -2
- package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +131 -2
- package/src/duckdb/src/common/vector_operations/vector_copy.cpp +26 -4
- package/src/duckdb/src/common/vector_operations/vector_hash.cpp +41 -0
- package/src/duckdb/src/common/vector_operations/vector_storage.cpp +7 -0
- package/src/duckdb/src/common/virtual_file_system.cpp +0 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +144 -56
- package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +2 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +27 -0
- package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +4 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +25 -5
- package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +100 -3
- package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +9 -1
- package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +83 -52
- package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +485 -289
- package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +3 -3
- package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
- package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +34 -37
- package/src/duckdb/src/core_functions/function_list.cpp +30 -1
- package/src/duckdb/src/core_functions/lambda_functions.cpp +416 -0
- package/src/duckdb/src/core_functions/scalar/array/array_functions.cpp +294 -0
- package/src/duckdb/src/core_functions/scalar/array/array_value.cpp +87 -0
- package/src/duckdb/src/core_functions/scalar/blob/create_sort_key.cpp +686 -0
- package/src/duckdb/src/core_functions/scalar/blob/encode.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/current.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +295 -20
- package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +1 -0
- package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +8 -7
- package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +84 -23
- package/src/duckdb/src/core_functions/scalar/generic/error.cpp +4 -4
- package/src/duckdb/src/core_functions/scalar/generic/least.cpp +7 -8
- package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
- package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +17 -6
- package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +8 -0
- package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +28 -14
- package/src/duckdb/src/core_functions/scalar/list/list_filter.cpp +49 -0
- package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +230 -0
- package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +85 -16
- package/src/duckdb/src/core_functions/scalar/list/list_transform.cpp +41 -0
- package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +21 -2
- package/src/duckdb/src/core_functions/scalar/map/map.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/map/map_from_entries.cpp +1 -2
- package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +24 -4
- package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +6 -0
- package/src/duckdb/src/core_functions/scalar/random/random.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/random/setseed.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +28 -0
- package/src/duckdb/src/core_functions/scalar/string/bar.cpp +9 -4
- package/src/duckdb/src/core_functions/scalar/string/format_bytes.cpp +7 -2
- package/src/duckdb/src/core_functions/scalar/string/hex.cpp +63 -4
- package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
- package/src/duckdb/src/core_functions/scalar/string/parse_path.cpp +348 -0
- package/src/duckdb/src/core_functions/scalar/string/regexp_escape.cpp +22 -0
- package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +6 -5
- package/src/duckdb/src/core_functions/scalar/struct/struct_insert.cpp +3 -3
- package/src/duckdb/src/core_functions/scalar/struct/struct_pack.cpp +1 -1
- package/src/duckdb/src/execution/aggregate_hashtable.cpp +9 -2
- package/src/duckdb/src/execution/column_binding_resolver.cpp +44 -10
- package/src/duckdb/src/execution/expression_executor/execute_between.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor/execute_case.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +4 -0
- package/src/duckdb/src/execution/expression_executor.cpp +2 -1
- package/src/duckdb/src/execution/index/art/art.cpp +202 -53
- package/src/duckdb/src/execution/index/art/art_key.cpp +20 -27
- package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +52 -17
- package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -8
- package/src/duckdb/src/execution/index/index_type_set.cpp +32 -0
- package/src/duckdb/src/execution/index/unknown_index.cpp +65 -0
- package/src/duckdb/src/execution/join_hashtable.cpp +151 -174
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -0
- package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +4 -0
- package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +2 -1
- package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +82 -36
- package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +58 -32
- package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +35 -19
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +90 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +124 -0
- package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +97 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +71 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +98 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +105 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +63 -0
- package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +1091 -0
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +124 -26
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +117 -129
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +46 -22
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +83 -199
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +21 -122
- package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +18 -17
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +22 -0
- package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +201 -0
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +221 -0
- package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +204 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +186 -0
- package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +532 -0
- package/src/duckdb/src/execution/operator/helper/physical_buffered_collector.cpp +85 -0
- package/src/duckdb/src/execution/operator/helper/physical_create_secret.cpp +21 -0
- package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +1 -1
- package/src/duckdb/src/execution/operator/helper/physical_pragma.cpp +2 -2
- package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +34 -9
- package/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp +10 -0
- package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +1 -0
- package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +25 -10
- package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +7 -8
- package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +5 -2
- package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
- package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +5 -127
- package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +221 -61
- package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +18 -21
- package/src/duckdb/src/execution/operator/join/physical_join.cpp +10 -5
- package/src/duckdb/src/execution/operator/join/physical_left_delim_join.cpp +137 -0
- package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +11 -4
- package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +2 -2
- package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +19 -4
- package/src/duckdb/src/execution/operator/join/physical_right_delim_join.cpp +121 -0
- package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
- package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +59 -0
- package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +132 -92
- package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +54 -54
- package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
- package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +4 -0
- package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +21 -3
- package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -0
- package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +61 -43
- package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +15 -13
- package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -0
- package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +10 -0
- package/src/duckdb/src/execution/operator/set/physical_cte.cpp +44 -90
- package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +3 -0
- package/src/duckdb/src/execution/operator/set/physical_union.cpp +8 -4
- package/src/duckdb/src/execution/physical_operator.cpp +3 -1
- package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +30 -143
- package/src/duckdb/src/execution/physical_plan/plan_copy_database.cpp +12 -0
- package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +11 -4
- package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +8 -8
- package/src/duckdb/src/execution/physical_plan/plan_create_secret.cpp +11 -0
- package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +9 -8
- package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +5 -3
- package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +15 -6
- package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +1 -0
- package/src/duckdb/src/execution/physical_plan/plan_pragma.cpp +1 -1
- package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +3 -1
- package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +90 -12
- package/src/duckdb/src/execution/physical_plan/plan_window.cpp +67 -22
- package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -3
- package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +163 -32
- package/src/duckdb/src/execution/reservoir_sample.cpp +112 -32
- package/src/duckdb/src/execution/window_executor.cpp +291 -26
- package/src/duckdb/src/execution/window_segment_tree.cpp +958 -114
- package/src/duckdb/src/function/aggregate/distributive/count.cpp +18 -16
- package/src/duckdb/src/function/aggregate/distributive/first.cpp +11 -4
- package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +303 -131
- package/src/duckdb/src/function/cast/array_casts.cpp +226 -0
- package/src/duckdb/src/function/cast/bit_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/cast_function_set.cpp +13 -2
- package/src/duckdb/src/function/cast/decimal_cast.cpp +2 -0
- package/src/duckdb/src/function/cast/default_casts.cpp +4 -1
- package/src/duckdb/src/function/cast/list_casts.cpp +151 -6
- package/src/duckdb/src/function/cast/numeric_casts.cpp +4 -0
- package/src/duckdb/src/function/cast/string_cast.cpp +95 -5
- package/src/duckdb/src/function/cast/struct_cast.cpp +53 -19
- package/src/duckdb/src/function/cast/time_casts.cpp +23 -1
- package/src/duckdb/src/function/cast/union/from_struct.cpp +1 -0
- package/src/duckdb/src/function/cast/union_casts.cpp +4 -3
- package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +8 -4
- package/src/duckdb/src/function/cast_rules.cpp +197 -31
- package/src/duckdb/src/function/compression_config.cpp +4 -0
- package/src/duckdb/src/function/function.cpp +15 -9
- package/src/duckdb/src/function/function_binder.cpp +80 -29
- package/src/duckdb/src/function/function_set.cpp +6 -6
- package/src/duckdb/src/function/pragma/pragma_functions.cpp +10 -8
- package/src/duckdb/src/function/pragma/pragma_queries.cpp +34 -38
- package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +12 -0
- package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +10 -1
- package/src/duckdb/src/function/scalar/list/list_concat.cpp +11 -1
- package/src/duckdb/src/function/scalar/list/list_extract.cpp +14 -3
- package/src/duckdb/src/function/scalar/list/list_resize.cpp +4 -0
- package/src/duckdb/src/function/scalar/list/list_select.cpp +176 -0
- package/src/duckdb/src/function/scalar/list/list_zip.cpp +165 -0
- package/src/duckdb/src/function/scalar/nested_functions.cpp +33 -0
- package/src/duckdb/src/function/scalar/operators/add.cpp +53 -6
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +48 -14
- package/src/duckdb/src/function/scalar/operators/multiply.cpp +9 -1
- package/src/duckdb/src/function/scalar/operators/subtract.cpp +19 -4
- package/src/duckdb/src/function/scalar/sequence/nextval.cpp +28 -55
- package/src/duckdb/src/function/scalar/strftime_format.cpp +242 -19
- package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
- package/src/duckdb/src/function/scalar/string/concat.cpp +16 -6
- package/src/duckdb/src/function/scalar/string/length.cpp +124 -24
- package/src/duckdb/src/function/scalar/string/regexp.cpp +27 -27
- package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +64 -15
- package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +4 -3
- package/src/duckdb/src/function/scalar_function.cpp +8 -7
- package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +12 -0
- package/src/duckdb/src/function/table/arrow.cpp +20 -27
- package/src/duckdb/src/function/table/arrow_conversion.cpp +433 -150
- package/src/duckdb/src/function/table/copy_csv.cpp +62 -62
- package/src/duckdb/src/function/table/range.cpp +6 -3
- package/src/duckdb/src/function/table/read_csv.cpp +107 -759
- package/src/duckdb/src/function/table/read_file.cpp +242 -0
- package/src/duckdb/src/function/table/sniff_csv.cpp +275 -0
- package/src/duckdb/src/function/table/system/duckdb_columns.cpp +15 -3
- package/src/duckdb/src/function/table/system/duckdb_databases.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +9 -13
- package/src/duckdb/src/function/table/system/duckdb_functions.cpp +67 -14
- package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +12 -15
- package/src/duckdb/src/function/table/system/duckdb_memory.cpp +63 -0
- package/src/duckdb/src/function/table/system/duckdb_optimizers.cpp +57 -0
- package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +128 -0
- package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +12 -6
- package/src/duckdb/src/function/table/system/duckdb_settings.cpp +0 -1
- package/src/duckdb/src/function/table/system/duckdb_tables.cpp +5 -0
- package/src/duckdb/src/function/table/system/duckdb_types.cpp +6 -0
- package/src/duckdb/src/function/table/system/duckdb_views.cpp +5 -0
- package/src/duckdb/src/function/table/system/pragma_table_info.cpp +166 -64
- package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -1
- package/src/duckdb/src/function/table/system_functions.cpp +3 -2
- package/src/duckdb/src/function/table/table_scan.cpp +50 -110
- package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -44
- package/src/duckdb/src/function/table_function.cpp +2 -2
- package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -3
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_dependent_entry.hpp +27 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_entry.hpp +66 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_subject_entry.hpp +27 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +25 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +19 -5
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +26 -11
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +15 -0
- package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +41 -49
- package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +1 -0
- package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +3 -1
- package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +120 -8
- package/src/duckdb/src/include/duckdb/catalog/dependency_catalog_set.hpp +32 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +2 -0
- package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +92 -12
- package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/adbc/adbc-init.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1153 -12
- package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/adbc/driver_manager.h +0 -2
- package/src/duckdb/src/include/duckdb/common/adbc/options.h +64 -0
- package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/arrow/arrow.hpp +25 -6
- package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +3 -3
- package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +30 -0
- package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +6 -6
- package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +10 -0
- package/src/duckdb/src/include/duckdb/common/constants.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/enum_util.hpp +75 -19
- package/src/duckdb/src/include/duckdb/common/enums/catalog_type.hpp +11 -1
- package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/index_constraint_type.hpp +35 -0
- package/src/duckdb/src/include/duckdb/common/enums/join_type.hpp +16 -3
- package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +32 -0
- package/src/duckdb/src/include/duckdb/common/enums/on_create_conflict.hpp +26 -0
- 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 +7 -1
- package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +9 -3
- package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +6 -5
- package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +3 -2
- package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/error_data.hpp +72 -0
- package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +47 -0
- package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +39 -0
- package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +27 -0
- package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +62 -0
- package/src/duckdb/src/include/duckdb/common/exception/list.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +29 -0
- package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +25 -0
- package/src/duckdb/src/include/duckdb/common/exception.hpp +52 -166
- package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +7 -4
- package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +53 -1
- package/src/duckdb/src/include/duckdb/common/helper.hpp +13 -3
- package/src/duckdb/src/include/duckdb/common/http_state.hpp +18 -4
- package/src/duckdb/src/include/duckdb/common/hugeint.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/limits.hpp +19 -1
- package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +7 -2
- package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +16 -3
- package/src/duckdb/src/include/duckdb/common/operator/add.hpp +13 -2
- package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +114 -5
- package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +0 -4
- package/src/duckdb/src/include/duckdb/common/operator/convert_to_string.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +29 -0
- package/src/duckdb/src/include/duckdb/common/operator/double_cast_operator.hpp +52 -0
- package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +459 -0
- package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +136 -0
- package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +7 -1
- package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/platform.h +53 -0
- package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
- package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +22 -6
- package/src/duckdb/src/include/duckdb/common/radix.hpp +6 -0
- package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +20 -6
- package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +43 -4
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +15 -0
- package/src/duckdb/src/include/duckdb/common/sort/comparators.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +12 -2
- package/src/duckdb/src/include/duckdb/common/sort/sort.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/sort/sorted_block.hpp +0 -78
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +23 -1
- package/src/duckdb/src/include/duckdb/common/type_util.hpp +5 -1
- package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +26 -3
- package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +8 -0
- package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/date.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +5 -3
- package/src/duckdb/src/include/duckdb/common/types/hash.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/hugeint.hpp +81 -15
- package/src/duckdb/src/include/duckdb/common/types/interval.hpp +57 -29
- package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +1 -1
- package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +4 -2
- package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection.hpp +2 -2
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +26 -22
- package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +7 -0
- package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +7 -5
- package/src/duckdb/src/include/duckdb/common/types/time.hpp +6 -2
- package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/uhugeint.hpp +216 -0
- package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +18 -10
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +31 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +18 -2
- package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +22 -1
- package/src/duckdb/src/include/duckdb/common/types.hpp +151 -49
- package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +81 -0
- package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +70 -6
- package/src/duckdb/src/include/duckdb/common/vector_size.hpp +6 -6
- package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +29 -2
- package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +131 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/array_functions.hpp +69 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +9 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -4
- package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +42 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/secret_functions.hpp +27 -0
- package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +56 -2
- package/src/duckdb/src/include/duckdb/core_functions/to_interval.hpp +29 -0
- package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/executor.hpp +11 -13
- package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +34 -19
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +18 -14
- package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/index/index_type.hpp +57 -0
- package/src/duckdb/src/include/duckdb/execution/index/index_type_set.hpp +29 -0
- package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +65 -0
- package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +35 -24
- package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +630 -0
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +3 -2
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +103 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +74 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +155 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +163 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +228 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +93 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +60 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +197 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +189 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +21 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +30 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +99 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +87 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +70 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +80 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +137 -0
- package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +104 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +0 -4
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_collector.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_create_secret.hpp +38 -0
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_pragma.hpp +4 -7
- package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +5 -18
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +14 -5
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +2 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_join.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_left_delim_join.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +1 -2
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +1 -1
- package/src/duckdb/src/include/duckdb/execution/operator/join/physical_right_delim_join.hpp +37 -0
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_database.hpp +35 -0
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +8 -3
- package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +14 -0
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +1 -4
- package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +0 -1
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +17 -12
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +4 -0
- package/src/duckdb/src/include/duckdb/execution/operator/set/physical_union.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +2 -1
- package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
- package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +3 -1
- package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +32 -18
- package/src/duckdb/src/include/duckdb/execution/task_error_manager.hpp +57 -0
- package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -0
- package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +101 -19
- package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +46 -14
- package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +6 -2
- package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +26 -1
- package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +7 -1
- package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +10 -0
- package/src/duckdb/src/include/duckdb/function/copy_function.hpp +16 -4
- package/src/duckdb/src/include/duckdb/function/function.hpp +12 -7
- package/src/duckdb/src/include/duckdb/function/function_binder.hpp +15 -12
- package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -3
- package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -3
- package/src/duckdb/src/include/duckdb/function/pragma/pragma_functions.hpp +4 -1
- package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -0
- package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +21 -1
- package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +22 -0
- package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +16 -2
- package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +22 -8
- package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +6 -0
- package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +35 -3
- package/src/duckdb/src/include/duckdb/function/table/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/function/table/range.hpp +12 -0
- package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +14 -16
- package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +12 -8
- package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +0 -2
- package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -3
- package/src/duckdb/src/include/duckdb/main/appender.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -2
- package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +89 -0
- package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +53 -0
- package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -1
- package/src/duckdb/src/include/duckdb/main/capi/cast/generic.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +3 -3
- package/src/duckdb/src/include/duckdb/main/client_config.hpp +8 -10
- package/src/duckdb/src/include/duckdb/main/client_context.hpp +22 -23
- package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +37 -0
- package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -7
- package/src/duckdb/src/include/duckdb/main/config.hpp +24 -7
- package/src/duckdb/src/include/duckdb/main/connection.hpp +8 -1
- package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +17 -26
- package/src/duckdb/src/include/duckdb/main/database.hpp +4 -2
- package/src/duckdb/src/include/duckdb/main/database_manager.hpp +39 -7
- package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +5 -4
- package/src/duckdb/src/include/duckdb/main/error_manager.hpp +4 -1
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +203 -197
- package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +42 -16
- package/src/duckdb/src/include/duckdb/main/extension_util.hpp +8 -1
- package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +1 -1
- package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -2
- package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +4 -4
- package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +2 -0
- package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +0 -32
- package/src/duckdb/src/include/duckdb/main/query_result.hpp +13 -12
- package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
- package/src/duckdb/src/include/duckdb/main/relation/setop_relation.hpp +3 -1
- package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +206 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +211 -0
- package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +164 -0
- package/src/duckdb/src/include/duckdb/main/settings.hpp +52 -13
- package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +9 -1
- package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +4 -1
- package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
- package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +2 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +3 -0
- package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parallel/event.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +14 -22
- package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +20 -0
- package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -5
- package/src/duckdb/src/include/duckdb/parallel/task.hpp +7 -0
- package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +10 -4
- package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +8 -1
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +11 -4
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +16 -9
- package/src/duckdb/src/include/duckdb/parser/expression/lambdaref_expression.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/expression/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +29 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +47 -2
- package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/bound_pragma_info.hpp +29 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +45 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +21 -22
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +5 -11
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +23 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +66 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -1
- package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +8 -4
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +1 -3
- package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +5 -22
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/statement/copy_database_statement.hpp +40 -0
- package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -1
- package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +4 -3
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
- package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/showref.hpp +47 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/transformer.hpp +20 -3
- package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +5 -1
- package/src/duckdb/src/include/duckdb/planner/binder.hpp +24 -27
- package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +4 -0
- package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +4 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +4 -2
- package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +5 -6
- package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +11 -0
- package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +65 -22
- package/src/duckdb/src/include/duckdb/planner/filter/struct_filter.hpp +41 -0
- package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +45 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +43 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +3 -2
- package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +5 -10
- package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +11 -4
- package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +3 -3
- package/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp +1 -1
- package/src/duckdb/src/include/duckdb/planner/query_node/bound_set_operation_node.hpp +2 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +3 -0
- package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_cte_scan.hpp +29 -0
- package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +9 -7
- package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +2 -1
- package/src/duckdb/src/include/duckdb/planner/tableref/bound_dummytableref.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +9 -5
- package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +23 -6
- package/src/duckdb/src/include/duckdb/storage/buffer/temporary_file_information.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +11 -4
- package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +0 -3
- package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +7 -7
- package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +408 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +173 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +283 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +134 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +42 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +244 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +103 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +235 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +134 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +301 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_constants.hpp +35 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +41 -0
- package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +252 -0
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +7 -103
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +5 -234
- package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -2
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +7 -107
- package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +5 -184
- package/src/duckdb/src/include/duckdb/storage/data_table.hpp +12 -17
- package/src/duckdb/src/include/duckdb/storage/database_size.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/index.hpp +40 -42
- package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +77 -0
- package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +6 -2
- package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
- package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +12 -6
- package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +17 -17
- package/src/duckdb/src/include/duckdb/storage/statistics/array_stats.hpp +40 -0
- package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +12 -3
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -0
- package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +49 -24
- package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +8 -4
- package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +67 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +3 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +1 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +1 -2
- package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +8 -3
- package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -2
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +7 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +12 -1
- package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +1 -1
- package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +16 -12
- package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +4 -0
- package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +6 -9
- package/src/duckdb/src/include/duckdb/storage/temporary_memory_manager.hpp +119 -0
- package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +13 -55
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +1 -1
- package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +4 -5
- package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
- package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -3
- package/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp +4 -4
- package/src/duckdb/src/include/duckdb/transaction/transaction_manager.hpp +3 -3
- package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +25 -0
- package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +5 -0
- package/src/duckdb/src/include/duckdb.h +571 -143
- package/src/duckdb/src/main/appender.cpp +17 -2
- package/src/duckdb/src/main/attached_database.cpp +24 -12
- package/src/duckdb/src/main/buffered_data/simple_buffered_data.cpp +96 -0
- package/src/duckdb/src/main/capi/appender-c.cpp +42 -3
- package/src/duckdb/src/main/capi/arrow-c.cpp +32 -9
- package/src/duckdb/src/main/capi/datetime-c.cpp +22 -0
- package/src/duckdb/src/main/capi/duckdb-c.cpp +14 -4
- package/src/duckdb/src/main/capi/duckdb_value-c.cpp +66 -2
- package/src/duckdb/src/main/capi/helper-c.cpp +76 -2
- package/src/duckdb/src/main/capi/hugeint-c.cpp +23 -0
- package/src/duckdb/src/main/capi/logical_types-c.cpp +27 -3
- package/src/duckdb/src/main/capi/pending-c.cpp +43 -9
- package/src/duckdb/src/main/capi/prepared-c.cpp +38 -2
- package/src/duckdb/src/main/capi/result-c.cpp +54 -3
- package/src/duckdb/src/main/capi/table_function-c.cpp +4 -4
- package/src/duckdb/src/main/capi/value-c.cpp +10 -0
- package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +3 -3
- package/src/duckdb/src/main/client_context.cpp +259 -250
- package/src/duckdb/src/main/client_data.cpp +0 -1
- package/src/duckdb/src/main/client_verify.cpp +26 -8
- package/src/duckdb/src/main/config.cpp +34 -13
- package/src/duckdb/src/main/connection.cpp +27 -6
- package/src/duckdb/src/main/connection_manager.cpp +54 -0
- package/src/duckdb/src/main/database.cpp +44 -39
- package/src/duckdb/src/main/database_manager.cpp +106 -8
- package/src/duckdb/src/main/database_path_and_type.cpp +27 -8
- package/src/duckdb/src/main/db_instance_cache.cpp +4 -4
- package/src/duckdb/src/main/error_manager.cpp +12 -3
- package/src/duckdb/src/main/extension/extension_alias.cpp +2 -2
- package/src/duckdb/src/main/extension/extension_helper.cpp +15 -16
- package/src/duckdb/src/main/extension/extension_install.cpp +33 -24
- package/src/duckdb/src/main/extension/extension_load.cpp +22 -21
- package/src/duckdb/src/main/extension/extension_util.cpp +12 -0
- package/src/duckdb/src/main/materialized_query_result.cpp +1 -1
- package/src/duckdb/src/main/pending_query_result.cpp +25 -8
- package/src/duckdb/src/main/prepared_statement.cpp +5 -5
- package/src/duckdb/src/main/prepared_statement_data.cpp +8 -1
- package/src/duckdb/src/main/query_profiler.cpp +11 -11
- package/src/duckdb/src/main/query_result.cpp +32 -6
- package/src/duckdb/src/main/relation/cross_product_relation.cpp +1 -1
- package/src/duckdb/src/main/relation/join_relation.cpp +2 -2
- package/src/duckdb/src/main/relation/read_csv_relation.cpp +38 -32
- package/src/duckdb/src/main/relation/setop_relation.cpp +5 -3
- package/src/duckdb/src/main/relation.cpp +5 -5
- package/src/duckdb/src/main/secret/secret.cpp +135 -0
- package/src/duckdb/src/main/secret/secret_manager.cpp +634 -0
- package/src/duckdb/src/main/secret/secret_storage.cpp +233 -0
- package/src/duckdb/src/main/settings/settings.cpp +133 -38
- package/src/duckdb/src/main/stream_query_result.cpp +53 -14
- package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
- package/src/duckdb/src/optimizer/cse_optimizer.cpp +1 -1
- package/src/duckdb/src/optimizer/deliminator.cpp +136 -14
- package/src/duckdb/src/optimizer/filter_combiner.cpp +72 -26
- package/src/duckdb/src/optimizer/filter_pushdown.cpp +3 -0
- package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +2 -1
- package/src/duckdb/src/optimizer/join_order/cost_model.cpp +0 -1
- package/src/duckdb/src/optimizer/join_order/join_node.cpp +4 -0
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -6
- package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +20 -0
- package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +71 -40
- package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +12 -3
- package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +77 -3
- package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +7 -7
- package/src/duckdb/src/optimizer/pushdown/pushdown_semi_anti_join.cpp +56 -0
- package/src/duckdb/src/optimizer/remove_unused_columns.cpp +21 -0
- package/src/duckdb/src/optimizer/rule/date_part_simplification.cpp +2 -2
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +15 -10
- package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +70 -0
- package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +17 -5
- package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -0
- package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -0
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +22 -9
- package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +28 -4
- package/src/duckdb/src/optimizer/unnest_rewriter.cpp +12 -7
- package/src/duckdb/src/parallel/event.cpp +2 -2
- package/src/duckdb/src/parallel/executor.cpp +114 -81
- package/src/duckdb/src/parallel/executor_task.cpp +2 -4
- package/src/duckdb/src/parallel/meta_pipeline.cpp +28 -29
- package/src/duckdb/src/parallel/pipeline.cpp +41 -41
- package/src/duckdb/src/parallel/pipeline_event.cpp +2 -4
- package/src/duckdb/src/parallel/pipeline_executor.cpp +13 -75
- package/src/duckdb/src/parallel/task_scheduler.cpp +22 -13
- package/src/duckdb/src/parser/column_definition.cpp +22 -4
- package/src/duckdb/src/parser/column_list.cpp +2 -1
- package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +51 -0
- package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +59 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +9 -1
- package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +40 -0
- package/src/duckdb/src/parser/parsed_data/attach_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +19 -0
- package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +11 -9
- package/src/duckdb/src/parser/parsed_data/create_info.cpp +1 -0
- package/src/duckdb/src/parser/parsed_data/create_secret_info.cpp +22 -0
- package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +17 -0
- package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +19 -0
- package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +13 -9
- package/src/duckdb/src/parser/parsed_data/drop_info.cpp +8 -9
- package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +16 -0
- package/src/duckdb/src/parser/parsed_expression_iterator.cpp +3 -1
- package/src/duckdb/src/parser/parser.cpp +14 -8
- package/src/duckdb/src/parser/query_error_context.cpp +12 -13
- package/src/duckdb/src/parser/query_node/select_node.cpp +5 -1
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +8 -13
- package/src/duckdb/src/parser/statement/copy_database_statement.cpp +41 -0
- package/src/duckdb/src/parser/statement/set_statement.cpp +5 -1
- package/src/duckdb/src/parser/tableref/basetableref.cpp +1 -0
- package/src/duckdb/src/parser/tableref/showref.cpp +47 -0
- package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +6 -2
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +30 -15
- package/src/duckdb/src/parser/transform/expression/transform_case.cpp +1 -0
- package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +3 -2
- package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +34 -4
- package/src/duckdb/src/parser/transform/expression/transform_function.cpp +26 -12
- package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +34 -5
- package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +3 -1
- package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +3 -1
- package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +3 -3
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -3
- package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +13 -13
- package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +2 -0
- package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -1
- package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +32 -1
- package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +1 -0
- package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +108 -0
- package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +45 -37
- package/src/duckdb/src/parser/transform/statement/transform_copy_database.cpp +29 -0
- package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +5 -14
- package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +0 -1
- package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +1 -1
- package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +25 -6
- package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -1
- package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +6 -14
- package/src/duckdb/src/parser/transform/statement/transform_secret.cpp +103 -0
- package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -1
- package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +4 -8
- package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -5
- package/src/duckdb/src/parser/transform/statement/transform_show.cpp +14 -41
- package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +13 -6
- package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -1
- package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +1 -1
- package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +1 -2
- package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +6 -5
- package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +1 -1
- package/src/duckdb/src/parser/transformer.cpp +22 -0
- package/src/duckdb/src/planner/bind_context.cpp +23 -14
- package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +15 -14
- package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +20 -9
- package/src/duckdb/src/planner/binder/expression/bind_case_expression.cpp +12 -7
- package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +4 -4
- package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +3 -3
- package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +279 -195
- package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +103 -17
- package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +3 -3
- package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +91 -68
- package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +116 -84
- package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +85 -15
- package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +68 -31
- package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +7 -7
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +11 -7
- package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +42 -19
- package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +38 -16
- package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +16 -7
- package/src/duckdb/src/planner/binder/query_node/bind_recursive_cte_node.cpp +3 -0
- package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +83 -12
- package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -37
- package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +3 -4
- package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +2 -2
- package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +3 -3
- package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +7 -5
- package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -0
- package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +48 -50
- package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +187 -0
- package/src/duckdb/src/planner/binder/statement/bind_create.cpp +38 -22
- package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +8 -15
- package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +6 -1
- package/src/duckdb/src/planner/binder/statement/bind_export.cpp +2 -2
- package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -10
- package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +37 -13
- package/src/duckdb/src/planner/binder/statement/bind_set.cpp +8 -2
- package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +2 -0
- package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +29 -14
- package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +16 -6
- package/src/duckdb/src/planner/binder/tableref/bind_expressionlistref.cpp +11 -4
- package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +1 -1
- package/src/duckdb/src/planner/binder/tableref/bind_named_parameters.cpp +2 -2
- package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +18 -17
- package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +85 -0
- package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -17
- package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -9
- package/src/duckdb/src/planner/binder.cpp +31 -26
- package/src/duckdb/src/planner/bound_result_modifier.cpp +24 -0
- package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +10 -1
- package/src/duckdb/src/planner/expression/bound_function_expression.cpp +20 -4
- package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +9 -10
- package/src/duckdb/src/planner/expression/bound_window_expression.cpp +65 -3
- package/src/duckdb/src/planner/expression.cpp +15 -5
- package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +5 -6
- package/src/duckdb/src/planner/expression_binder/check_binder.cpp +9 -8
- package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +10 -7
- package/src/duckdb/src/planner/expression_binder/having_binder.cpp +9 -4
- package/src/duckdb/src/planner/expression_binder/index_binder.cpp +0 -25
- package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -11
- package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -2
- package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +15 -8
- package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -4
- package/src/duckdb/src/planner/expression_binder.cpp +51 -25
- package/src/duckdb/src/planner/expression_iterator.cpp +2 -1
- package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -0
- package/src/duckdb/src/planner/filter/struct_filter.cpp +33 -0
- package/src/duckdb/src/planner/joinside.cpp +1 -1
- package/src/duckdb/src/planner/logical_operator.cpp +2 -1
- package/src/duckdb/src/planner/operator/logical_copy_database.cpp +32 -0
- package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +13 -4
- package/src/duckdb/src/planner/operator/logical_create_table.cpp +2 -0
- package/src/duckdb/src/planner/operator/logical_get.cpp +4 -1
- package/src/duckdb/src/planner/operator/logical_join.cpp +8 -0
- package/src/duckdb/src/planner/planner.cpp +24 -23
- package/src/duckdb/src/planner/pragma_handler.cpp +10 -19
- package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +99 -6
- package/src/duckdb/src/planner/subquery/rewrite_cte_scan.cpp +36 -0
- package/src/duckdb/src/planner/table_binding.cpp +14 -12
- package/src/duckdb/src/storage/buffer/block_handle.cpp +12 -10
- package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -1
- package/src/duckdb/src/storage/buffer/buffer_pool.cpp +25 -9
- package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +4 -3
- package/src/duckdb/src/storage/buffer_manager.cpp +14 -3
- package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +0 -8
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +15 -7
- package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +1 -1
- package/src/duckdb/src/storage/checkpoint_manager.cpp +94 -41
- package/src/duckdb/src/storage/compression/alp/alp.cpp +57 -0
- package/src/duckdb/src/storage/compression/alp/alp_constants.cpp +13 -0
- package/src/duckdb/src/storage/compression/alprd.cpp +57 -0
- package/src/duckdb/src/storage/compression/bitpacking.cpp +86 -55
- package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +41 -41
- package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -3
- package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +2 -0
- package/src/duckdb/src/storage/compression/fsst.cpp +4 -4
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +3 -0
- package/src/duckdb/src/storage/compression/rle.cpp +6 -4
- package/src/duckdb/src/storage/compression/string_uncompressed.cpp +7 -7
- package/src/duckdb/src/storage/compression/uncompressed.cpp +1 -0
- package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
- package/src/duckdb/src/storage/data_table.cpp +32 -96
- package/src/duckdb/src/storage/index.cpp +23 -11
- package/src/duckdb/src/storage/local_storage.cpp +36 -19
- package/src/duckdb/src/storage/metadata/metadata_manager.cpp +2 -2
- package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
- package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +9 -4
- package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -3
- package/src/duckdb/src/storage/serialization/serialize_extra_drop_info.cpp +42 -0
- package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -17
- package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
- package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +84 -77
- package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +63 -4
- package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +23 -0
- package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +2 -0
- package/src/duckdb/src/storage/serialization/serialize_storage.cpp +35 -0
- package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +19 -0
- package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +22 -1
- package/src/duckdb/src/storage/serialization/serialize_types.cpp +50 -0
- package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -7
- package/src/duckdb/src/storage/standard_buffer_manager.cpp +57 -28
- package/src/duckdb/src/storage/statistics/array_stats.cpp +131 -0
- package/src/duckdb/src/storage/statistics/base_statistics.cpp +62 -4
- package/src/duckdb/src/storage/statistics/column_statistics.cpp +1 -0
- package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +3 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +21 -0
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +5 -0
- package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/storage_manager.cpp +47 -22
- package/src/duckdb/src/storage/table/array_column_data.cpp +241 -0
- package/src/duckdb/src/storage/table/chunk_info.cpp +2 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -1
- package/src/duckdb/src/storage/table/column_data.cpp +41 -18
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +12 -3
- package/src/duckdb/src/storage/table/column_segment.cpp +40 -6
- package/src/duckdb/src/storage/table/list_column_data.cpp +18 -15
- package/src/duckdb/src/storage/table/row_group.cpp +73 -21
- package/src/duckdb/src/storage/table/row_group_collection.cpp +395 -20
- package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -1
- package/src/duckdb/src/storage/table/scan_state.cpp +4 -0
- package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -5
- package/src/duckdb/src/storage/table/struct_column_data.cpp +30 -10
- package/src/duckdb/src/storage/table/table_statistics.cpp +7 -1
- package/src/duckdb/src/storage/table/update_segment.cpp +18 -2
- package/src/duckdb/src/storage/table_index_list.cpp +73 -7
- package/src/duckdb/src/storage/temporary_memory_manager.cpp +148 -0
- package/src/duckdb/src/storage/wal_replay.cpp +329 -152
- package/src/duckdb/src/storage/write_ahead_log.cpp +157 -137
- package/src/duckdb/src/transaction/cleanup_state.cpp +3 -2
- package/src/duckdb/src/transaction/commit_state.cpp +89 -63
- package/src/duckdb/src/transaction/duck_transaction.cpp +5 -3
- package/src/duckdb/src/transaction/duck_transaction_manager.cpp +26 -54
- package/src/duckdb/src/transaction/meta_transaction.cpp +37 -23
- package/src/duckdb/src/transaction/transaction_context.cpp +23 -4
- package/src/duckdb/src/transaction/undo_buffer.cpp +16 -2
- package/src/duckdb/src/verification/fetch_row_verifier.cpp +13 -0
- package/src/duckdb/src/verification/prepared_statement_verifier.cpp +5 -7
- package/src/duckdb/src/verification/statement_verifier.cpp +6 -5
- package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +100 -29
- package/src/duckdb/third_party/fmt/include/fmt/format-inl.h +1 -1
- package/src/duckdb/third_party/fmt/include/fmt/format.h +4 -2
- package/src/duckdb/third_party/fmt/include/fmt/printf.h +5 -5
- package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +4 -0
- package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +82 -21
- package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +551 -1004
- package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +17 -3
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24861 -23465
- package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +420 -389
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aes.h +640 -1
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aes_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aria.h +358 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/aria_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia.h +316 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm.h +1 -1
- package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/chacha20.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/chachapoly.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/cipher.h +124 -124
- package/src/duckdb/third_party/mbedtls/include/mbedtls/cmac.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/entropy.h +293 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm.h +383 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm_alt.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +9 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/nist_kw.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls/timing.h +1 -0
- package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +35 -6
- package/src/duckdb/third_party/mbedtls/library/aes.cpp +2171 -0
- package/src/duckdb/third_party/mbedtls/library/aesni.h +1 -0
- package/src/duckdb/third_party/mbedtls/library/aria.cpp +1058 -0
- package/src/duckdb/third_party/mbedtls/library/camellia.cpp +1087 -0
- package/src/duckdb/third_party/mbedtls/library/cipher.cpp +1633 -0
- package/src/duckdb/third_party/mbedtls/library/cipher_wrap.cpp +2270 -0
- package/src/duckdb/third_party/mbedtls/library/cipher_wrap.h +146 -0
- package/src/duckdb/third_party/mbedtls/library/entropy.cpp +701 -0
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +237 -0
- package/src/duckdb/third_party/mbedtls/library/entropy_poll.h +76 -0
- package/src/duckdb/third_party/mbedtls/library/gcm.cpp +1161 -0
- package/src/duckdb/third_party/mbedtls/library/padlock.h +1 -0
- package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +132 -24
- package/src/duckdb/third_party/pcg/pcg_uint128.hpp +1 -1
- package/src/duckdb/third_party/skiplist/HeadNode.h +934 -0
- package/src/duckdb/third_party/skiplist/IntegrityEnums.h +62 -0
- package/src/duckdb/third_party/skiplist/Node.h +641 -0
- package/src/duckdb/third_party/skiplist/NodeRefs.h +251 -0
- package/src/duckdb/third_party/skiplist/RollingMedian.h +202 -0
- package/src/duckdb/third_party/skiplist/SkipList.cpp +40 -0
- package/src/duckdb/third_party/skiplist/SkipList.h +549 -0
- package/src/duckdb/third_party/thrift/thrift/thrift-config.h +1 -1
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_catalog.cpp +3 -1
- package/src/duckdb/ub_src_catalog_catalog_entry_dependency.cpp +6 -0
- package/src/duckdb/ub_src_common.cpp +1 -1
- package/src/duckdb/ub_src_common_exception.cpp +6 -0
- package/src/duckdb/ub_src_common_types.cpp +2 -2
- package/src/duckdb/ub_src_core_functions.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_array.cpp +4 -0
- package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_list.cpp +7 -3
- package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +2 -0
- package/src/duckdb/ub_src_core_functions_scalar_string.cpp +4 -0
- package/src/duckdb/ub_src_execution_index.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_buffer_manager.cpp +6 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_scanner.cpp +10 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_state_machine.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_table_function.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_helper.cpp +4 -0
- package/src/duckdb/ub_src_execution_operator_join.cpp +4 -2
- package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
- package/src/duckdb/ub_src_execution_physical_plan.cpp +4 -2
- package/src/duckdb/ub_src_function_cast.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_list.cpp +4 -0
- package/src/duckdb/ub_src_function_table.cpp +4 -4
- package/src/duckdb/ub_src_function_table_system.cpp +6 -0
- package/src/duckdb/ub_src_main.cpp +2 -0
- package/src/duckdb/ub_src_main_buffered_data.cpp +2 -0
- package/src/duckdb/ub_src_main_secret.cpp +6 -0
- package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
- package/src/duckdb/ub_src_parser_expression.cpp +2 -0
- package/src/duckdb/ub_src_parser_parsed_data.cpp +6 -0
- package/src/duckdb/ub_src_parser_statement.cpp +2 -2
- package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
- package/src/duckdb/ub_src_parser_transform_statement.cpp +6 -0
- package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -2
- package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
- package/src/duckdb/ub_src_planner_filter.cpp +2 -0
- package/src/duckdb/ub_src_planner_operator.cpp +2 -0
- package/src/duckdb/ub_src_planner_subquery.cpp +2 -0
- package/src/duckdb/ub_src_storage.cpp +2 -0
- package/src/duckdb/ub_src_storage_compression.cpp +2 -0
- package/src/duckdb/ub_src_storage_compression_alp.cpp +4 -0
- package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
- package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
- package/src/duckdb/ub_src_storage_table.cpp +2 -0
- package/src/duckdb_node.hpp +1 -1
- package/src/statement.cpp +18 -8
- package/src/utils.cpp +1 -15
- package/test/columns.test.ts +2 -1
- package/test/config.test.ts +30 -0
- package/test/test_all_types.test.ts +9 -4
@@ -1,3 +1,9 @@
|
|
1
|
+
////////////////////////////////////////////////////////////////////
|
2
|
+
////////////////////////////////////////////////////////////////////
|
3
|
+
// THIS FILE IS GENERATED BY apache/arrow, DO NOT EDIT MANUALLY //
|
4
|
+
////////////////////////////////////////////////////////////////////
|
5
|
+
////////////////////////////////////////////////////////////////////
|
6
|
+
|
1
7
|
// Licensed to the Apache Software Foundation (ASF) under one
|
2
8
|
// or more contributor license agreements. See the NOTICE file
|
3
9
|
// distributed with this work for additional information
|
@@ -20,6 +26,8 @@
|
|
20
26
|
#include "duckdb/common/adbc/adbc.hpp"
|
21
27
|
|
22
28
|
#include <algorithm>
|
29
|
+
#include <array>
|
30
|
+
#include <cctype>
|
23
31
|
#include <cstring>
|
24
32
|
#include <string>
|
25
33
|
#include <unordered_map>
|
@@ -34,8 +42,6 @@
|
|
34
42
|
#include <dlfcn.h>
|
35
43
|
#endif // defined(_WIN32)
|
36
44
|
|
37
|
-
namespace duckdb_adbc {
|
38
|
-
|
39
45
|
// Platform-specific helpers
|
40
46
|
|
41
47
|
#if defined(_WIN32)
|
@@ -57,31 +63,20 @@ void GetWinError(std::string *buffer) {
|
|
57
63
|
|
58
64
|
#endif // defined(_WIN32)
|
59
65
|
|
60
|
-
// Temporary state while the database is being configured.
|
61
|
-
struct TempDatabase {
|
62
|
-
std::unordered_map<std::string, std::string> options;
|
63
|
-
std::string driver;
|
64
|
-
// Default name (see adbc.h)
|
65
|
-
std::string entrypoint = "AdbcDriverInit";
|
66
|
-
AdbcDriverInitFunc init_func = nullptr;
|
67
|
-
};
|
68
|
-
|
69
66
|
// Error handling
|
70
67
|
|
71
68
|
void ReleaseError(struct AdbcError *error) {
|
72
69
|
if (error) {
|
73
|
-
if (error->message)
|
70
|
+
if (error->message)
|
74
71
|
delete[] error->message;
|
75
|
-
}
|
76
72
|
error->message = nullptr;
|
77
73
|
error->release = nullptr;
|
78
74
|
}
|
79
75
|
}
|
80
76
|
|
81
77
|
void SetError(struct AdbcError *error, const std::string &message) {
|
82
|
-
if (!error)
|
78
|
+
if (!error)
|
83
79
|
return;
|
84
|
-
}
|
85
80
|
if (error->message) {
|
86
81
|
// Append
|
87
82
|
std::string buffer = error->message;
|
@@ -101,61 +96,556 @@ void SetError(struct AdbcError *error, const std::string &message) {
|
|
101
96
|
error->release = ReleaseError;
|
102
97
|
}
|
103
98
|
|
104
|
-
|
105
|
-
|
106
|
-
|
99
|
+
// Driver state
|
100
|
+
|
101
|
+
/// A driver DLL.
|
102
|
+
struct ManagedLibrary {
|
103
|
+
ManagedLibrary() : handle(nullptr) {
|
104
|
+
}
|
105
|
+
ManagedLibrary(ManagedLibrary &&other) : handle(other.handle) {
|
106
|
+
other.handle = nullptr;
|
107
|
+
}
|
108
|
+
ManagedLibrary(const ManagedLibrary &) = delete;
|
109
|
+
ManagedLibrary &operator=(const ManagedLibrary &) = delete;
|
110
|
+
ManagedLibrary &operator=(ManagedLibrary &&other) noexcept {
|
111
|
+
this->handle = other.handle;
|
112
|
+
other.handle = nullptr;
|
113
|
+
return *this;
|
107
114
|
}
|
108
|
-
std::string message(message_p);
|
109
|
-
SetError(error, message);
|
110
|
-
}
|
111
115
|
|
112
|
-
|
116
|
+
~ManagedLibrary() {
|
117
|
+
Release();
|
118
|
+
}
|
113
119
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
120
|
+
void Release() {
|
121
|
+
// TODO(apache/arrow-adbc#204): causes tests to segfault
|
122
|
+
// Need to refcount the driver DLL; also, errors may retain a reference to
|
123
|
+
// release() from the DLL - how to handle this?
|
124
|
+
}
|
125
|
+
|
126
|
+
AdbcStatusCode Load(const char *library, struct AdbcError *error) {
|
127
|
+
std::string error_message;
|
128
|
+
#if defined(_WIN32)
|
129
|
+
HMODULE handle = LoadLibraryExA(library, NULL, 0);
|
130
|
+
if (!handle) {
|
131
|
+
error_message += library;
|
132
|
+
error_message += ": LoadLibraryExA() failed: ";
|
133
|
+
GetWinError(&error_message);
|
134
|
+
|
135
|
+
std::string full_driver_name = library;
|
136
|
+
full_driver_name += ".dll";
|
137
|
+
handle = LoadLibraryExA(full_driver_name.c_str(), NULL, 0);
|
138
|
+
if (!handle) {
|
139
|
+
error_message += '\n';
|
140
|
+
error_message += full_driver_name;
|
141
|
+
error_message += ": LoadLibraryExA() failed: ";
|
142
|
+
GetWinError(&error_message);
|
143
|
+
}
|
144
|
+
}
|
145
|
+
if (!handle) {
|
146
|
+
SetError(error, error_message);
|
147
|
+
return ADBC_STATUS_INTERNAL;
|
148
|
+
} else {
|
149
|
+
this->handle = handle;
|
150
|
+
}
|
151
|
+
#else
|
152
|
+
const std::string kPlatformLibraryPrefix = "lib";
|
153
|
+
#if defined(__APPLE__)
|
154
|
+
const std::string kPlatformLibrarySuffix = ".dylib";
|
155
|
+
#else
|
156
|
+
static const std::string kPlatformLibrarySuffix = ".so";
|
157
|
+
#endif // defined(__APPLE__)
|
158
|
+
|
159
|
+
void *handle = dlopen(library, RTLD_NOW | RTLD_LOCAL);
|
160
|
+
if (!handle) {
|
161
|
+
error_message = "dlopen() failed: ";
|
162
|
+
error_message += dlerror();
|
163
|
+
|
164
|
+
// If applicable, append the shared library prefix/extension and
|
165
|
+
// try again (this way you don't have to hardcode driver names by
|
166
|
+
// platform in the application)
|
167
|
+
const std::string driver_str = library;
|
168
|
+
|
169
|
+
std::string full_driver_name;
|
170
|
+
if (driver_str.size() < kPlatformLibraryPrefix.size() ||
|
171
|
+
driver_str.compare(0, kPlatformLibraryPrefix.size(), kPlatformLibraryPrefix) != 0) {
|
172
|
+
full_driver_name += kPlatformLibraryPrefix;
|
173
|
+
}
|
174
|
+
full_driver_name += library;
|
175
|
+
if (driver_str.size() < kPlatformLibrarySuffix.size() ||
|
176
|
+
driver_str.compare(full_driver_name.size() - kPlatformLibrarySuffix.size(),
|
177
|
+
kPlatformLibrarySuffix.size(), kPlatformLibrarySuffix) != 0) {
|
178
|
+
full_driver_name += kPlatformLibrarySuffix;
|
179
|
+
}
|
180
|
+
handle = dlopen(full_driver_name.c_str(), RTLD_NOW | RTLD_LOCAL);
|
181
|
+
if (!handle) {
|
182
|
+
error_message += "\ndlopen() failed: ";
|
183
|
+
error_message += dlerror();
|
184
|
+
}
|
185
|
+
}
|
186
|
+
if (handle) {
|
187
|
+
this->handle = handle;
|
188
|
+
} else {
|
189
|
+
return ADBC_STATUS_INTERNAL;
|
190
|
+
}
|
191
|
+
#endif // defined(_WIN32)
|
192
|
+
return ADBC_STATUS_OK;
|
193
|
+
}
|
194
|
+
|
195
|
+
AdbcStatusCode Lookup(const char *name, void **func, struct AdbcError *error) {
|
196
|
+
#if defined(_WIN32)
|
197
|
+
void *load_handle = reinterpret_cast<void *>(GetProcAddress(handle, name));
|
198
|
+
if (!load_handle) {
|
199
|
+
std::string message = "GetProcAddress(";
|
200
|
+
message += name;
|
201
|
+
message += ") failed: ";
|
202
|
+
GetWinError(&message);
|
203
|
+
SetError(error, message);
|
204
|
+
return ADBC_STATUS_INTERNAL;
|
205
|
+
}
|
206
|
+
#else
|
207
|
+
void *load_handle = dlsym(handle, name);
|
208
|
+
if (!load_handle) {
|
209
|
+
std::string message = "dlsym(";
|
210
|
+
message += name;
|
211
|
+
message += ") failed: ";
|
212
|
+
message += dlerror();
|
213
|
+
SetError(error, message);
|
214
|
+
return ADBC_STATUS_INTERNAL;
|
215
|
+
}
|
216
|
+
#endif // defined(_WIN32)
|
217
|
+
*func = load_handle;
|
218
|
+
return ADBC_STATUS_OK;
|
219
|
+
}
|
118
220
|
|
119
221
|
#if defined(_WIN32)
|
120
222
|
// The loaded DLL
|
121
223
|
HMODULE handle;
|
224
|
+
#else
|
225
|
+
void *handle;
|
122
226
|
#endif // defined(_WIN32)
|
123
227
|
};
|
124
228
|
|
229
|
+
/// Hold the driver DLL and the driver release callback in the driver struct.
|
230
|
+
struct ManagerDriverState {
|
231
|
+
// The original release callback
|
232
|
+
AdbcStatusCode (*driver_release)(struct AdbcDriver *driver, struct AdbcError *error);
|
233
|
+
|
234
|
+
ManagedLibrary handle;
|
235
|
+
};
|
236
|
+
|
125
237
|
/// Unload the driver DLL.
|
126
238
|
static AdbcStatusCode ReleaseDriver(struct AdbcDriver *driver, struct AdbcError *error) {
|
127
239
|
AdbcStatusCode status = ADBC_STATUS_OK;
|
128
240
|
|
129
|
-
if (!driver->private_manager)
|
241
|
+
if (!driver->private_manager)
|
130
242
|
return status;
|
131
|
-
}
|
132
243
|
ManagerDriverState *state = reinterpret_cast<ManagerDriverState *>(driver->private_manager);
|
133
244
|
|
134
245
|
if (state->driver_release) {
|
135
246
|
status = state->driver_release(driver, error);
|
136
247
|
}
|
137
|
-
|
138
|
-
#if defined(_WIN32)
|
139
|
-
// TODO(apache/arrow-adbc#204): causes tests to segfault
|
140
|
-
// if (!FreeLibrary(state->handle)) {
|
141
|
-
// std::string message = "FreeLibrary() failed: ";
|
142
|
-
// GetWinError(&message);
|
143
|
-
// SetError(error, message);
|
144
|
-
// }
|
145
|
-
#endif // defined(_WIN32)
|
248
|
+
state->handle.Release();
|
146
249
|
|
147
250
|
driver->private_manager = nullptr;
|
148
251
|
delete state;
|
149
252
|
return status;
|
150
253
|
}
|
151
254
|
|
255
|
+
// ArrowArrayStream wrapper to support AdbcErrorFromArrayStream
|
256
|
+
|
257
|
+
struct ErrorArrayStream {
|
258
|
+
struct ArrowArrayStream stream;
|
259
|
+
struct AdbcDriver *private_driver;
|
260
|
+
};
|
261
|
+
|
262
|
+
void ErrorArrayStreamRelease(struct ArrowArrayStream *stream) {
|
263
|
+
if (stream->release != ErrorArrayStreamRelease || !stream->private_data)
|
264
|
+
return;
|
265
|
+
|
266
|
+
auto *private_data = reinterpret_cast<struct ErrorArrayStream *>(stream->private_data);
|
267
|
+
private_data->stream.release(&private_data->stream);
|
268
|
+
delete private_data;
|
269
|
+
std::memset(stream, 0, sizeof(*stream));
|
270
|
+
}
|
271
|
+
|
272
|
+
const char *ErrorArrayStreamGetLastError(struct ArrowArrayStream *stream) {
|
273
|
+
if (stream->release != ErrorArrayStreamRelease || !stream->private_data)
|
274
|
+
return nullptr;
|
275
|
+
auto *private_data = reinterpret_cast<struct ErrorArrayStream *>(stream->private_data);
|
276
|
+
return private_data->stream.get_last_error(&private_data->stream);
|
277
|
+
}
|
278
|
+
|
279
|
+
int ErrorArrayStreamGetNext(struct ArrowArrayStream *stream, struct ArrowArray *array) {
|
280
|
+
if (stream->release != ErrorArrayStreamRelease || !stream->private_data)
|
281
|
+
return EINVAL;
|
282
|
+
auto *private_data = reinterpret_cast<struct ErrorArrayStream *>(stream->private_data);
|
283
|
+
return private_data->stream.get_next(&private_data->stream, array);
|
284
|
+
}
|
285
|
+
|
286
|
+
int ErrorArrayStreamGetSchema(struct ArrowArrayStream *stream, struct ArrowSchema *schema) {
|
287
|
+
if (stream->release != ErrorArrayStreamRelease || !stream->private_data)
|
288
|
+
return EINVAL;
|
289
|
+
auto *private_data = reinterpret_cast<struct ErrorArrayStream *>(stream->private_data);
|
290
|
+
return private_data->stream.get_schema(&private_data->stream, schema);
|
291
|
+
}
|
292
|
+
|
293
|
+
// Default stubs
|
294
|
+
|
295
|
+
int ErrorGetDetailCount(const struct AdbcError *error) {
|
296
|
+
return 0;
|
297
|
+
}
|
298
|
+
|
299
|
+
struct AdbcErrorDetail ErrorGetDetail(const struct AdbcError *error, int index) {
|
300
|
+
return {nullptr, nullptr, 0};
|
301
|
+
}
|
302
|
+
|
303
|
+
const struct AdbcError *ErrorFromArrayStream(struct ArrowArrayStream *stream, AdbcStatusCode *status) {
|
304
|
+
return nullptr;
|
305
|
+
}
|
306
|
+
|
307
|
+
void ErrorArrayStreamInit(struct ArrowArrayStream *out, struct AdbcDriver *private_driver) {
|
308
|
+
if (!out || !out->release ||
|
309
|
+
// Don't bother wrapping if driver didn't claim support
|
310
|
+
private_driver->ErrorFromArrayStream == ErrorFromArrayStream) {
|
311
|
+
return;
|
312
|
+
}
|
313
|
+
struct ErrorArrayStream *private_data = new ErrorArrayStream;
|
314
|
+
private_data->stream = *out;
|
315
|
+
private_data->private_driver = private_driver;
|
316
|
+
out->get_last_error = ErrorArrayStreamGetLastError;
|
317
|
+
out->get_next = ErrorArrayStreamGetNext;
|
318
|
+
out->get_schema = ErrorArrayStreamGetSchema;
|
319
|
+
out->release = ErrorArrayStreamRelease;
|
320
|
+
out->private_data = private_data;
|
321
|
+
}
|
322
|
+
|
323
|
+
AdbcStatusCode DatabaseGetOption(struct AdbcDatabase *database, const char *key, char *value, size_t *length,
|
324
|
+
struct AdbcError *error) {
|
325
|
+
return ADBC_STATUS_NOT_FOUND;
|
326
|
+
}
|
327
|
+
|
328
|
+
AdbcStatusCode DatabaseGetOptionBytes(struct AdbcDatabase *database, const char *key, uint8_t *value, size_t *length,
|
329
|
+
struct AdbcError *error) {
|
330
|
+
return ADBC_STATUS_NOT_FOUND;
|
331
|
+
}
|
332
|
+
|
333
|
+
AdbcStatusCode DatabaseGetOptionInt(struct AdbcDatabase *database, const char *key, int64_t *value,
|
334
|
+
struct AdbcError *error) {
|
335
|
+
return ADBC_STATUS_NOT_FOUND;
|
336
|
+
}
|
337
|
+
|
338
|
+
AdbcStatusCode DatabaseGetOptionDouble(struct AdbcDatabase *database, const char *key, double *value,
|
339
|
+
struct AdbcError *error) {
|
340
|
+
return ADBC_STATUS_NOT_FOUND;
|
341
|
+
}
|
342
|
+
|
343
|
+
AdbcStatusCode DatabaseSetOptionBytes(struct AdbcDatabase *database, const char *key, const uint8_t *value,
|
344
|
+
size_t length, struct AdbcError *error) {
|
345
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
346
|
+
}
|
347
|
+
|
348
|
+
AdbcStatusCode DatabaseSetOptionInt(struct AdbcDatabase *database, const char *key, int64_t value,
|
349
|
+
struct AdbcError *error) {
|
350
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
351
|
+
}
|
352
|
+
|
353
|
+
AdbcStatusCode DatabaseSetOptionDouble(struct AdbcDatabase *database, const char *key, double value,
|
354
|
+
struct AdbcError *error) {
|
355
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
356
|
+
}
|
357
|
+
|
358
|
+
AdbcStatusCode ConnectionCancel(struct AdbcConnection *connection, struct AdbcError *error) {
|
359
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
360
|
+
}
|
361
|
+
|
362
|
+
AdbcStatusCode ConnectionGetOption(struct AdbcConnection *connection, const char *key, char *value, size_t *length,
|
363
|
+
struct AdbcError *error) {
|
364
|
+
return ADBC_STATUS_NOT_FOUND;
|
365
|
+
}
|
366
|
+
|
367
|
+
AdbcStatusCode ConnectionGetOptionBytes(struct AdbcConnection *connection, const char *key, uint8_t *value,
|
368
|
+
size_t *length, struct AdbcError *error) {
|
369
|
+
return ADBC_STATUS_NOT_FOUND;
|
370
|
+
}
|
371
|
+
|
372
|
+
AdbcStatusCode ConnectionGetOptionInt(struct AdbcConnection *connection, const char *key, int64_t *value,
|
373
|
+
struct AdbcError *error) {
|
374
|
+
return ADBC_STATUS_NOT_FOUND;
|
375
|
+
}
|
376
|
+
|
377
|
+
AdbcStatusCode ConnectionGetOptionDouble(struct AdbcConnection *connection, const char *key, double *value,
|
378
|
+
struct AdbcError *error) {
|
379
|
+
return ADBC_STATUS_NOT_FOUND;
|
380
|
+
}
|
381
|
+
|
382
|
+
AdbcStatusCode ConnectionGetStatistics(struct AdbcConnection *, const char *, const char *, const char *, char,
|
383
|
+
struct ArrowArrayStream *, struct AdbcError *) {
|
384
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
385
|
+
}
|
386
|
+
|
387
|
+
AdbcStatusCode ConnectionGetStatisticNames(struct AdbcConnection *, struct ArrowArrayStream *, struct AdbcError *) {
|
388
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
389
|
+
}
|
390
|
+
|
391
|
+
AdbcStatusCode ConnectionSetOptionBytes(struct AdbcConnection *, const char *, const uint8_t *, size_t,
|
392
|
+
struct AdbcError *error) {
|
393
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
394
|
+
}
|
395
|
+
|
396
|
+
AdbcStatusCode ConnectionSetOptionInt(struct AdbcConnection *connection, const char *key, int64_t value,
|
397
|
+
struct AdbcError *error) {
|
398
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
399
|
+
}
|
400
|
+
|
401
|
+
AdbcStatusCode ConnectionSetOptionDouble(struct AdbcConnection *connection, const char *key, double value,
|
402
|
+
struct AdbcError *error) {
|
403
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
404
|
+
}
|
405
|
+
|
406
|
+
AdbcStatusCode StatementCancel(struct AdbcStatement *statement, struct AdbcError *error) {
|
407
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
408
|
+
}
|
409
|
+
|
410
|
+
AdbcStatusCode StatementExecuteSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
411
|
+
struct AdbcError *error) {
|
412
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
413
|
+
}
|
414
|
+
|
415
|
+
AdbcStatusCode StatementGetOption(struct AdbcStatement *statement, const char *key, char *value, size_t *length,
|
416
|
+
struct AdbcError *error) {
|
417
|
+
return ADBC_STATUS_NOT_FOUND;
|
418
|
+
}
|
419
|
+
|
420
|
+
AdbcStatusCode StatementGetOptionBytes(struct AdbcStatement *statement, const char *key, uint8_t *value, size_t *length,
|
421
|
+
struct AdbcError *error) {
|
422
|
+
return ADBC_STATUS_NOT_FOUND;
|
423
|
+
}
|
424
|
+
|
425
|
+
AdbcStatusCode StatementGetOptionInt(struct AdbcStatement *statement, const char *key, int64_t *value,
|
426
|
+
struct AdbcError *error) {
|
427
|
+
return ADBC_STATUS_NOT_FOUND;
|
428
|
+
}
|
429
|
+
|
430
|
+
AdbcStatusCode StatementGetOptionDouble(struct AdbcStatement *statement, const char *key, double *value,
|
431
|
+
struct AdbcError *error) {
|
432
|
+
return ADBC_STATUS_NOT_FOUND;
|
433
|
+
}
|
434
|
+
|
435
|
+
AdbcStatusCode StatementSetOptionBytes(struct AdbcStatement *, const char *, const uint8_t *, size_t,
|
436
|
+
struct AdbcError *error) {
|
437
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
438
|
+
}
|
439
|
+
|
440
|
+
AdbcStatusCode StatementSetOptionInt(struct AdbcStatement *statement, const char *key, int64_t value,
|
441
|
+
struct AdbcError *error) {
|
442
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
443
|
+
}
|
444
|
+
|
445
|
+
AdbcStatusCode StatementSetOptionDouble(struct AdbcStatement *statement, const char *key, double value,
|
446
|
+
struct AdbcError *error) {
|
447
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
448
|
+
}
|
449
|
+
|
450
|
+
/// Temporary state while the database is being configured.
|
451
|
+
struct TempDatabase {
|
452
|
+
std::unordered_map<std::string, std::string> options;
|
453
|
+
std::unordered_map<std::string, std::string> bytes_options;
|
454
|
+
std::unordered_map<std::string, int64_t> int_options;
|
455
|
+
std::unordered_map<std::string, double> double_options;
|
456
|
+
std::string driver;
|
457
|
+
std::string entrypoint;
|
458
|
+
AdbcDriverInitFunc init_func = nullptr;
|
459
|
+
};
|
460
|
+
|
152
461
|
/// Temporary state while the database is being configured.
|
153
462
|
struct TempConnection {
|
154
463
|
std::unordered_map<std::string, std::string> options;
|
464
|
+
std::unordered_map<std::string, std::string> bytes_options;
|
465
|
+
std::unordered_map<std::string, int64_t> int_options;
|
466
|
+
std::unordered_map<std::string, double> double_options;
|
155
467
|
};
|
156
468
|
|
469
|
+
static const char kDefaultEntrypoint[] = "AdbcDriverInit";
|
470
|
+
|
471
|
+
// Other helpers (intentionally not in an anonymous namespace so they can be tested)
|
472
|
+
|
473
|
+
ADBC_EXPORT
|
474
|
+
std::string AdbcDriverManagerDefaultEntrypoint(const std::string &driver) {
|
475
|
+
/// - libadbc_driver_sqlite.so.2.0.0 -> AdbcDriverSqliteInit
|
476
|
+
/// - adbc_driver_sqlite.dll -> AdbcDriverSqliteInit
|
477
|
+
/// - proprietary_driver.dll -> AdbcProprietaryDriverInit
|
478
|
+
|
479
|
+
// Potential path -> filename
|
480
|
+
// Treat both \ and / as directory separators on all platforms for simplicity
|
481
|
+
std::string filename;
|
482
|
+
{
|
483
|
+
size_t pos = driver.find_last_of("/\\");
|
484
|
+
if (pos != std::string::npos) {
|
485
|
+
filename = driver.substr(pos + 1);
|
486
|
+
} else {
|
487
|
+
filename = driver;
|
488
|
+
}
|
489
|
+
}
|
490
|
+
|
491
|
+
// Remove all extensions
|
492
|
+
{
|
493
|
+
size_t pos = filename.find('.');
|
494
|
+
if (pos != std::string::npos) {
|
495
|
+
filename = filename.substr(0, pos);
|
496
|
+
}
|
497
|
+
}
|
498
|
+
|
499
|
+
// Remove lib prefix
|
500
|
+
// https://stackoverflow.com/q/1878001/262727
|
501
|
+
if (filename.rfind("lib", 0) == 0) {
|
502
|
+
filename = filename.substr(3);
|
503
|
+
}
|
504
|
+
|
505
|
+
// Split on underscores, hyphens
|
506
|
+
// Capitalize and join
|
507
|
+
std::string entrypoint;
|
508
|
+
entrypoint.reserve(filename.size());
|
509
|
+
size_t pos = 0;
|
510
|
+
while (pos < filename.size()) {
|
511
|
+
size_t prev = pos;
|
512
|
+
pos = filename.find_first_of("-_", pos);
|
513
|
+
// if pos == npos this is the entire filename
|
514
|
+
std::string token = filename.substr(prev, pos - prev);
|
515
|
+
// capitalize first letter
|
516
|
+
token[0] = std::toupper(static_cast<unsigned char>(token[0]));
|
517
|
+
|
518
|
+
entrypoint += token;
|
519
|
+
|
520
|
+
if (pos != std::string::npos) {
|
521
|
+
pos++;
|
522
|
+
}
|
523
|
+
}
|
524
|
+
|
525
|
+
if (entrypoint.rfind("Adbc", 0) != 0) {
|
526
|
+
entrypoint = "Adbc" + entrypoint;
|
527
|
+
}
|
528
|
+
entrypoint += "Init";
|
529
|
+
|
530
|
+
return entrypoint;
|
531
|
+
}
|
532
|
+
|
157
533
|
// Direct implementations of API methods
|
158
534
|
|
535
|
+
int AdbcErrorGetDetailCount(const struct AdbcError *error) {
|
536
|
+
if (error->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA && error->private_data && error->private_driver) {
|
537
|
+
return error->private_driver->ErrorGetDetailCount(error);
|
538
|
+
}
|
539
|
+
return 0;
|
540
|
+
}
|
541
|
+
|
542
|
+
struct AdbcErrorDetail AdbcErrorGetDetail(const struct AdbcError *error, int index) {
|
543
|
+
if (error->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA && error->private_data && error->private_driver) {
|
544
|
+
return error->private_driver->ErrorGetDetail(error, index);
|
545
|
+
}
|
546
|
+
return {nullptr, nullptr, 0};
|
547
|
+
}
|
548
|
+
|
549
|
+
const struct AdbcError *AdbcErrorFromArrayStream(struct ArrowArrayStream *stream, AdbcStatusCode *status) {
|
550
|
+
if (!stream->private_data || stream->release != ErrorArrayStreamRelease) {
|
551
|
+
return nullptr;
|
552
|
+
}
|
553
|
+
auto *private_data = reinterpret_cast<struct ErrorArrayStream *>(stream->private_data);
|
554
|
+
auto *error = private_data->private_driver->ErrorFromArrayStream(&private_data->stream, status);
|
555
|
+
if (error) {
|
556
|
+
const_cast<struct AdbcError *>(error)->private_driver = private_data->private_driver;
|
557
|
+
}
|
558
|
+
return error;
|
559
|
+
}
|
560
|
+
|
561
|
+
#define INIT_ERROR(ERROR, SOURCE) \
|
562
|
+
if ((ERROR) != nullptr && (ERROR)->vendor_code == ADBC_ERROR_VENDOR_CODE_PRIVATE_DATA) { \
|
563
|
+
(ERROR)->private_driver = (SOURCE)->private_driver; \
|
564
|
+
}
|
565
|
+
|
566
|
+
#define WRAP_STREAM(EXPR, OUT, SOURCE) \
|
567
|
+
if (!(OUT)) { \
|
568
|
+
/* Happens for ExecuteQuery where out is optional */ \
|
569
|
+
return EXPR; \
|
570
|
+
} \
|
571
|
+
AdbcStatusCode status_code = EXPR; \
|
572
|
+
ErrorArrayStreamInit(OUT, (SOURCE)->private_driver); \
|
573
|
+
return status_code;
|
574
|
+
|
575
|
+
AdbcStatusCode DatabaseSetOption(struct AdbcDatabase *database, const char *key, const char *value,
|
576
|
+
struct AdbcError *error) {
|
577
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
578
|
+
}
|
579
|
+
|
580
|
+
AdbcStatusCode ConnectionCommit(struct AdbcConnection *, struct AdbcError *error) {
|
581
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
582
|
+
}
|
583
|
+
|
584
|
+
AdbcStatusCode ConnectionGetInfo(struct AdbcConnection *connection, const uint32_t *info_codes,
|
585
|
+
size_t info_codes_length, struct ArrowArrayStream *out, struct AdbcError *error) {
|
586
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
587
|
+
}
|
588
|
+
|
589
|
+
AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *, int, const char *, const char *, const char *,
|
590
|
+
const char **, const char *, struct ArrowArrayStream *, struct AdbcError *error) {
|
591
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
592
|
+
}
|
593
|
+
|
594
|
+
AdbcStatusCode ConnectionGetTableSchema(struct AdbcConnection *, const char *, const char *, const char *,
|
595
|
+
struct ArrowSchema *, struct AdbcError *error) {
|
596
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
597
|
+
}
|
598
|
+
|
599
|
+
AdbcStatusCode ConnectionGetTableTypes(struct AdbcConnection *, struct ArrowArrayStream *, struct AdbcError *error) {
|
600
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
601
|
+
}
|
602
|
+
|
603
|
+
AdbcStatusCode ConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition,
|
604
|
+
size_t serialized_length, struct ArrowArrayStream *out,
|
605
|
+
struct AdbcError *error) {
|
606
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
607
|
+
}
|
608
|
+
|
609
|
+
AdbcStatusCode ConnectionRollback(struct AdbcConnection *, struct AdbcError *error) {
|
610
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
611
|
+
}
|
612
|
+
|
613
|
+
AdbcStatusCode ConnectionSetOption(struct AdbcConnection *, const char *, const char *, struct AdbcError *error) {
|
614
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
615
|
+
}
|
616
|
+
|
617
|
+
AdbcStatusCode StatementBind(struct AdbcStatement *, struct ArrowArray *, struct ArrowSchema *,
|
618
|
+
struct AdbcError *error) {
|
619
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
620
|
+
}
|
621
|
+
|
622
|
+
AdbcStatusCode StatementExecutePartitions(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
623
|
+
struct AdbcPartitions *partitions, int64_t *rows_affected,
|
624
|
+
struct AdbcError *error) {
|
625
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
626
|
+
}
|
627
|
+
|
628
|
+
AdbcStatusCode StatementGetParameterSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
629
|
+
struct AdbcError *error) {
|
630
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
631
|
+
}
|
632
|
+
|
633
|
+
AdbcStatusCode StatementPrepare(struct AdbcStatement *, struct AdbcError *error) {
|
634
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
635
|
+
}
|
636
|
+
|
637
|
+
AdbcStatusCode StatementSetOption(struct AdbcStatement *, const char *, const char *, struct AdbcError *error) {
|
638
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
639
|
+
}
|
640
|
+
|
641
|
+
AdbcStatusCode StatementSetSqlQuery(struct AdbcStatement *, const char *, struct AdbcError *error) {
|
642
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
643
|
+
}
|
644
|
+
|
645
|
+
AdbcStatusCode StatementSetSubstraitPlan(struct AdbcStatement *, const uint8_t *, size_t, struct AdbcError *error) {
|
646
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
647
|
+
}
|
648
|
+
|
159
649
|
AdbcStatusCode AdbcDatabaseNew(struct AdbcDatabase *database, struct AdbcError *error) {
|
160
650
|
// Allocate a temporary structure to store options pre-Init
|
161
651
|
database->private_data = new TempDatabase();
|
@@ -163,12 +653,89 @@ AdbcStatusCode AdbcDatabaseNew(struct AdbcDatabase *database, struct AdbcError *
|
|
163
653
|
return ADBC_STATUS_OK;
|
164
654
|
}
|
165
655
|
|
166
|
-
AdbcStatusCode
|
656
|
+
AdbcStatusCode AdbcDatabaseGetOption(struct AdbcDatabase *database, const char *key, char *value, size_t *length,
|
167
657
|
struct AdbcError *error) {
|
168
|
-
if (
|
169
|
-
|
658
|
+
if (database->private_driver) {
|
659
|
+
INIT_ERROR(error, database);
|
660
|
+
return database->private_driver->DatabaseGetOption(database, key, value, length, error);
|
661
|
+
}
|
662
|
+
const auto *args = reinterpret_cast<const TempDatabase *>(database->private_data);
|
663
|
+
const std::string *result = nullptr;
|
664
|
+
if (std::strcmp(key, "driver") == 0) {
|
665
|
+
result = &args->driver;
|
666
|
+
} else if (std::strcmp(key, "entrypoint") == 0) {
|
667
|
+
result = &args->entrypoint;
|
668
|
+
} else {
|
669
|
+
const auto it = args->options.find(key);
|
670
|
+
if (it == args->options.end()) {
|
671
|
+
return ADBC_STATUS_NOT_FOUND;
|
672
|
+
}
|
673
|
+
result = &it->second;
|
674
|
+
}
|
675
|
+
|
676
|
+
if (*length <= result->size() + 1) {
|
677
|
+
// Enough space
|
678
|
+
std::memcpy(value, result->c_str(), result->size() + 1);
|
170
679
|
}
|
680
|
+
*length = result->size() + 1;
|
681
|
+
return ADBC_STATUS_OK;
|
682
|
+
}
|
683
|
+
|
684
|
+
AdbcStatusCode AdbcDatabaseGetOptionBytes(struct AdbcDatabase *database, const char *key, uint8_t *value,
|
685
|
+
size_t *length, struct AdbcError *error) {
|
171
686
|
if (database->private_driver) {
|
687
|
+
INIT_ERROR(error, database);
|
688
|
+
return database->private_driver->DatabaseGetOptionBytes(database, key, value, length, error);
|
689
|
+
}
|
690
|
+
const auto *args = reinterpret_cast<const TempDatabase *>(database->private_data);
|
691
|
+
const auto it = args->bytes_options.find(key);
|
692
|
+
if (it == args->options.end()) {
|
693
|
+
return ADBC_STATUS_NOT_FOUND;
|
694
|
+
}
|
695
|
+
const std::string &result = it->second;
|
696
|
+
|
697
|
+
if (*length <= result.size()) {
|
698
|
+
// Enough space
|
699
|
+
std::memcpy(value, result.c_str(), result.size());
|
700
|
+
}
|
701
|
+
*length = result.size();
|
702
|
+
return ADBC_STATUS_OK;
|
703
|
+
}
|
704
|
+
|
705
|
+
AdbcStatusCode AdbcDatabaseGetOptionInt(struct AdbcDatabase *database, const char *key, int64_t *value,
|
706
|
+
struct AdbcError *error) {
|
707
|
+
if (database->private_driver) {
|
708
|
+
INIT_ERROR(error, database);
|
709
|
+
return database->private_driver->DatabaseGetOptionInt(database, key, value, error);
|
710
|
+
}
|
711
|
+
const auto *args = reinterpret_cast<const TempDatabase *>(database->private_data);
|
712
|
+
const auto it = args->int_options.find(key);
|
713
|
+
if (it == args->int_options.end()) {
|
714
|
+
return ADBC_STATUS_NOT_FOUND;
|
715
|
+
}
|
716
|
+
*value = it->second;
|
717
|
+
return ADBC_STATUS_OK;
|
718
|
+
}
|
719
|
+
|
720
|
+
AdbcStatusCode AdbcDatabaseGetOptionDouble(struct AdbcDatabase *database, const char *key, double *value,
|
721
|
+
struct AdbcError *error) {
|
722
|
+
if (database->private_driver) {
|
723
|
+
INIT_ERROR(error, database);
|
724
|
+
return database->private_driver->DatabaseGetOptionDouble(database, key, value, error);
|
725
|
+
}
|
726
|
+
const auto *args = reinterpret_cast<const TempDatabase *>(database->private_data);
|
727
|
+
const auto it = args->double_options.find(key);
|
728
|
+
if (it == args->double_options.end()) {
|
729
|
+
return ADBC_STATUS_NOT_FOUND;
|
730
|
+
}
|
731
|
+
*value = it->second;
|
732
|
+
return ADBC_STATUS_OK;
|
733
|
+
}
|
734
|
+
|
735
|
+
AdbcStatusCode AdbcDatabaseSetOption(struct AdbcDatabase *database, const char *key, const char *value,
|
736
|
+
struct AdbcError *error) {
|
737
|
+
if (database->private_driver) {
|
738
|
+
INIT_ERROR(error, database);
|
172
739
|
return database->private_driver->DatabaseSetOption(database, key, value, error);
|
173
740
|
}
|
174
741
|
|
@@ -183,11 +750,44 @@ AdbcStatusCode AdbcDatabaseSetOption(struct AdbcDatabase *database, const char *
|
|
183
750
|
return ADBC_STATUS_OK;
|
184
751
|
}
|
185
752
|
|
753
|
+
AdbcStatusCode AdbcDatabaseSetOptionBytes(struct AdbcDatabase *database, const char *key, const uint8_t *value,
|
754
|
+
size_t length, struct AdbcError *error) {
|
755
|
+
if (database->private_driver) {
|
756
|
+
INIT_ERROR(error, database);
|
757
|
+
return database->private_driver->DatabaseSetOptionBytes(database, key, value, length, error);
|
758
|
+
}
|
759
|
+
|
760
|
+
TempDatabase *args = reinterpret_cast<TempDatabase *>(database->private_data);
|
761
|
+
args->bytes_options[key] = std::string(reinterpret_cast<const char *>(value), length);
|
762
|
+
return ADBC_STATUS_OK;
|
763
|
+
}
|
764
|
+
|
765
|
+
AdbcStatusCode AdbcDatabaseSetOptionInt(struct AdbcDatabase *database, const char *key, int64_t value,
|
766
|
+
struct AdbcError *error) {
|
767
|
+
if (database->private_driver) {
|
768
|
+
INIT_ERROR(error, database);
|
769
|
+
return database->private_driver->DatabaseSetOptionInt(database, key, value, error);
|
770
|
+
}
|
771
|
+
|
772
|
+
TempDatabase *args = reinterpret_cast<TempDatabase *>(database->private_data);
|
773
|
+
args->int_options[key] = value;
|
774
|
+
return ADBC_STATUS_OK;
|
775
|
+
}
|
776
|
+
|
777
|
+
AdbcStatusCode AdbcDatabaseSetOptionDouble(struct AdbcDatabase *database, const char *key, double value,
|
778
|
+
struct AdbcError *error) {
|
779
|
+
if (database->private_driver) {
|
780
|
+
INIT_ERROR(error, database);
|
781
|
+
return database->private_driver->DatabaseSetOptionDouble(database, key, value, error);
|
782
|
+
}
|
783
|
+
|
784
|
+
TempDatabase *args = reinterpret_cast<TempDatabase *>(database->private_data);
|
785
|
+
args->double_options[key] = value;
|
786
|
+
return ADBC_STATUS_OK;
|
787
|
+
}
|
788
|
+
|
186
789
|
AdbcStatusCode AdbcDriverManagerDatabaseSetInitFunc(struct AdbcDatabase *database, AdbcDriverInitFunc init_func,
|
187
790
|
struct AdbcError *error) {
|
188
|
-
if (!database) {
|
189
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
190
|
-
}
|
191
791
|
if (database->private_driver) {
|
192
792
|
return ADBC_STATUS_INVALID_STATE;
|
193
793
|
}
|
@@ -216,10 +816,12 @@ AdbcStatusCode AdbcDatabaseInit(struct AdbcDatabase *database, struct AdbcError
|
|
216
816
|
// So we don't confuse a driver into thinking it's initialized already
|
217
817
|
database->private_data = nullptr;
|
218
818
|
if (args->init_func) {
|
219
|
-
status = AdbcLoadDriverFromInitFunc(args->init_func,
|
220
|
-
} else {
|
221
|
-
status = AdbcLoadDriver(args->driver.c_str(), args->entrypoint.c_str(),
|
819
|
+
status = AdbcLoadDriverFromInitFunc(args->init_func, ADBC_VERSION_1_1_0, database->private_driver, error);
|
820
|
+
} else if (!args->entrypoint.empty()) {
|
821
|
+
status = AdbcLoadDriver(args->driver.c_str(), args->entrypoint.c_str(), ADBC_VERSION_1_1_0,
|
222
822
|
database->private_driver, error);
|
823
|
+
} else {
|
824
|
+
status = AdbcLoadDriver(args->driver.c_str(), nullptr, ADBC_VERSION_1_1_0, database->private_driver, error);
|
223
825
|
}
|
224
826
|
if (status != ADBC_STATUS_OK) {
|
225
827
|
// Restore private_data so it will be released by AdbcDatabaseRelease
|
@@ -240,25 +842,51 @@ AdbcStatusCode AdbcDatabaseInit(struct AdbcDatabase *database, struct AdbcError
|
|
240
842
|
database->private_driver = nullptr;
|
241
843
|
return status;
|
242
844
|
}
|
243
|
-
|
845
|
+
auto options = std::move(args->options);
|
846
|
+
auto bytes_options = std::move(args->bytes_options);
|
847
|
+
auto int_options = std::move(args->int_options);
|
848
|
+
auto double_options = std::move(args->double_options);
|
849
|
+
delete args;
|
850
|
+
|
851
|
+
INIT_ERROR(error, database);
|
852
|
+
for (const auto &option : options) {
|
244
853
|
status =
|
245
854
|
database->private_driver->DatabaseSetOption(database, option.first.c_str(), option.second.c_str(), error);
|
246
|
-
if (status != ADBC_STATUS_OK)
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
855
|
+
if (status != ADBC_STATUS_OK)
|
856
|
+
break;
|
857
|
+
}
|
858
|
+
for (const auto &option : bytes_options) {
|
859
|
+
status = database->private_driver->DatabaseSetOptionBytes(
|
860
|
+
database, option.first.c_str(), reinterpret_cast<const uint8_t *>(option.second.data()),
|
861
|
+
option.second.size(), error);
|
862
|
+
if (status != ADBC_STATUS_OK)
|
863
|
+
break;
|
864
|
+
}
|
865
|
+
for (const auto &option : int_options) {
|
866
|
+
status = database->private_driver->DatabaseSetOptionInt(database, option.first.c_str(), option.second, error);
|
867
|
+
if (status != ADBC_STATUS_OK)
|
868
|
+
break;
|
869
|
+
}
|
870
|
+
for (const auto &option : double_options) {
|
871
|
+
status =
|
872
|
+
database->private_driver->DatabaseSetOptionDouble(database, option.first.c_str(), option.second, error);
|
873
|
+
if (status != ADBC_STATUS_OK)
|
874
|
+
break;
|
875
|
+
}
|
876
|
+
|
877
|
+
if (status != ADBC_STATUS_OK) {
|
878
|
+
// Release the database
|
879
|
+
std::ignore = database->private_driver->DatabaseRelease(database, error);
|
880
|
+
if (database->private_driver->release) {
|
881
|
+
database->private_driver->release(database->private_driver, error);
|
259
882
|
}
|
883
|
+
delete database->private_driver;
|
884
|
+
database->private_driver = nullptr;
|
885
|
+
// Should be redundant, but ensure that AdbcDatabaseRelease
|
886
|
+
// below doesn't think that it contains a TempDatabase
|
887
|
+
database->private_data = nullptr;
|
888
|
+
return status;
|
260
889
|
}
|
261
|
-
delete args;
|
262
890
|
return database->private_driver->DatabaseInit(database, error);
|
263
891
|
}
|
264
892
|
|
@@ -272,6 +900,7 @@ AdbcStatusCode AdbcDatabaseRelease(struct AdbcDatabase *database, struct AdbcErr
|
|
272
900
|
}
|
273
901
|
return ADBC_STATUS_INVALID_STATE;
|
274
902
|
}
|
903
|
+
INIT_ERROR(error, database);
|
275
904
|
auto status = database->private_driver->DatabaseRelease(database, error);
|
276
905
|
if (database->private_driver->release) {
|
277
906
|
database->private_driver->release(database->private_driver, error);
|
@@ -282,72 +911,174 @@ AdbcStatusCode AdbcDatabaseRelease(struct AdbcDatabase *database, struct AdbcErr
|
|
282
911
|
return status;
|
283
912
|
}
|
284
913
|
|
285
|
-
AdbcStatusCode
|
286
|
-
if (!connection) {
|
287
|
-
return
|
914
|
+
AdbcStatusCode AdbcConnectionCancel(struct AdbcConnection *connection, struct AdbcError *error) {
|
915
|
+
if (!connection->private_driver) {
|
916
|
+
return ADBC_STATUS_INVALID_STATE;
|
288
917
|
}
|
918
|
+
INIT_ERROR(error, connection);
|
919
|
+
return connection->private_driver->ConnectionCancel(connection, error);
|
920
|
+
}
|
921
|
+
|
922
|
+
AdbcStatusCode AdbcConnectionCommit(struct AdbcConnection *connection, struct AdbcError *error) {
|
289
923
|
if (!connection->private_driver) {
|
290
924
|
return ADBC_STATUS_INVALID_STATE;
|
291
925
|
}
|
926
|
+
INIT_ERROR(error, connection);
|
292
927
|
return connection->private_driver->ConnectionCommit(connection, error);
|
293
928
|
}
|
294
929
|
|
295
|
-
AdbcStatusCode AdbcConnectionGetInfo(struct AdbcConnection *connection, uint32_t *info_codes,
|
296
|
-
struct ArrowArrayStream *out, struct AdbcError *error) {
|
297
|
-
if (!connection) {
|
298
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
299
|
-
}
|
930
|
+
AdbcStatusCode AdbcConnectionGetInfo(struct AdbcConnection *connection, const uint32_t *info_codes,
|
931
|
+
size_t info_codes_length, struct ArrowArrayStream *out, struct AdbcError *error) {
|
300
932
|
if (!connection->private_driver) {
|
301
933
|
return ADBC_STATUS_INVALID_STATE;
|
302
934
|
}
|
303
|
-
|
935
|
+
INIT_ERROR(error, connection);
|
936
|
+
WRAP_STREAM(connection->private_driver->ConnectionGetInfo(connection, info_codes, info_codes_length, out, error),
|
937
|
+
out, connection);
|
304
938
|
}
|
305
939
|
|
306
940
|
AdbcStatusCode AdbcConnectionGetObjects(struct AdbcConnection *connection, int depth, const char *catalog,
|
307
941
|
const char *db_schema, const char *table_name, const char **table_types,
|
308
942
|
const char *column_name, struct ArrowArrayStream *stream,
|
309
943
|
struct AdbcError *error) {
|
310
|
-
if (!connection) {
|
311
|
-
|
944
|
+
if (!connection->private_driver) {
|
945
|
+
return ADBC_STATUS_INVALID_STATE;
|
946
|
+
}
|
947
|
+
INIT_ERROR(error, connection);
|
948
|
+
WRAP_STREAM(connection->private_driver->ConnectionGetObjects(connection, depth, catalog, db_schema, table_name,
|
949
|
+
table_types, column_name, stream, error),
|
950
|
+
stream, connection);
|
951
|
+
}
|
952
|
+
|
953
|
+
AdbcStatusCode AdbcConnectionGetOption(struct AdbcConnection *connection, const char *key, char *value, size_t *length,
|
954
|
+
struct AdbcError *error) {
|
955
|
+
if (!connection->private_data) {
|
956
|
+
SetError(error, "AdbcConnectionGetOption: must AdbcConnectionNew first");
|
957
|
+
return ADBC_STATUS_INVALID_STATE;
|
958
|
+
}
|
959
|
+
if (!connection->private_driver) {
|
960
|
+
// Init not yet called, get the saved option
|
961
|
+
const auto *args = reinterpret_cast<const TempConnection *>(connection->private_data);
|
962
|
+
const auto it = args->options.find(key);
|
963
|
+
if (it == args->options.end()) {
|
964
|
+
return ADBC_STATUS_NOT_FOUND;
|
965
|
+
}
|
966
|
+
if (*length >= it->second.size() + 1) {
|
967
|
+
std::memcpy(value, it->second.c_str(), it->second.size() + 1);
|
968
|
+
}
|
969
|
+
*length = it->second.size() + 1;
|
970
|
+
return ADBC_STATUS_OK;
|
971
|
+
}
|
972
|
+
INIT_ERROR(error, connection);
|
973
|
+
return connection->private_driver->ConnectionGetOption(connection, key, value, length, error);
|
974
|
+
}
|
975
|
+
|
976
|
+
AdbcStatusCode AdbcConnectionGetOptionBytes(struct AdbcConnection *connection, const char *key, uint8_t *value,
|
977
|
+
size_t *length, struct AdbcError *error) {
|
978
|
+
if (!connection->private_data) {
|
979
|
+
SetError(error, "AdbcConnectionGetOption: must AdbcConnectionNew first");
|
980
|
+
return ADBC_STATUS_INVALID_STATE;
|
981
|
+
}
|
982
|
+
if (!connection->private_driver) {
|
983
|
+
// Init not yet called, get the saved option
|
984
|
+
const auto *args = reinterpret_cast<const TempConnection *>(connection->private_data);
|
985
|
+
const auto it = args->bytes_options.find(key);
|
986
|
+
if (it == args->options.end()) {
|
987
|
+
return ADBC_STATUS_NOT_FOUND;
|
988
|
+
}
|
989
|
+
if (*length >= it->second.size() + 1) {
|
990
|
+
std::memcpy(value, it->second.data(), it->second.size() + 1);
|
991
|
+
}
|
992
|
+
*length = it->second.size() + 1;
|
993
|
+
return ADBC_STATUS_OK;
|
994
|
+
}
|
995
|
+
INIT_ERROR(error, connection);
|
996
|
+
return connection->private_driver->ConnectionGetOptionBytes(connection, key, value, length, error);
|
997
|
+
}
|
998
|
+
|
999
|
+
AdbcStatusCode AdbcConnectionGetOptionInt(struct AdbcConnection *connection, const char *key, int64_t *value,
|
1000
|
+
struct AdbcError *error) {
|
1001
|
+
if (!connection->private_data) {
|
1002
|
+
SetError(error, "AdbcConnectionGetOption: must AdbcConnectionNew first");
|
312
1003
|
return ADBC_STATUS_INVALID_STATE;
|
313
1004
|
}
|
1005
|
+
if (!connection->private_driver) {
|
1006
|
+
// Init not yet called, get the saved option
|
1007
|
+
const auto *args = reinterpret_cast<const TempConnection *>(connection->private_data);
|
1008
|
+
const auto it = args->int_options.find(key);
|
1009
|
+
if (it == args->int_options.end()) {
|
1010
|
+
return ADBC_STATUS_NOT_FOUND;
|
1011
|
+
}
|
1012
|
+
*value = it->second;
|
1013
|
+
return ADBC_STATUS_OK;
|
1014
|
+
}
|
1015
|
+
INIT_ERROR(error, connection);
|
1016
|
+
return connection->private_driver->ConnectionGetOptionInt(connection, key, value, error);
|
1017
|
+
}
|
1018
|
+
|
1019
|
+
AdbcStatusCode AdbcConnectionGetOptionDouble(struct AdbcConnection *connection, const char *key, double *value,
|
1020
|
+
struct AdbcError *error) {
|
314
1021
|
if (!connection->private_data) {
|
315
|
-
SetError(error, "
|
1022
|
+
SetError(error, "AdbcConnectionGetOption: must AdbcConnectionNew first");
|
1023
|
+
return ADBC_STATUS_INVALID_STATE;
|
1024
|
+
}
|
1025
|
+
if (!connection->private_driver) {
|
1026
|
+
// Init not yet called, get the saved option
|
1027
|
+
const auto *args = reinterpret_cast<const TempConnection *>(connection->private_data);
|
1028
|
+
const auto it = args->double_options.find(key);
|
1029
|
+
if (it == args->double_options.end()) {
|
1030
|
+
return ADBC_STATUS_NOT_FOUND;
|
1031
|
+
}
|
1032
|
+
*value = it->second;
|
1033
|
+
return ADBC_STATUS_OK;
|
1034
|
+
}
|
1035
|
+
INIT_ERROR(error, connection);
|
1036
|
+
return connection->private_driver->ConnectionGetOptionDouble(connection, key, value, error);
|
1037
|
+
}
|
1038
|
+
|
1039
|
+
AdbcStatusCode AdbcConnectionGetStatistics(struct AdbcConnection *connection, const char *catalog,
|
1040
|
+
const char *db_schema, const char *table_name, char approximate,
|
1041
|
+
struct ArrowArrayStream *out, struct AdbcError *error) {
|
1042
|
+
if (!connection->private_driver) {
|
1043
|
+
return ADBC_STATUS_INVALID_STATE;
|
1044
|
+
}
|
1045
|
+
INIT_ERROR(error, connection);
|
1046
|
+
WRAP_STREAM(connection->private_driver->ConnectionGetStatistics(connection, catalog, db_schema, table_name,
|
1047
|
+
approximate == 1, out, error),
|
1048
|
+
out, connection);
|
1049
|
+
}
|
1050
|
+
|
1051
|
+
AdbcStatusCode AdbcConnectionGetStatisticNames(struct AdbcConnection *connection, struct ArrowArrayStream *out,
|
1052
|
+
struct AdbcError *error) {
|
1053
|
+
if (!connection->private_driver) {
|
316
1054
|
return ADBC_STATUS_INVALID_STATE;
|
317
1055
|
}
|
318
|
-
|
319
|
-
|
1056
|
+
INIT_ERROR(error, connection);
|
1057
|
+
WRAP_STREAM(connection->private_driver->ConnectionGetStatisticNames(connection, out, error), out, connection);
|
320
1058
|
}
|
321
1059
|
|
322
1060
|
AdbcStatusCode AdbcConnectionGetTableSchema(struct AdbcConnection *connection, const char *catalog,
|
323
1061
|
const char *db_schema, const char *table_name, struct ArrowSchema *schema,
|
324
1062
|
struct AdbcError *error) {
|
325
|
-
if (!connection) {
|
326
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
327
|
-
}
|
328
1063
|
if (!connection->private_driver) {
|
329
1064
|
return ADBC_STATUS_INVALID_STATE;
|
330
1065
|
}
|
1066
|
+
INIT_ERROR(error, connection);
|
331
1067
|
return connection->private_driver->ConnectionGetTableSchema(connection, catalog, db_schema, table_name, schema,
|
332
1068
|
error);
|
333
1069
|
}
|
334
1070
|
|
335
1071
|
AdbcStatusCode AdbcConnectionGetTableTypes(struct AdbcConnection *connection, struct ArrowArrayStream *stream,
|
336
1072
|
struct AdbcError *error) {
|
337
|
-
if (!connection) {
|
338
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
339
|
-
}
|
340
1073
|
if (!connection->private_driver) {
|
341
1074
|
return ADBC_STATUS_INVALID_STATE;
|
342
1075
|
}
|
343
|
-
|
1076
|
+
INIT_ERROR(error, connection);
|
1077
|
+
WRAP_STREAM(connection->private_driver->ConnectionGetTableTypes(connection, stream, error), stream, connection);
|
344
1078
|
}
|
345
1079
|
|
346
1080
|
AdbcStatusCode AdbcConnectionInit(struct AdbcConnection *connection, struct AdbcDatabase *database,
|
347
1081
|
struct AdbcError *error) {
|
348
|
-
if (!connection) {
|
349
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
350
|
-
}
|
351
1082
|
if (!connection->private_data) {
|
352
1083
|
SetError(error, "Must call AdbcConnectionNew first");
|
353
1084
|
return ADBC_STATUS_INVALID_STATE;
|
@@ -358,21 +1089,42 @@ AdbcStatusCode AdbcConnectionInit(struct AdbcConnection *connection, struct Adbc
|
|
358
1089
|
TempConnection *args = reinterpret_cast<TempConnection *>(connection->private_data);
|
359
1090
|
connection->private_data = nullptr;
|
360
1091
|
std::unordered_map<std::string, std::string> options = std::move(args->options);
|
1092
|
+
std::unordered_map<std::string, std::string> bytes_options = std::move(args->bytes_options);
|
1093
|
+
std::unordered_map<std::string, int64_t> int_options = std::move(args->int_options);
|
1094
|
+
std::unordered_map<std::string, double> double_options = std::move(args->double_options);
|
361
1095
|
delete args;
|
362
1096
|
|
363
1097
|
auto status = database->private_driver->ConnectionNew(connection, error);
|
364
|
-
if (status != ADBC_STATUS_OK)
|
1098
|
+
if (status != ADBC_STATUS_OK)
|
365
1099
|
return status;
|
366
|
-
}
|
367
1100
|
connection->private_driver = database->private_driver;
|
368
1101
|
|
369
1102
|
for (const auto &option : options) {
|
370
1103
|
status = database->private_driver->ConnectionSetOption(connection, option.first.c_str(), option.second.c_str(),
|
371
1104
|
error);
|
372
|
-
if (status != ADBC_STATUS_OK)
|
1105
|
+
if (status != ADBC_STATUS_OK)
|
1106
|
+
return status;
|
1107
|
+
}
|
1108
|
+
for (const auto &option : bytes_options) {
|
1109
|
+
status = database->private_driver->ConnectionSetOptionBytes(
|
1110
|
+
connection, option.first.c_str(), reinterpret_cast<const uint8_t *>(option.second.data()),
|
1111
|
+
option.second.size(), error);
|
1112
|
+
if (status != ADBC_STATUS_OK)
|
1113
|
+
return status;
|
1114
|
+
}
|
1115
|
+
for (const auto &option : int_options) {
|
1116
|
+
status =
|
1117
|
+
database->private_driver->ConnectionSetOptionInt(connection, option.first.c_str(), option.second, error);
|
1118
|
+
if (status != ADBC_STATUS_OK)
|
1119
|
+
return status;
|
1120
|
+
}
|
1121
|
+
for (const auto &option : double_options) {
|
1122
|
+
status =
|
1123
|
+
database->private_driver->ConnectionSetOptionDouble(connection, option.first.c_str(), option.second, error);
|
1124
|
+
if (status != ADBC_STATUS_OK)
|
373
1125
|
return status;
|
374
|
-
}
|
375
1126
|
}
|
1127
|
+
INIT_ERROR(error, connection);
|
376
1128
|
return connection->private_driver->ConnectionInit(connection, database, error);
|
377
1129
|
}
|
378
1130
|
|
@@ -388,20 +1140,16 @@ AdbcStatusCode AdbcConnectionNew(struct AdbcConnection *connection, struct AdbcE
|
|
388
1140
|
AdbcStatusCode AdbcConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition,
|
389
1141
|
size_t serialized_length, struct ArrowArrayStream *out,
|
390
1142
|
struct AdbcError *error) {
|
391
|
-
if (!connection) {
|
392
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
393
|
-
}
|
394
1143
|
if (!connection->private_driver) {
|
395
1144
|
return ADBC_STATUS_INVALID_STATE;
|
396
1145
|
}
|
397
|
-
|
398
|
-
|
1146
|
+
INIT_ERROR(error, connection);
|
1147
|
+
WRAP_STREAM(connection->private_driver->ConnectionReadPartition(connection, serialized_partition, serialized_length,
|
1148
|
+
out, error),
|
1149
|
+
out, connection);
|
399
1150
|
}
|
400
1151
|
|
401
1152
|
AdbcStatusCode AdbcConnectionRelease(struct AdbcConnection *connection, struct AdbcError *error) {
|
402
|
-
if (!connection) {
|
403
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
404
|
-
}
|
405
1153
|
if (!connection->private_driver) {
|
406
1154
|
if (connection->private_data) {
|
407
1155
|
TempConnection *args = reinterpret_cast<TempConnection *>(connection->private_data);
|
@@ -411,26 +1159,22 @@ AdbcStatusCode AdbcConnectionRelease(struct AdbcConnection *connection, struct A
|
|
411
1159
|
}
|
412
1160
|
return ADBC_STATUS_INVALID_STATE;
|
413
1161
|
}
|
1162
|
+
INIT_ERROR(error, connection);
|
414
1163
|
auto status = connection->private_driver->ConnectionRelease(connection, error);
|
415
1164
|
connection->private_driver = nullptr;
|
416
1165
|
return status;
|
417
1166
|
}
|
418
1167
|
|
419
1168
|
AdbcStatusCode AdbcConnectionRollback(struct AdbcConnection *connection, struct AdbcError *error) {
|
420
|
-
if (!connection) {
|
421
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
422
|
-
}
|
423
1169
|
if (!connection->private_driver) {
|
424
1170
|
return ADBC_STATUS_INVALID_STATE;
|
425
1171
|
}
|
1172
|
+
INIT_ERROR(error, connection);
|
426
1173
|
return connection->private_driver->ConnectionRollback(connection, error);
|
427
1174
|
}
|
428
1175
|
|
429
1176
|
AdbcStatusCode AdbcConnectionSetOption(struct AdbcConnection *connection, const char *key, const char *value,
|
430
1177
|
struct AdbcError *error) {
|
431
|
-
if (!connection) {
|
432
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
433
|
-
}
|
434
1178
|
if (!connection->private_data) {
|
435
1179
|
SetError(error, "AdbcConnectionSetOption: must AdbcConnectionNew first");
|
436
1180
|
return ADBC_STATUS_INVALID_STATE;
|
@@ -441,98 +1185,182 @@ AdbcStatusCode AdbcConnectionSetOption(struct AdbcConnection *connection, const
|
|
441
1185
|
args->options[key] = value;
|
442
1186
|
return ADBC_STATUS_OK;
|
443
1187
|
}
|
1188
|
+
INIT_ERROR(error, connection);
|
444
1189
|
return connection->private_driver->ConnectionSetOption(connection, key, value, error);
|
445
1190
|
}
|
446
1191
|
|
1192
|
+
AdbcStatusCode AdbcConnectionSetOptionBytes(struct AdbcConnection *connection, const char *key, const uint8_t *value,
|
1193
|
+
size_t length, struct AdbcError *error) {
|
1194
|
+
if (!connection->private_data) {
|
1195
|
+
SetError(error, "AdbcConnectionSetOptionInt: must AdbcConnectionNew first");
|
1196
|
+
return ADBC_STATUS_INVALID_STATE;
|
1197
|
+
}
|
1198
|
+
if (!connection->private_driver) {
|
1199
|
+
// Init not yet called, save the option
|
1200
|
+
TempConnection *args = reinterpret_cast<TempConnection *>(connection->private_data);
|
1201
|
+
args->bytes_options[key] = std::string(reinterpret_cast<const char *>(value), length);
|
1202
|
+
return ADBC_STATUS_OK;
|
1203
|
+
}
|
1204
|
+
INIT_ERROR(error, connection);
|
1205
|
+
return connection->private_driver->ConnectionSetOptionBytes(connection, key, value, length, error);
|
1206
|
+
}
|
1207
|
+
|
1208
|
+
AdbcStatusCode AdbcConnectionSetOptionInt(struct AdbcConnection *connection, const char *key, int64_t value,
|
1209
|
+
struct AdbcError *error) {
|
1210
|
+
if (!connection->private_data) {
|
1211
|
+
SetError(error, "AdbcConnectionSetOptionInt: must AdbcConnectionNew first");
|
1212
|
+
return ADBC_STATUS_INVALID_STATE;
|
1213
|
+
}
|
1214
|
+
if (!connection->private_driver) {
|
1215
|
+
// Init not yet called, save the option
|
1216
|
+
TempConnection *args = reinterpret_cast<TempConnection *>(connection->private_data);
|
1217
|
+
args->int_options[key] = value;
|
1218
|
+
return ADBC_STATUS_OK;
|
1219
|
+
}
|
1220
|
+
INIT_ERROR(error, connection);
|
1221
|
+
return connection->private_driver->ConnectionSetOptionInt(connection, key, value, error);
|
1222
|
+
}
|
1223
|
+
|
1224
|
+
AdbcStatusCode AdbcConnectionSetOptionDouble(struct AdbcConnection *connection, const char *key, double value,
|
1225
|
+
struct AdbcError *error) {
|
1226
|
+
if (!connection->private_data) {
|
1227
|
+
SetError(error, "AdbcConnectionSetOptionDouble: must AdbcConnectionNew first");
|
1228
|
+
return ADBC_STATUS_INVALID_STATE;
|
1229
|
+
}
|
1230
|
+
if (!connection->private_driver) {
|
1231
|
+
// Init not yet called, save the option
|
1232
|
+
TempConnection *args = reinterpret_cast<TempConnection *>(connection->private_data);
|
1233
|
+
args->double_options[key] = value;
|
1234
|
+
return ADBC_STATUS_OK;
|
1235
|
+
}
|
1236
|
+
INIT_ERROR(error, connection);
|
1237
|
+
return connection->private_driver->ConnectionSetOptionDouble(connection, key, value, error);
|
1238
|
+
}
|
1239
|
+
|
447
1240
|
AdbcStatusCode AdbcStatementBind(struct AdbcStatement *statement, struct ArrowArray *values, struct ArrowSchema *schema,
|
448
1241
|
struct AdbcError *error) {
|
449
|
-
if (!statement) {
|
450
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
451
|
-
}
|
452
1242
|
if (!statement->private_driver) {
|
453
1243
|
return ADBC_STATUS_INVALID_STATE;
|
454
1244
|
}
|
1245
|
+
INIT_ERROR(error, statement);
|
455
1246
|
return statement->private_driver->StatementBind(statement, values, schema, error);
|
456
1247
|
}
|
457
1248
|
|
458
1249
|
AdbcStatusCode AdbcStatementBindStream(struct AdbcStatement *statement, struct ArrowArrayStream *stream,
|
459
1250
|
struct AdbcError *error) {
|
460
|
-
if (!statement) {
|
461
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
462
|
-
}
|
463
1251
|
if (!statement->private_driver) {
|
464
1252
|
return ADBC_STATUS_INVALID_STATE;
|
465
1253
|
}
|
1254
|
+
INIT_ERROR(error, statement);
|
466
1255
|
return statement->private_driver->StatementBindStream(statement, stream, error);
|
467
1256
|
}
|
468
1257
|
|
1258
|
+
AdbcStatusCode AdbcStatementCancel(struct AdbcStatement *statement, struct AdbcError *error) {
|
1259
|
+
if (!statement->private_driver) {
|
1260
|
+
return ADBC_STATUS_INVALID_STATE;
|
1261
|
+
}
|
1262
|
+
INIT_ERROR(error, statement);
|
1263
|
+
return statement->private_driver->StatementCancel(statement, error);
|
1264
|
+
}
|
1265
|
+
|
469
1266
|
// XXX: cpplint gets confused here if declared as 'struct ArrowSchema* schema'
|
470
1267
|
AdbcStatusCode AdbcStatementExecutePartitions(struct AdbcStatement *statement, ArrowSchema *schema,
|
471
1268
|
struct AdbcPartitions *partitions, int64_t *rows_affected,
|
472
1269
|
struct AdbcError *error) {
|
473
|
-
if (!statement) {
|
474
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
475
|
-
}
|
476
1270
|
if (!statement->private_driver) {
|
477
1271
|
return ADBC_STATUS_INVALID_STATE;
|
478
1272
|
}
|
1273
|
+
INIT_ERROR(error, statement);
|
479
1274
|
return statement->private_driver->StatementExecutePartitions(statement, schema, partitions, rows_affected, error);
|
480
1275
|
}
|
481
1276
|
|
482
1277
|
AdbcStatusCode AdbcStatementExecuteQuery(struct AdbcStatement *statement, struct ArrowArrayStream *out,
|
483
1278
|
int64_t *rows_affected, struct AdbcError *error) {
|
484
|
-
if (!statement) {
|
485
|
-
return
|
1279
|
+
if (!statement->private_driver) {
|
1280
|
+
return ADBC_STATUS_INVALID_STATE;
|
1281
|
+
}
|
1282
|
+
INIT_ERROR(error, statement);
|
1283
|
+
WRAP_STREAM(statement->private_driver->StatementExecuteQuery(statement, out, rows_affected, error), out, statement);
|
1284
|
+
}
|
1285
|
+
|
1286
|
+
AdbcStatusCode AdbcStatementExecuteSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
1287
|
+
struct AdbcError *error) {
|
1288
|
+
if (!statement->private_driver) {
|
1289
|
+
return ADBC_STATUS_INVALID_STATE;
|
1290
|
+
}
|
1291
|
+
INIT_ERROR(error, statement);
|
1292
|
+
return statement->private_driver->StatementExecuteSchema(statement, schema, error);
|
1293
|
+
}
|
1294
|
+
|
1295
|
+
AdbcStatusCode AdbcStatementGetOption(struct AdbcStatement *statement, const char *key, char *value, size_t *length,
|
1296
|
+
struct AdbcError *error) {
|
1297
|
+
if (!statement->private_driver) {
|
1298
|
+
return ADBC_STATUS_INVALID_STATE;
|
1299
|
+
}
|
1300
|
+
INIT_ERROR(error, statement);
|
1301
|
+
return statement->private_driver->StatementGetOption(statement, key, value, length, error);
|
1302
|
+
}
|
1303
|
+
|
1304
|
+
AdbcStatusCode AdbcStatementGetOptionBytes(struct AdbcStatement *statement, const char *key, uint8_t *value,
|
1305
|
+
size_t *length, struct AdbcError *error) {
|
1306
|
+
if (!statement->private_driver) {
|
1307
|
+
return ADBC_STATUS_INVALID_STATE;
|
1308
|
+
}
|
1309
|
+
INIT_ERROR(error, statement);
|
1310
|
+
return statement->private_driver->StatementGetOptionBytes(statement, key, value, length, error);
|
1311
|
+
}
|
1312
|
+
|
1313
|
+
AdbcStatusCode AdbcStatementGetOptionInt(struct AdbcStatement *statement, const char *key, int64_t *value,
|
1314
|
+
struct AdbcError *error) {
|
1315
|
+
if (!statement->private_driver) {
|
1316
|
+
return ADBC_STATUS_INVALID_STATE;
|
486
1317
|
}
|
1318
|
+
INIT_ERROR(error, statement);
|
1319
|
+
return statement->private_driver->StatementGetOptionInt(statement, key, value, error);
|
1320
|
+
}
|
1321
|
+
|
1322
|
+
AdbcStatusCode AdbcStatementGetOptionDouble(struct AdbcStatement *statement, const char *key, double *value,
|
1323
|
+
struct AdbcError *error) {
|
487
1324
|
if (!statement->private_driver) {
|
488
1325
|
return ADBC_STATUS_INVALID_STATE;
|
489
1326
|
}
|
490
|
-
|
1327
|
+
INIT_ERROR(error, statement);
|
1328
|
+
return statement->private_driver->StatementGetOptionDouble(statement, key, value, error);
|
491
1329
|
}
|
492
1330
|
|
493
1331
|
AdbcStatusCode AdbcStatementGetParameterSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
|
494
1332
|
struct AdbcError *error) {
|
495
|
-
if (!statement) {
|
496
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
497
|
-
}
|
498
1333
|
if (!statement->private_driver) {
|
499
1334
|
return ADBC_STATUS_INVALID_STATE;
|
500
1335
|
}
|
1336
|
+
INIT_ERROR(error, statement);
|
501
1337
|
return statement->private_driver->StatementGetParameterSchema(statement, schema, error);
|
502
1338
|
}
|
503
1339
|
|
504
1340
|
AdbcStatusCode AdbcStatementNew(struct AdbcConnection *connection, struct AdbcStatement *statement,
|
505
1341
|
struct AdbcError *error) {
|
506
|
-
if (!connection) {
|
507
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
508
|
-
}
|
509
1342
|
if (!connection->private_driver) {
|
510
1343
|
return ADBC_STATUS_INVALID_STATE;
|
511
1344
|
}
|
1345
|
+
INIT_ERROR(error, connection);
|
512
1346
|
auto status = connection->private_driver->StatementNew(connection, statement, error);
|
513
1347
|
statement->private_driver = connection->private_driver;
|
514
1348
|
return status;
|
515
1349
|
}
|
516
1350
|
|
517
1351
|
AdbcStatusCode AdbcStatementPrepare(struct AdbcStatement *statement, struct AdbcError *error) {
|
518
|
-
if (!statement) {
|
519
|
-
SetError(error, "Missing statement object");
|
520
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
521
|
-
}
|
522
|
-
if (!statement->private_data) {
|
523
|
-
SetError(error, "Invalid statement object");
|
1352
|
+
if (!statement->private_driver) {
|
524
1353
|
return ADBC_STATUS_INVALID_STATE;
|
525
1354
|
}
|
1355
|
+
INIT_ERROR(error, statement);
|
526
1356
|
return statement->private_driver->StatementPrepare(statement, error);
|
527
1357
|
}
|
528
1358
|
|
529
1359
|
AdbcStatusCode AdbcStatementRelease(struct AdbcStatement *statement, struct AdbcError *error) {
|
530
|
-
if (!statement) {
|
531
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
532
|
-
}
|
533
1360
|
if (!statement->private_driver) {
|
534
1361
|
return ADBC_STATUS_INVALID_STATE;
|
535
1362
|
}
|
1363
|
+
INIT_ERROR(error, statement);
|
536
1364
|
auto status = statement->private_driver->StatementRelease(statement, error);
|
537
1365
|
statement->private_driver = nullptr;
|
538
1366
|
return status;
|
@@ -540,65 +1368,82 @@ AdbcStatusCode AdbcStatementRelease(struct AdbcStatement *statement, struct Adbc
|
|
540
1368
|
|
541
1369
|
AdbcStatusCode AdbcStatementSetOption(struct AdbcStatement *statement, const char *key, const char *value,
|
542
1370
|
struct AdbcError *error) {
|
543
|
-
if (!statement) {
|
544
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
545
|
-
}
|
546
1371
|
if (!statement->private_driver) {
|
547
1372
|
return ADBC_STATUS_INVALID_STATE;
|
548
1373
|
}
|
1374
|
+
INIT_ERROR(error, statement);
|
549
1375
|
return statement->private_driver->StatementSetOption(statement, key, value, error);
|
550
1376
|
}
|
551
1377
|
|
552
|
-
AdbcStatusCode
|
553
|
-
|
554
|
-
|
1378
|
+
AdbcStatusCode AdbcStatementSetOptionBytes(struct AdbcStatement *statement, const char *key, const uint8_t *value,
|
1379
|
+
size_t length, struct AdbcError *error) {
|
1380
|
+
if (!statement->private_driver) {
|
1381
|
+
return ADBC_STATUS_INVALID_STATE;
|
1382
|
+
}
|
1383
|
+
INIT_ERROR(error, statement);
|
1384
|
+
return statement->private_driver->StatementSetOptionBytes(statement, key, value, length, error);
|
1385
|
+
}
|
1386
|
+
|
1387
|
+
AdbcStatusCode AdbcStatementSetOptionInt(struct AdbcStatement *statement, const char *key, int64_t value,
|
1388
|
+
struct AdbcError *error) {
|
1389
|
+
if (!statement->private_driver) {
|
1390
|
+
return ADBC_STATUS_INVALID_STATE;
|
555
1391
|
}
|
1392
|
+
INIT_ERROR(error, statement);
|
1393
|
+
return statement->private_driver->StatementSetOptionInt(statement, key, value, error);
|
1394
|
+
}
|
1395
|
+
|
1396
|
+
AdbcStatusCode AdbcStatementSetOptionDouble(struct AdbcStatement *statement, const char *key, double value,
|
1397
|
+
struct AdbcError *error) {
|
1398
|
+
if (!statement->private_driver) {
|
1399
|
+
return ADBC_STATUS_INVALID_STATE;
|
1400
|
+
}
|
1401
|
+
INIT_ERROR(error, statement);
|
1402
|
+
return statement->private_driver->StatementSetOptionDouble(statement, key, value, error);
|
1403
|
+
}
|
1404
|
+
|
1405
|
+
AdbcStatusCode AdbcStatementSetSqlQuery(struct AdbcStatement *statement, const char *query, struct AdbcError *error) {
|
556
1406
|
if (!statement->private_driver) {
|
557
1407
|
return ADBC_STATUS_INVALID_STATE;
|
558
1408
|
}
|
1409
|
+
INIT_ERROR(error, statement);
|
559
1410
|
return statement->private_driver->StatementSetSqlQuery(statement, query, error);
|
560
1411
|
}
|
561
1412
|
|
562
1413
|
AdbcStatusCode AdbcStatementSetSubstraitPlan(struct AdbcStatement *statement, const uint8_t *plan, size_t length,
|
563
1414
|
struct AdbcError *error) {
|
564
|
-
if (!statement) {
|
565
|
-
return ADBC_STATUS_INVALID_ARGUMENT;
|
566
|
-
}
|
567
1415
|
if (!statement->private_driver) {
|
568
1416
|
return ADBC_STATUS_INVALID_STATE;
|
569
1417
|
}
|
1418
|
+
INIT_ERROR(error, statement);
|
570
1419
|
return statement->private_driver->StatementSetSubstraitPlan(statement, plan, length, error);
|
571
1420
|
}
|
572
1421
|
|
573
1422
|
const char *AdbcStatusCodeMessage(AdbcStatusCode code) {
|
574
|
-
#define STRINGIFY(s) #s
|
575
|
-
#define STRINGIFY_VALUE(s) STRINGIFY(s)
|
576
1423
|
#define CASE(CONSTANT) \
|
577
|
-
case CONSTANT:
|
578
|
-
return #CONSTANT
|
1424
|
+
case ADBC_STATUS_##CONSTANT: \
|
1425
|
+
return #CONSTANT;
|
579
1426
|
|
580
1427
|
switch (code) {
|
581
|
-
CASE(
|
582
|
-
CASE(
|
583
|
-
CASE(
|
584
|
-
CASE(
|
585
|
-
CASE(
|
586
|
-
CASE(
|
587
|
-
CASE(
|
588
|
-
CASE(
|
589
|
-
CASE(
|
590
|
-
CASE(
|
591
|
-
CASE(
|
592
|
-
CASE(
|
593
|
-
CASE(
|
594
|
-
CASE(
|
595
|
-
CASE(
|
1428
|
+
CASE(OK);
|
1429
|
+
CASE(UNKNOWN);
|
1430
|
+
CASE(NOT_IMPLEMENTED);
|
1431
|
+
CASE(NOT_FOUND);
|
1432
|
+
CASE(ALREADY_EXISTS);
|
1433
|
+
CASE(INVALID_ARGUMENT);
|
1434
|
+
CASE(INVALID_STATE);
|
1435
|
+
CASE(INVALID_DATA);
|
1436
|
+
CASE(INTEGRITY);
|
1437
|
+
CASE(INTERNAL);
|
1438
|
+
CASE(IO);
|
1439
|
+
CASE(CANCELLED);
|
1440
|
+
CASE(TIMEOUT);
|
1441
|
+
CASE(UNAUTHENTICATED);
|
1442
|
+
CASE(UNAUTHORIZED);
|
596
1443
|
default:
|
597
1444
|
return "(invalid code)";
|
598
1445
|
}
|
599
1446
|
#undef CASE
|
600
|
-
#undef STRINGIFY_VALUE
|
601
|
-
#undef STRINGIFY
|
602
1447
|
}
|
603
1448
|
|
604
1449
|
AdbcStatusCode AdbcLoadDriver(const char *driver_name, const char *entrypoint, int version, void *raw_driver,
|
@@ -606,136 +1451,80 @@ AdbcStatusCode AdbcLoadDriver(const char *driver_name, const char *entrypoint, i
|
|
606
1451
|
AdbcDriverInitFunc init_func;
|
607
1452
|
std::string error_message;
|
608
1453
|
|
609
|
-
|
610
|
-
|
1454
|
+
switch (version) {
|
1455
|
+
case ADBC_VERSION_1_0_0:
|
1456
|
+
case ADBC_VERSION_1_1_0:
|
1457
|
+
break;
|
1458
|
+
default:
|
1459
|
+
SetError(error, "Only ADBC 1.0.0 and 1.1.0 are supported");
|
611
1460
|
return ADBC_STATUS_NOT_IMPLEMENTED;
|
612
1461
|
}
|
613
1462
|
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
// Default entrypoint (see adbc.h)
|
618
|
-
entrypoint = "AdbcDriverInit";
|
619
|
-
}
|
620
|
-
|
621
|
-
#if defined(_WIN32)
|
622
|
-
|
623
|
-
HMODULE handle = LoadLibraryExA(driver_name, NULL, 0);
|
624
|
-
if (!handle) {
|
625
|
-
error_message += driver_name;
|
626
|
-
error_message += ": LoadLibraryExA() failed: ";
|
627
|
-
GetWinError(&error_message);
|
628
|
-
|
629
|
-
std::string full_driver_name = driver_name;
|
630
|
-
full_driver_name += ".lib";
|
631
|
-
handle = LoadLibraryExA(full_driver_name.c_str(), NULL, 0);
|
632
|
-
if (!handle) {
|
633
|
-
error_message += '\n';
|
634
|
-
error_message += full_driver_name;
|
635
|
-
error_message += ": LoadLibraryExA() failed: ";
|
636
|
-
GetWinError(&error_message);
|
637
|
-
}
|
638
|
-
}
|
639
|
-
if (!handle) {
|
640
|
-
SetError(error, error_message);
|
641
|
-
return ADBC_STATUS_INTERNAL;
|
1463
|
+
if (!raw_driver) {
|
1464
|
+
SetError(error, "Must provide non-NULL raw_driver");
|
1465
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
642
1466
|
}
|
1467
|
+
auto *driver = reinterpret_cast<struct AdbcDriver *>(raw_driver);
|
643
1468
|
|
644
|
-
|
645
|
-
|
646
|
-
if (
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
GetWinError(&message);
|
651
|
-
if (!FreeLibrary(handle)) {
|
652
|
-
message += "\nFreeLibrary() failed: ";
|
653
|
-
GetWinError(&message);
|
654
|
-
}
|
655
|
-
SetError(error, message);
|
656
|
-
return ADBC_STATUS_INTERNAL;
|
1469
|
+
ManagedLibrary library;
|
1470
|
+
AdbcStatusCode status = library.Load(driver_name, error);
|
1471
|
+
if (status != ADBC_STATUS_OK) {
|
1472
|
+
// AdbcDatabaseInit tries to call this if set
|
1473
|
+
driver->release = nullptr;
|
1474
|
+
return status;
|
657
1475
|
}
|
658
1476
|
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
#endif // defined(__APPLE__)
|
668
|
-
|
669
|
-
void *handle = dlopen(driver_name, RTLD_NOW | RTLD_LOCAL);
|
670
|
-
if (!handle) {
|
671
|
-
error_message = "dlopen() failed: ";
|
672
|
-
error_message += dlerror();
|
673
|
-
|
674
|
-
// If applicable, append the shared library prefix/extension and
|
675
|
-
// try again (this way you don't have to hardcode driver names by
|
676
|
-
// platform in the application)
|
677
|
-
const std::string driver_str = driver_name;
|
678
|
-
|
679
|
-
std::string full_driver_name;
|
680
|
-
if (driver_str.size() < kPlatformLibraryPrefix.size() ||
|
681
|
-
driver_str.compare(0, kPlatformLibraryPrefix.size(), kPlatformLibraryPrefix) != 0) {
|
682
|
-
full_driver_name += kPlatformLibraryPrefix;
|
683
|
-
}
|
684
|
-
full_driver_name += driver_name;
|
685
|
-
if (driver_str.size() < kPlatformLibrarySuffix.size() ||
|
686
|
-
driver_str.compare(full_driver_name.size() - kPlatformLibrarySuffix.size(), kPlatformLibrarySuffix.size(),
|
687
|
-
kPlatformLibrarySuffix) != 0) {
|
688
|
-
full_driver_name += kPlatformLibrarySuffix;
|
689
|
-
}
|
690
|
-
handle = dlopen(full_driver_name.c_str(), RTLD_NOW | RTLD_LOCAL);
|
691
|
-
if (!handle) {
|
692
|
-
error_message += "\ndlopen() failed: ";
|
693
|
-
error_message += dlerror();
|
1477
|
+
void *load_handle = nullptr;
|
1478
|
+
if (entrypoint) {
|
1479
|
+
status = library.Lookup(entrypoint, &load_handle, error);
|
1480
|
+
} else {
|
1481
|
+
auto name = AdbcDriverManagerDefaultEntrypoint(driver_name);
|
1482
|
+
status = library.Lookup(name.c_str(), &load_handle, error);
|
1483
|
+
if (status != ADBC_STATUS_OK) {
|
1484
|
+
status = library.Lookup(kDefaultEntrypoint, &load_handle, error);
|
694
1485
|
}
|
695
1486
|
}
|
696
|
-
if (!handle) {
|
697
|
-
SetError(error, error_message);
|
698
|
-
// AdbcDatabaseInit tries to call this if set
|
699
|
-
driver->release = nullptr;
|
700
|
-
return ADBC_STATUS_INTERNAL;
|
701
|
-
}
|
702
1487
|
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
message += entrypoint;
|
707
|
-
message += ") failed: ";
|
708
|
-
message += dlerror();
|
709
|
-
SetError(error, message);
|
710
|
-
return ADBC_STATUS_INTERNAL;
|
1488
|
+
if (status != ADBC_STATUS_OK) {
|
1489
|
+
library.Release();
|
1490
|
+
return status;
|
711
1491
|
}
|
712
1492
|
init_func = reinterpret_cast<AdbcDriverInitFunc>(load_handle);
|
713
1493
|
|
714
|
-
|
715
|
-
|
716
|
-
AdbcStatusCode status = AdbcLoadDriverFromInitFunc(init_func, version, driver, error);
|
1494
|
+
status = AdbcLoadDriverFromInitFunc(init_func, version, driver, error);
|
717
1495
|
if (status == ADBC_STATUS_OK) {
|
718
1496
|
ManagerDriverState *state = new ManagerDriverState;
|
719
1497
|
state->driver_release = driver->release;
|
720
|
-
|
721
|
-
state->handle = handle;
|
722
|
-
#endif // defined(_WIN32)
|
1498
|
+
state->handle = std::move(library);
|
723
1499
|
driver->release = &ReleaseDriver;
|
724
1500
|
driver->private_manager = state;
|
725
1501
|
} else {
|
726
|
-
|
727
|
-
if (!FreeLibrary(handle)) {
|
728
|
-
std::string message = "FreeLibrary() failed: ";
|
729
|
-
GetWinError(&message);
|
730
|
-
SetError(error, message);
|
731
|
-
}
|
732
|
-
#endif // defined(_WIN32)
|
1502
|
+
library.Release();
|
733
1503
|
}
|
734
1504
|
return status;
|
735
1505
|
}
|
736
1506
|
|
737
1507
|
AdbcStatusCode AdbcLoadDriverFromInitFunc(AdbcDriverInitFunc init_func, int version, void *raw_driver,
|
738
1508
|
struct AdbcError *error) {
|
1509
|
+
constexpr std::array<int, 2> kSupportedVersions = {
|
1510
|
+
ADBC_VERSION_1_1_0,
|
1511
|
+
ADBC_VERSION_1_0_0,
|
1512
|
+
};
|
1513
|
+
|
1514
|
+
if (!raw_driver) {
|
1515
|
+
SetError(error, "Must provide non-NULL raw_driver");
|
1516
|
+
return ADBC_STATUS_INVALID_ARGUMENT;
|
1517
|
+
}
|
1518
|
+
|
1519
|
+
switch (version) {
|
1520
|
+
case ADBC_VERSION_1_0_0:
|
1521
|
+
case ADBC_VERSION_1_1_0:
|
1522
|
+
break;
|
1523
|
+
default:
|
1524
|
+
SetError(error, "Only ADBC 1.0.0 and 1.1.0 are supported");
|
1525
|
+
return ADBC_STATUS_NOT_IMPLEMENTED;
|
1526
|
+
}
|
1527
|
+
|
739
1528
|
#define FILL_DEFAULT(DRIVER, STUB) \
|
740
1529
|
if (!DRIVER->STUB) { \
|
741
1530
|
DRIVER->STUB = &STUB; \
|
@@ -746,12 +1535,22 @@ AdbcStatusCode AdbcLoadDriverFromInitFunc(AdbcDriverInitFunc init_func, int vers
|
|
746
1535
|
return ADBC_STATUS_INTERNAL; \
|
747
1536
|
}
|
748
1537
|
|
749
|
-
|
1538
|
+
// Starting from the passed version, try each (older) version in
|
1539
|
+
// succession with the underlying driver until we find one that's
|
1540
|
+
// accepted.
|
1541
|
+
AdbcStatusCode result = ADBC_STATUS_NOT_IMPLEMENTED;
|
1542
|
+
for (const int try_version : kSupportedVersions) {
|
1543
|
+
if (try_version > version)
|
1544
|
+
continue;
|
1545
|
+
result = init_func(try_version, raw_driver, error);
|
1546
|
+
if (result != ADBC_STATUS_NOT_IMPLEMENTED)
|
1547
|
+
break;
|
1548
|
+
}
|
750
1549
|
if (result != ADBC_STATUS_OK) {
|
751
1550
|
return result;
|
752
1551
|
}
|
753
1552
|
|
754
|
-
if (version
|
1553
|
+
if (version >= ADBC_VERSION_1_0_0) {
|
755
1554
|
auto *driver = reinterpret_cast<struct AdbcDriver *>(raw_driver);
|
756
1555
|
CHECK_REQUIRED(driver, DatabaseNew);
|
757
1556
|
CHECK_REQUIRED(driver, DatabaseInit);
|
@@ -781,10 +1580,44 @@ AdbcStatusCode AdbcLoadDriverFromInitFunc(AdbcDriverInitFunc init_func, int vers
|
|
781
1580
|
FILL_DEFAULT(driver, StatementSetSqlQuery);
|
782
1581
|
FILL_DEFAULT(driver, StatementSetSubstraitPlan);
|
783
1582
|
}
|
1583
|
+
if (version >= ADBC_VERSION_1_1_0) {
|
1584
|
+
auto *driver = reinterpret_cast<struct AdbcDriver *>(raw_driver);
|
1585
|
+
FILL_DEFAULT(driver, ErrorGetDetailCount);
|
1586
|
+
FILL_DEFAULT(driver, ErrorGetDetail);
|
1587
|
+
FILL_DEFAULT(driver, ErrorFromArrayStream);
|
1588
|
+
|
1589
|
+
FILL_DEFAULT(driver, DatabaseGetOption);
|
1590
|
+
FILL_DEFAULT(driver, DatabaseGetOptionBytes);
|
1591
|
+
FILL_DEFAULT(driver, DatabaseGetOptionDouble);
|
1592
|
+
FILL_DEFAULT(driver, DatabaseGetOptionInt);
|
1593
|
+
FILL_DEFAULT(driver, DatabaseSetOptionBytes);
|
1594
|
+
FILL_DEFAULT(driver, DatabaseSetOptionDouble);
|
1595
|
+
FILL_DEFAULT(driver, DatabaseSetOptionInt);
|
1596
|
+
|
1597
|
+
FILL_DEFAULT(driver, ConnectionCancel);
|
1598
|
+
FILL_DEFAULT(driver, ConnectionGetOption);
|
1599
|
+
FILL_DEFAULT(driver, ConnectionGetOptionBytes);
|
1600
|
+
FILL_DEFAULT(driver, ConnectionGetOptionDouble);
|
1601
|
+
FILL_DEFAULT(driver, ConnectionGetOptionInt);
|
1602
|
+
FILL_DEFAULT(driver, ConnectionGetStatistics);
|
1603
|
+
FILL_DEFAULT(driver, ConnectionGetStatisticNames);
|
1604
|
+
FILL_DEFAULT(driver, ConnectionSetOptionBytes);
|
1605
|
+
FILL_DEFAULT(driver, ConnectionSetOptionDouble);
|
1606
|
+
FILL_DEFAULT(driver, ConnectionSetOptionInt);
|
1607
|
+
|
1608
|
+
FILL_DEFAULT(driver, StatementCancel);
|
1609
|
+
FILL_DEFAULT(driver, StatementExecuteSchema);
|
1610
|
+
FILL_DEFAULT(driver, StatementGetOption);
|
1611
|
+
FILL_DEFAULT(driver, StatementGetOptionBytes);
|
1612
|
+
FILL_DEFAULT(driver, StatementGetOptionDouble);
|
1613
|
+
FILL_DEFAULT(driver, StatementGetOptionInt);
|
1614
|
+
FILL_DEFAULT(driver, StatementSetOptionBytes);
|
1615
|
+
FILL_DEFAULT(driver, StatementSetOptionDouble);
|
1616
|
+
FILL_DEFAULT(driver, StatementSetOptionInt);
|
1617
|
+
}
|
784
1618
|
|
785
1619
|
return ADBC_STATUS_OK;
|
786
1620
|
|
787
1621
|
#undef FILL_DEFAULT
|
788
1622
|
#undef CHECK_REQUIRED
|
789
1623
|
}
|
790
|
-
} // namespace duckdb_adbc
|