duckdb 0.9.3-dev0.0 → 0.9.3-dev12.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.
Files changed (1214) hide show
  1. package/LICENSE +1 -1
  2. package/binding.gyp +32 -7
  3. package/package.json +1 -1
  4. package/src/connection.cpp +6 -6
  5. package/src/database.cpp +11 -10
  6. package/src/duckdb/extension/icu/icu-datefunc.cpp +22 -10
  7. package/src/duckdb/extension/icu/icu-datepart.cpp +42 -22
  8. package/src/duckdb/extension/icu/icu-datetrunc.cpp +40 -7
  9. package/src/duckdb/extension/icu/icu-strptime.cpp +14 -8
  10. package/src/duckdb/extension/icu/icu-table-range.cpp +1 -1
  11. package/src/duckdb/extension/icu/icu-timezone.cpp +43 -16
  12. package/src/duckdb/extension/icu/icu_extension.cpp +1 -1
  13. package/src/duckdb/extension/icu/include/icu-datefunc.hpp +3 -0
  14. package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  15. package/src/duckdb/extension/json/buffered_json_reader.cpp +78 -62
  16. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +11 -7
  17. package/src/duckdb/extension/json/include/json_common.hpp +0 -14
  18. package/src/duckdb/extension/json/include/json_deserializer.hpp +1 -0
  19. package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
  20. package/src/duckdb/extension/json/include/json_scan.hpp +19 -5
  21. package/src/duckdb/extension/json/include/json_serializer.hpp +2 -1
  22. package/src/duckdb/extension/json/include/json_structure.hpp +12 -10
  23. package/src/duckdb/extension/json/json_common.cpp +1 -0
  24. package/src/duckdb/extension/json/json_deserializer.cpp +13 -0
  25. package/src/duckdb/extension/json/json_extension.cpp +3 -3
  26. package/src/duckdb/extension/json/json_functions/copy_json.cpp +8 -4
  27. package/src/duckdb/extension/json/json_functions/json_array_length.cpp +1 -1
  28. package/src/duckdb/extension/json/json_functions/json_contains.cpp +3 -3
  29. package/src/duckdb/extension/json/json_functions/json_create.cpp +53 -8
  30. package/src/duckdb/extension/json/json_functions/json_extract.cpp +10 -6
  31. package/src/duckdb/extension/json/json_functions/json_keys.cpp +1 -1
  32. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +2 -3
  33. package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +210 -0
  34. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +22 -19
  35. package/src/duckdb/extension/json/json_functions/json_structure.cpp +71 -43
  36. package/src/duckdb/extension/json/json_functions/json_transform.cpp +105 -8
  37. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  38. package/src/duckdb/extension/json/json_functions/json_valid.cpp +1 -1
  39. package/src/duckdb/extension/json/json_functions/read_json.cpp +43 -18
  40. package/src/duckdb/extension/json/json_functions/read_json_objects.cpp +1 -1
  41. package/src/duckdb/extension/json/json_functions.cpp +9 -5
  42. package/src/duckdb/extension/json/json_scan.cpp +147 -125
  43. package/src/duckdb/extension/json/json_serializer.cpp +9 -0
  44. package/src/duckdb/extension/json/serialize_json.cpp +6 -0
  45. package/src/duckdb/extension/parquet/column_reader.cpp +53 -18
  46. package/src/duckdb/extension/parquet/column_writer.cpp +29 -6
  47. package/src/duckdb/extension/parquet/include/column_reader.hpp +0 -1
  48. package/src/duckdb/extension/parquet/include/decode_utils.hpp +2 -2
  49. package/src/duckdb/extension/parquet/include/parquet_crypto.hpp +87 -0
  50. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -3
  51. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +16 -3
  52. package/src/duckdb/extension/parquet/include/parquet_metadata.hpp +10 -0
  53. package/src/duckdb/extension/parquet/include/parquet_reader.hpp +34 -6
  54. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +3 -2
  55. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -0
  56. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +21 -1
  57. package/src/duckdb/extension/parquet/parquet_crypto.cpp +370 -0
  58. package/src/duckdb/extension/parquet/parquet_extension.cpp +254 -24
  59. package/src/duckdb/extension/parquet/parquet_metadata.cpp +204 -16
  60. package/src/duckdb/extension/parquet/parquet_reader.cpp +108 -34
  61. package/src/duckdb/extension/parquet/parquet_statistics.cpp +75 -30
  62. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +15 -8
  63. package/src/duckdb/extension/parquet/parquet_writer.cpp +62 -10
  64. package/src/duckdb/extension/parquet/serialize_parquet.cpp +60 -0
  65. package/src/duckdb/src/catalog/catalog.cpp +23 -25
  66. package/src/duckdb/src/catalog/catalog_entry/column_dependency_manager.cpp +1 -0
  67. package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_dependent_entry.cpp +31 -0
  68. package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_entry.cpp +44 -0
  69. package/src/duckdb/src/catalog/catalog_entry/dependency/dependency_subject_entry.cpp +31 -0
  70. package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +35 -10
  71. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +22 -6
  72. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +110 -33
  73. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +33 -17
  74. package/src/duckdb/src/catalog/catalog_entry/macro_catalog_entry.cpp +16 -0
  75. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +7 -6
  76. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +88 -14
  77. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -15
  78. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +20 -20
  79. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +4 -0
  80. package/src/duckdb/src/catalog/catalog_entry.cpp +29 -0
  81. package/src/duckdb/src/catalog/catalog_set.cpp +358 -343
  82. package/src/duckdb/src/catalog/catalog_transaction.cpp +4 -0
  83. package/src/duckdb/src/catalog/default/default_functions.cpp +13 -4
  84. package/src/duckdb/src/catalog/default/default_schemas.cpp +5 -1
  85. package/src/duckdb/src/catalog/default/default_views.cpp +6 -2
  86. package/src/duckdb/src/catalog/dependency_catalog_set.cpp +51 -0
  87. package/src/duckdb/src/catalog/dependency_manager.cpp +510 -114
  88. package/src/duckdb/src/catalog/duck_catalog.cpp +4 -4
  89. package/src/duckdb/src/common/adbc/adbc.cpp +73 -53
  90. package/src/duckdb/src/common/adbc/driver_manager.cpp +1101 -268
  91. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +20 -9
  92. package/src/duckdb/src/common/bind_helpers.cpp +1 -0
  93. package/src/duckdb/src/common/box_renderer.cpp +52 -1
  94. package/src/duckdb/src/common/compressed_file_system.cpp +1 -0
  95. package/src/duckdb/src/common/constants.cpp +0 -1
  96. package/src/duckdb/src/common/enum_util.cpp +522 -107
  97. package/src/duckdb/src/common/enums/catalog_type.cpp +64 -1
  98. package/src/duckdb/src/common/enums/compression_type.cpp +14 -0
  99. package/src/duckdb/src/common/enums/date_part_specifier.cpp +1 -0
  100. package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
  101. package/src/duckdb/src/common/enums/file_compression_type.cpp +1 -0
  102. package/src/duckdb/src/common/enums/join_type.cpp +33 -0
  103. package/src/duckdb/src/common/enums/logical_operator_type.cpp +5 -3
  104. package/src/duckdb/src/common/enums/optimizer_type.cpp +9 -1
  105. package/src/duckdb/src/common/enums/physical_operator_type.cpp +8 -4
  106. package/src/duckdb/src/common/enums/statement_type.cpp +2 -2
  107. package/src/duckdb/src/common/error_data.cpp +113 -0
  108. package/src/duckdb/src/common/exception/binder_exception.cpp +47 -0
  109. package/src/duckdb/src/common/exception/catalog_exception.cpp +55 -0
  110. package/src/duckdb/src/common/exception/parser_exception.cpp +19 -0
  111. package/src/duckdb/src/common/exception.cpp +110 -121
  112. package/src/duckdb/src/common/exception_format_value.cpp +9 -1
  113. package/src/duckdb/src/common/extra_type_info.cpp +48 -0
  114. package/src/duckdb/src/common/file_system.cpp +12 -7
  115. package/src/duckdb/src/common/gzip_file_system.cpp +18 -18
  116. package/src/duckdb/src/common/hive_partitioning.cpp +5 -1
  117. package/src/duckdb/src/common/http_state.cpp +20 -3
  118. package/src/duckdb/src/common/local_file_system.cpp +214 -15
  119. package/src/duckdb/src/common/multi_file_reader.cpp +20 -7
  120. package/src/duckdb/src/common/operator/cast_operators.cpp +397 -414
  121. package/src/duckdb/src/common/operator/convert_to_string.cpp +4 -0
  122. package/src/duckdb/src/common/operator/string_cast.cpp +5 -0
  123. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +61 -12
  124. package/src/duckdb/src/common/progress_bar/terminal_progress_bar_display.cpp +13 -4
  125. package/src/duckdb/src/common/radix_partitioning.cpp +1 -1
  126. package/src/duckdb/src/common/row_operations/row_aggregate.cpp +2 -1
  127. package/src/duckdb/src/common/row_operations/row_gather.cpp +7 -1
  128. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +78 -12
  129. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +222 -61
  130. package/src/duckdb/src/common/row_operations/row_matcher.cpp +6 -1
  131. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +51 -0
  132. package/src/duckdb/src/common/row_operations/row_scatter.cpp +8 -1
  133. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +6 -0
  134. package/src/duckdb/src/common/serializer/binary_serializer.cpp +5 -0
  135. package/src/duckdb/src/common/serializer/serializer.cpp +19 -0
  136. package/src/duckdb/src/common/sort/comparators.cpp +126 -0
  137. package/src/duckdb/src/common/sort/partition_state.cpp +17 -17
  138. package/src/duckdb/src/common/sort/radix_sort.cpp +2 -1
  139. package/src/duckdb/src/common/sort/sort_state.cpp +10 -5
  140. package/src/duckdb/src/common/sort/sorted_block.cpp +7 -6
  141. package/src/duckdb/src/common/string_util.cpp +302 -24
  142. package/src/duckdb/src/common/tree_renderer.cpp +8 -6
  143. package/src/duckdb/src/common/types/cast_helpers.cpp +6 -0
  144. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +1 -1
  145. package/src/duckdb/src/common/types/column/column_data_collection.cpp +58 -0
  146. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +8 -1
  147. package/src/duckdb/src/common/types/data_chunk.cpp +9 -0
  148. package/src/duckdb/src/common/types/date.cpp +2 -2
  149. package/src/duckdb/src/common/types/hash.cpp +9 -1
  150. package/src/duckdb/src/common/types/hugeint.cpp +229 -51
  151. package/src/duckdb/src/common/types/hyperloglog.cpp +10 -3
  152. package/src/duckdb/src/common/types/interval.cpp +67 -12
  153. package/src/duckdb/src/common/types/list_segment.cpp +98 -4
  154. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +11 -1
  155. package/src/duckdb/src/common/types/row/row_data_collection.cpp +1 -1
  156. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +2 -2
  157. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +3 -2
  158. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +63 -3
  159. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +331 -127
  160. package/src/duckdb/src/common/types/time.cpp +47 -75
  161. package/src/duckdb/src/common/types/timestamp.cpp +16 -3
  162. package/src/duckdb/src/common/types/uhugeint.cpp +746 -0
  163. package/src/duckdb/src/common/types/validity_mask.cpp +6 -2
  164. package/src/duckdb/src/common/types/value.cpp +183 -27
  165. package/src/duckdb/src/common/types/vector.cpp +331 -30
  166. package/src/duckdb/src/common/types/vector_buffer.cpp +29 -1
  167. package/src/duckdb/src/common/types/vector_cache.cpp +22 -1
  168. package/src/duckdb/src/common/types.cpp +606 -90
  169. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +21 -1
  170. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +5 -0
  171. package/src/duckdb/src/common/vector_operations/generators.cpp +2 -2
  172. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +131 -2
  173. package/src/duckdb/src/common/vector_operations/vector_copy.cpp +26 -4
  174. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +41 -0
  175. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +7 -0
  176. package/src/duckdb/src/common/virtual_file_system.cpp +0 -1
  177. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +2 -1
  178. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +144 -56
  179. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +2 -0
  180. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +27 -0
  181. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +4 -3
  182. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +25 -5
  183. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +100 -3
  184. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +2 -1
  185. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +9 -1
  186. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +83 -52
  187. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +485 -289
  188. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +3 -3
  189. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  190. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +34 -37
  191. package/src/duckdb/src/core_functions/function_list.cpp +30 -1
  192. package/src/duckdb/src/core_functions/lambda_functions.cpp +416 -0
  193. package/src/duckdb/src/core_functions/scalar/array/array_functions.cpp +294 -0
  194. package/src/duckdb/src/core_functions/scalar/array/array_value.cpp +87 -0
  195. package/src/duckdb/src/core_functions/scalar/blob/create_sort_key.cpp +686 -0
  196. package/src/duckdb/src/core_functions/scalar/blob/encode.cpp +1 -0
  197. package/src/duckdb/src/core_functions/scalar/date/current.cpp +3 -3
  198. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +295 -20
  199. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +1 -0
  200. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +8 -7
  201. package/src/duckdb/src/core_functions/scalar/date/to_interval.cpp +84 -23
  202. package/src/duckdb/src/core_functions/scalar/generic/error.cpp +4 -4
  203. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +7 -8
  204. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  205. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +17 -6
  206. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +8 -0
  207. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +28 -14
  208. package/src/duckdb/src/core_functions/scalar/list/list_filter.cpp +49 -0
  209. package/src/duckdb/src/core_functions/scalar/list/list_reduce.cpp +230 -0
  210. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +85 -16
  211. package/src/duckdb/src/core_functions/scalar/list/list_transform.cpp +41 -0
  212. package/src/duckdb/src/core_functions/scalar/list/list_value.cpp +21 -2
  213. package/src/duckdb/src/core_functions/scalar/map/map.cpp +6 -5
  214. package/src/duckdb/src/core_functions/scalar/map/map_entries.cpp +2 -2
  215. package/src/duckdb/src/core_functions/scalar/map/map_from_entries.cpp +1 -2
  216. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +24 -4
  217. package/src/duckdb/src/core_functions/scalar/operators/bitwise.cpp +6 -0
  218. package/src/duckdb/src/core_functions/scalar/random/random.cpp +2 -2
  219. package/src/duckdb/src/core_functions/scalar/random/setseed.cpp +2 -2
  220. package/src/duckdb/src/core_functions/scalar/secret/which_secret.cpp +28 -0
  221. package/src/duckdb/src/core_functions/scalar/string/bar.cpp +9 -4
  222. package/src/duckdb/src/core_functions/scalar/string/format_bytes.cpp +7 -2
  223. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +63 -4
  224. package/src/duckdb/src/core_functions/scalar/string/pad.cpp +2 -2
  225. package/src/duckdb/src/core_functions/scalar/string/parse_path.cpp +348 -0
  226. package/src/duckdb/src/core_functions/scalar/string/regexp_escape.cpp +22 -0
  227. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +6 -5
  228. package/src/duckdb/src/core_functions/scalar/struct/struct_insert.cpp +3 -3
  229. package/src/duckdb/src/core_functions/scalar/struct/struct_pack.cpp +1 -1
  230. package/src/duckdb/src/execution/aggregate_hashtable.cpp +9 -2
  231. package/src/duckdb/src/execution/column_binding_resolver.cpp +44 -10
  232. package/src/duckdb/src/execution/expression_executor/execute_between.cpp +4 -0
  233. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +4 -0
  234. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +4 -0
  235. package/src/duckdb/src/execution/expression_executor.cpp +2 -1
  236. package/src/duckdb/src/execution/index/art/art.cpp +202 -53
  237. package/src/duckdb/src/execution/index/art/art_key.cpp +20 -27
  238. package/src/duckdb/src/execution/index/fixed_size_allocator.cpp +52 -17
  239. package/src/duckdb/src/execution/index/fixed_size_buffer.cpp +14 -8
  240. package/src/duckdb/src/execution/index/index_type_set.cpp +32 -0
  241. package/src/duckdb/src/execution/index/unknown_index.cpp +65 -0
  242. package/src/duckdb/src/execution/join_hashtable.cpp +151 -174
  243. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -0
  244. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +4 -0
  245. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +2 -1
  246. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +82 -36
  247. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +58 -32
  248. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +35 -19
  249. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +90 -0
  250. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +124 -0
  251. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +97 -0
  252. package/src/duckdb/src/execution/operator/csv_scanner/scanner/base_scanner.cpp +71 -0
  253. package/src/duckdb/src/execution/operator/csv_scanner/scanner/column_count_scanner.cpp +98 -0
  254. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +105 -0
  255. package/src/duckdb/src/execution/operator/csv_scanner/scanner/skip_scanner.cpp +63 -0
  256. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +1091 -0
  257. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +124 -26
  258. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +117 -129
  259. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/header_detection.cpp +46 -22
  260. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +83 -199
  261. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_refinement.cpp +21 -122
  262. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_replacement.cpp +18 -17
  263. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine.cpp +22 -0
  264. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +201 -0
  265. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +221 -0
  266. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +204 -0
  267. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +186 -0
  268. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +532 -0
  269. package/src/duckdb/src/execution/operator/helper/physical_buffered_collector.cpp +85 -0
  270. package/src/duckdb/src/execution/operator/helper/physical_create_secret.cpp +21 -0
  271. package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +1 -1
  272. package/src/duckdb/src/execution/operator/helper/physical_pragma.cpp +2 -2
  273. package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +34 -9
  274. package/src/duckdb/src/execution/operator/helper/physical_result_collector.cpp +10 -0
  275. package/src/duckdb/src/execution/operator/helper/physical_transaction.cpp +1 -0
  276. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +25 -10
  277. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +7 -8
  278. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +1 -1
  279. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +5 -2
  280. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  281. package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +5 -127
  282. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +221 -61
  283. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +18 -21
  284. package/src/duckdb/src/execution/operator/join/physical_join.cpp +10 -5
  285. package/src/duckdb/src/execution/operator/join/physical_left_delim_join.cpp +137 -0
  286. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +11 -4
  287. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +2 -2
  288. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +19 -4
  289. package/src/duckdb/src/execution/operator/join/physical_right_delim_join.cpp +121 -0
  290. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +3 -2
  291. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +59 -0
  292. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +132 -92
  293. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +54 -54
  294. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  295. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +4 -0
  296. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +21 -3
  297. package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -0
  298. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +61 -43
  299. package/src/duckdb/src/execution/operator/schema/physical_create_art_index.cpp +15 -13
  300. package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -0
  301. package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +10 -0
  302. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +44 -90
  303. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +3 -0
  304. package/src/duckdb/src/execution/operator/set/physical_union.cpp +8 -4
  305. package/src/duckdb/src/execution/physical_operator.cpp +3 -1
  306. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +30 -143
  307. package/src/duckdb/src/execution/physical_plan/plan_copy_database.cpp +12 -0
  308. package/src/duckdb/src/execution/physical_plan/plan_copy_to_file.cpp +11 -4
  309. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +8 -8
  310. package/src/duckdb/src/execution/physical_plan/plan_create_secret.cpp +11 -0
  311. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +9 -8
  312. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +5 -3
  313. package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +15 -6
  314. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +1 -0
  315. package/src/duckdb/src/execution/physical_plan/plan_pragma.cpp +1 -1
  316. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +3 -1
  317. package/src/duckdb/src/execution/physical_plan/plan_set_operation.cpp +90 -12
  318. package/src/duckdb/src/execution/physical_plan/plan_window.cpp +67 -22
  319. package/src/duckdb/src/execution/physical_plan_generator.cpp +6 -3
  320. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +163 -32
  321. package/src/duckdb/src/execution/reservoir_sample.cpp +112 -32
  322. package/src/duckdb/src/execution/window_executor.cpp +291 -26
  323. package/src/duckdb/src/execution/window_segment_tree.cpp +958 -114
  324. package/src/duckdb/src/function/aggregate/distributive/count.cpp +18 -16
  325. package/src/duckdb/src/function/aggregate/distributive/first.cpp +11 -4
  326. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +303 -131
  327. package/src/duckdb/src/function/cast/array_casts.cpp +226 -0
  328. package/src/duckdb/src/function/cast/bit_cast.cpp +2 -0
  329. package/src/duckdb/src/function/cast/cast_function_set.cpp +13 -2
  330. package/src/duckdb/src/function/cast/decimal_cast.cpp +2 -0
  331. package/src/duckdb/src/function/cast/default_casts.cpp +4 -1
  332. package/src/duckdb/src/function/cast/list_casts.cpp +151 -6
  333. package/src/duckdb/src/function/cast/numeric_casts.cpp +4 -0
  334. package/src/duckdb/src/function/cast/string_cast.cpp +95 -5
  335. package/src/duckdb/src/function/cast/struct_cast.cpp +53 -19
  336. package/src/duckdb/src/function/cast/time_casts.cpp +23 -1
  337. package/src/duckdb/src/function/cast/union/from_struct.cpp +1 -0
  338. package/src/duckdb/src/function/cast/union_casts.cpp +4 -3
  339. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +8 -4
  340. package/src/duckdb/src/function/cast_rules.cpp +197 -31
  341. package/src/duckdb/src/function/compression_config.cpp +4 -0
  342. package/src/duckdb/src/function/function.cpp +15 -9
  343. package/src/duckdb/src/function/function_binder.cpp +80 -29
  344. package/src/duckdb/src/function/function_set.cpp +6 -6
  345. package/src/duckdb/src/function/pragma/pragma_functions.cpp +10 -8
  346. package/src/duckdb/src/function/pragma/pragma_queries.cpp +34 -38
  347. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +12 -0
  348. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +10 -1
  349. package/src/duckdb/src/function/scalar/list/list_concat.cpp +11 -1
  350. package/src/duckdb/src/function/scalar/list/list_extract.cpp +14 -3
  351. package/src/duckdb/src/function/scalar/list/list_resize.cpp +4 -0
  352. package/src/duckdb/src/function/scalar/list/list_select.cpp +176 -0
  353. package/src/duckdb/src/function/scalar/list/list_zip.cpp +165 -0
  354. package/src/duckdb/src/function/scalar/nested_functions.cpp +33 -0
  355. package/src/duckdb/src/function/scalar/operators/add.cpp +53 -6
  356. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +48 -14
  357. package/src/duckdb/src/function/scalar/operators/multiply.cpp +9 -1
  358. package/src/duckdb/src/function/scalar/operators/subtract.cpp +19 -4
  359. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +28 -55
  360. package/src/duckdb/src/function/scalar/strftime_format.cpp +242 -19
  361. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -2
  362. package/src/duckdb/src/function/scalar/string/concat.cpp +16 -6
  363. package/src/duckdb/src/function/scalar/string/length.cpp +124 -24
  364. package/src/duckdb/src/function/scalar/string/regexp.cpp +27 -27
  365. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +64 -15
  366. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +4 -3
  367. package/src/duckdb/src/function/scalar_function.cpp +8 -7
  368. package/src/duckdb/src/function/table/arrow/arrow_duck_schema.cpp +12 -0
  369. package/src/duckdb/src/function/table/arrow.cpp +20 -27
  370. package/src/duckdb/src/function/table/arrow_conversion.cpp +433 -150
  371. package/src/duckdb/src/function/table/copy_csv.cpp +62 -62
  372. package/src/duckdb/src/function/table/range.cpp +6 -3
  373. package/src/duckdb/src/function/table/read_csv.cpp +107 -759
  374. package/src/duckdb/src/function/table/read_file.cpp +242 -0
  375. package/src/duckdb/src/function/table/sniff_csv.cpp +275 -0
  376. package/src/duckdb/src/function/table/system/duckdb_columns.cpp +15 -3
  377. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +5 -0
  378. package/src/duckdb/src/function/table/system/duckdb_dependencies.cpp +9 -13
  379. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +67 -14
  380. package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +12 -15
  381. package/src/duckdb/src/function/table/system/duckdb_memory.cpp +63 -0
  382. package/src/duckdb/src/function/table/system/duckdb_optimizers.cpp +57 -0
  383. package/src/duckdb/src/function/table/system/duckdb_schemas.cpp +5 -0
  384. package/src/duckdb/src/function/table/system/duckdb_secrets.cpp +128 -0
  385. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +12 -6
  386. package/src/duckdb/src/function/table/system/duckdb_settings.cpp +0 -1
  387. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +5 -0
  388. package/src/duckdb/src/function/table/system/duckdb_types.cpp +6 -0
  389. package/src/duckdb/src/function/table/system/duckdb_views.cpp +5 -0
  390. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +166 -64
  391. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -1
  392. package/src/duckdb/src/function/table/system_functions.cpp +3 -2
  393. package/src/duckdb/src/function/table/table_scan.cpp +50 -110
  394. package/src/duckdb/src/function/table/version/pragma_version.cpp +4 -44
  395. package/src/duckdb/src/function/table_function.cpp +2 -2
  396. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +4 -3
  397. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_dependent_entry.hpp +27 -0
  398. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_entry.hpp +66 -0
  399. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/dependency/dependency_subject_entry.hpp +27 -0
  400. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +25 -5
  401. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +3 -1
  402. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -1
  403. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +19 -5
  404. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/list.hpp +1 -0
  405. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +2 -0
  406. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +1 -1
  407. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +26 -11
  408. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +1 -0
  409. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +2 -0
  410. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +1 -0
  411. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +2 -0
  412. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +15 -0
  413. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +41 -49
  414. package/src/duckdb/src/include/duckdb/catalog/catalog_transaction.hpp +1 -0
  415. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +3 -1
  416. package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +120 -8
  417. package/src/duckdb/src/include/duckdb/catalog/dependency_catalog_set.hpp +32 -0
  418. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +2 -0
  419. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +92 -12
  420. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +1 -1
  421. package/src/duckdb/src/include/duckdb/common/adbc/adbc-init.hpp +4 -2
  422. package/src/duckdb/src/include/duckdb/common/adbc/adbc.h +1153 -12
  423. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +6 -6
  424. package/src/duckdb/src/include/duckdb/common/adbc/driver_manager.h +0 -2
  425. package/src/duckdb/src/include/duckdb/common/adbc/options.h +64 -0
  426. package/src/duckdb/src/include/duckdb/common/adbc/single_batch_array_stream.hpp +8 -0
  427. package/src/duckdb/src/include/duckdb/common/arrow/arrow.hpp +25 -6
  428. package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +3 -3
  429. package/src/duckdb/src/include/duckdb/common/arrow/result_arrow_wrapper.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +30 -0
  431. package/src/duckdb/src/include/duckdb/common/bitpacking.hpp +6 -6
  432. package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +10 -0
  433. package/src/duckdb/src/include/duckdb/common/constants.hpp +1 -0
  434. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +75 -19
  435. package/src/duckdb/src/include/duckdb/common/enums/catalog_type.hpp +11 -1
  436. package/src/duckdb/src/include/duckdb/common/enums/compression_type.hpp +3 -0
  437. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -0
  438. package/src/duckdb/src/include/duckdb/common/enums/index_constraint_type.hpp +35 -0
  439. package/src/duckdb/src/include/duckdb/common/enums/join_type.hpp +16 -3
  440. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +6 -5
  441. package/src/duckdb/src/include/duckdb/common/enums/memory_tag.hpp +32 -0
  442. package/src/duckdb/src/include/duckdb/common/enums/on_create_conflict.hpp +26 -0
  443. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  444. package/src/duckdb/src/include/duckdb/common/enums/pending_execution_result.hpp +7 -1
  445. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +9 -3
  446. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +6 -5
  447. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +3 -2
  448. package/src/duckdb/src/include/duckdb/common/enums/wal_type.hpp +1 -0
  449. package/src/duckdb/src/include/duckdb/common/error_data.hpp +72 -0
  450. package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +47 -0
  451. package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +39 -0
  452. package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +27 -0
  453. package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +62 -0
  454. package/src/duckdb/src/include/duckdb/common/exception/list.hpp +6 -0
  455. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +29 -0
  456. package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +25 -0
  457. package/src/duckdb/src/include/duckdb/common/exception.hpp +52 -166
  458. package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +7 -4
  459. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +53 -1
  460. package/src/duckdb/src/include/duckdb/common/helper.hpp +13 -3
  461. package/src/duckdb/src/include/duckdb/common/http_state.hpp +18 -4
  462. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +5 -1
  463. package/src/duckdb/src/include/duckdb/common/limits.hpp +19 -1
  464. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +1 -0
  465. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +7 -2
  466. package/src/duckdb/src/include/duckdb/common/numeric_utils.hpp +16 -3
  467. package/src/duckdb/src/include/duckdb/common/operator/add.hpp +13 -2
  468. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +114 -5
  469. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +0 -4
  470. package/src/duckdb/src/include/duckdb/common/operator/convert_to_string.hpp +2 -0
  471. package/src/duckdb/src/include/duckdb/common/operator/decimal_cast_operators.hpp +29 -0
  472. package/src/duckdb/src/include/duckdb/common/operator/double_cast_operator.hpp +52 -0
  473. package/src/duckdb/src/include/duckdb/common/operator/integer_cast_operator.hpp +459 -0
  474. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  475. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +136 -0
  476. package/src/duckdb/src/include/duckdb/common/operator/string_cast.hpp +2 -0
  477. package/src/duckdb/src/include/duckdb/common/operator/subtract.hpp +7 -1
  478. package/src/duckdb/src/include/duckdb/common/optional_idx.hpp +7 -5
  479. package/src/duckdb/src/include/duckdb/common/platform.h +53 -0
  480. package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
  481. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +22 -6
  482. package/src/duckdb/src/include/duckdb/common/radix.hpp +6 -0
  483. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +20 -6
  484. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -0
  485. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +1 -0
  486. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +43 -4
  487. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +1 -0
  488. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +15 -0
  489. package/src/duckdb/src/include/duckdb/common/sort/comparators.hpp +2 -0
  490. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +12 -2
  491. package/src/duckdb/src/include/duckdb/common/sort/sort.hpp +81 -0
  492. package/src/duckdb/src/include/duckdb/common/sort/sorted_block.hpp +0 -78
  493. package/src/duckdb/src/include/duckdb/common/string_util.hpp +23 -1
  494. package/src/duckdb/src/include/duckdb/common/type_util.hpp +5 -1
  495. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +26 -3
  496. package/src/duckdb/src/include/duckdb/common/types/conflict_manager.hpp +8 -0
  497. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +3 -0
  498. package/src/duckdb/src/include/duckdb/common/types/date.hpp +3 -0
  499. package/src/duckdb/src/include/duckdb/common/types/datetime.hpp +5 -3
  500. package/src/duckdb/src/include/duckdb/common/types/hash.hpp +2 -0
  501. package/src/duckdb/src/include/duckdb/common/types/hugeint.hpp +81 -15
  502. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +57 -29
  503. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +1 -1
  504. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +4 -2
  505. package/src/duckdb/src/include/duckdb/common/types/row/row_data_collection.hpp +2 -2
  506. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +26 -22
  507. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +7 -0
  508. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +7 -5
  509. package/src/duckdb/src/include/duckdb/common/types/time.hpp +6 -2
  510. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +2 -0
  511. package/src/duckdb/src/include/duckdb/common/types/uhugeint.hpp +216 -0
  512. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +18 -10
  513. package/src/duckdb/src/include/duckdb/common/types/value.hpp +31 -0
  514. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +18 -2
  515. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +22 -1
  516. package/src/duckdb/src/include/duckdb/common/types.hpp +151 -49
  517. package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +81 -0
  518. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +70 -6
  519. package/src/duckdb/src/include/duckdb/common/vector_size.hpp +6 -6
  520. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +29 -2
  521. package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +131 -0
  522. package/src/duckdb/src/include/duckdb/core_functions/scalar/array_functions.hpp +69 -0
  523. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +9 -0
  524. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +40 -4
  525. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +42 -0
  526. package/src/duckdb/src/include/duckdb/core_functions/scalar/secret_functions.hpp +27 -0
  527. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +56 -2
  528. package/src/duckdb/src/include/duckdb/core_functions/to_interval.hpp +29 -0
  529. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +2 -2
  530. package/src/duckdb/src/include/duckdb/execution/executor.hpp +11 -13
  531. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +34 -19
  532. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_allocator.hpp +18 -14
  533. package/src/duckdb/src/include/duckdb/execution/index/fixed_size_buffer.hpp +2 -1
  534. package/src/duckdb/src/include/duckdb/execution/index/index_type.hpp +57 -0
  535. package/src/duckdb/src/include/duckdb/execution/index/index_type_set.hpp +29 -0
  536. package/src/duckdb/src/include/duckdb/execution/index/unknown_index.hpp +65 -0
  537. package/src/duckdb/src/include/duckdb/execution/join_hashtable.hpp +35 -24
  538. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +630 -0
  539. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +2 -0
  540. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +3 -2
  541. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer.hpp +103 -0
  542. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.hpp +74 -0
  543. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/buffer_manager/csv_file_handle.hpp +60 -0
  544. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_option.hpp +155 -0
  545. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/csv_reader_options.hpp +163 -0
  546. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/options/state_machine_options.hpp +35 -0
  547. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/base_scanner.hpp +228 -0
  548. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/column_count_scanner.hpp +70 -0
  549. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/scanner_boundary.hpp +93 -0
  550. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/skip_scanner.hpp +60 -0
  551. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/scanner/string_value_scanner.hpp +197 -0
  552. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/csv_sniffer.hpp +189 -0
  553. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/sniffer/quote_rules.hpp +21 -0
  554. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state.hpp +30 -0
  555. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine.hpp +99 -0
  556. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.hpp +87 -0
  557. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/csv_file_scanner.hpp +70 -0
  558. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/table_function/global_csv_state.hpp +80 -0
  559. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_casting.hpp +137 -0
  560. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/util/csv_error.hpp +104 -0
  561. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +0 -4
  562. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_buffered_collector.hpp +37 -0
  563. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_create_secret.hpp +38 -0
  564. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_pragma.hpp +4 -7
  565. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reservoir_sample.hpp +6 -2
  566. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +1 -2
  567. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +5 -18
  568. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +14 -5
  569. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +2 -2
  570. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_join.hpp +2 -1
  571. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_left_delim_join.hpp +37 -0
  572. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +1 -2
  573. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  574. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +1 -1
  575. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_right_delim_join.hpp +37 -0
  576. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +0 -1
  577. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +0 -1
  578. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_database.hpp +35 -0
  579. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +8 -3
  580. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +14 -0
  581. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +1 -4
  582. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +0 -1
  583. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +17 -12
  584. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +4 -0
  585. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_union.hpp +3 -1
  586. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +2 -1
  587. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +6 -2
  588. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +3 -1
  589. package/src/duckdb/src/include/duckdb/execution/reservoir_sample.hpp +32 -18
  590. package/src/duckdb/src/include/duckdb/execution/task_error_manager.hpp +57 -0
  591. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +2 -0
  592. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +101 -19
  593. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +46 -14
  594. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +6 -2
  595. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  596. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +26 -1
  597. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +3 -0
  598. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +1 -0
  599. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +7 -1
  600. package/src/duckdb/src/include/duckdb/function/compression/compression.hpp +10 -0
  601. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +16 -4
  602. package/src/duckdb/src/include/duckdb/function/function.hpp +12 -7
  603. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +15 -12
  604. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +4 -3
  605. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -3
  606. package/src/duckdb/src/include/duckdb/function/pragma/pragma_functions.hpp +4 -1
  607. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -0
  608. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +21 -1
  609. package/src/duckdb/src/include/duckdb/function/scalar/sequence_functions.hpp +22 -0
  610. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +16 -2
  611. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +22 -8
  612. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +6 -0
  613. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +35 -3
  614. package/src/duckdb/src/include/duckdb/function/table/list.hpp +1 -0
  615. package/src/duckdb/src/include/duckdb/function/table/range.hpp +12 -0
  616. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +14 -16
  617. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +12 -8
  618. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +0 -2
  619. package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -3
  620. package/src/duckdb/src/include/duckdb/main/appender.hpp +3 -1
  621. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -2
  622. package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +89 -0
  623. package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +53 -0
  624. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -1
  625. package/src/duckdb/src/include/duckdb/main/capi/cast/generic.hpp +2 -0
  626. package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +4 -4
  627. package/src/duckdb/src/include/duckdb/main/chunk_scan_state.hpp +3 -3
  628. package/src/duckdb/src/include/duckdb/main/client_config.hpp +8 -10
  629. package/src/duckdb/src/include/duckdb/main/client_context.hpp +22 -23
  630. package/src/duckdb/src/include/duckdb/main/client_context_state.hpp +37 -0
  631. package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -7
  632. package/src/duckdb/src/include/duckdb/main/config.hpp +24 -7
  633. package/src/duckdb/src/include/duckdb/main/connection.hpp +8 -1
  634. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +17 -26
  635. package/src/duckdb/src/include/duckdb/main/database.hpp +4 -2
  636. package/src/duckdb/src/include/duckdb/main/database_manager.hpp +39 -7
  637. package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +5 -4
  638. package/src/duckdb/src/include/duckdb/main/error_manager.hpp +4 -1
  639. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +203 -197
  640. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +42 -16
  641. package/src/duckdb/src/include/duckdb/main/extension_util.hpp +8 -1
  642. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +1 -1
  643. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +5 -2
  644. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +4 -4
  645. package/src/duckdb/src/include/duckdb/main/prepared_statement_data.hpp +2 -0
  646. package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +0 -32
  647. package/src/duckdb/src/include/duckdb/main/query_result.hpp +13 -12
  648. package/src/duckdb/src/include/duckdb/main/relation/read_csv_relation.hpp +6 -6
  649. package/src/duckdb/src/include/duckdb/main/relation/setop_relation.hpp +3 -1
  650. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +206 -0
  651. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +211 -0
  652. package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +164 -0
  653. package/src/duckdb/src/include/duckdb/main/settings.hpp +52 -13
  654. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +9 -1
  655. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +4 -1
  656. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  657. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
  658. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +2 -0
  659. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +3 -0
  660. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_statistics_helper.hpp +1 -0
  661. package/src/duckdb/src/include/duckdb/parallel/event.hpp +2 -2
  662. package/src/duckdb/src/include/duckdb/parallel/meta_pipeline.hpp +14 -22
  663. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +20 -0
  664. package/src/duckdb/src/include/duckdb/parallel/pipeline_executor.hpp +3 -5
  665. package/src/duckdb/src/include/duckdb/parallel/task.hpp +7 -0
  666. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +10 -4
  667. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +3 -0
  668. package/src/duckdb/src/include/duckdb/parser/column_definition.hpp +8 -1
  669. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +11 -4
  670. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +16 -9
  671. package/src/duckdb/src/include/duckdb/parser/expression/lambdaref_expression.hpp +47 -0
  672. package/src/duckdb/src/include/duckdb/parser/expression/list.hpp +1 -0
  673. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +29 -2
  674. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +2 -1
  675. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +47 -2
  676. package/src/duckdb/src/include/duckdb/parser/parsed_data/attach_info.hpp +3 -0
  677. package/src/duckdb/src/include/duckdb/parser/parsed_data/bound_pragma_info.hpp +29 -0
  678. package/src/duckdb/src/include/duckdb/parser/parsed_data/comment_on_info.hpp +45 -0
  679. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +21 -22
  680. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +5 -11
  681. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_schema_info.hpp +23 -0
  682. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +47 -0
  683. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_info.hpp +3 -1
  684. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_type_info.hpp +2 -0
  685. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_view_info.hpp +4 -0
  686. package/src/duckdb/src/include/duckdb/parser/parsed_data/drop_info.hpp +6 -1
  687. package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +66 -0
  688. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -1
  689. package/src/duckdb/src/include/duckdb/parser/parsed_data/pragma_info.hpp +8 -4
  690. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +1 -3
  691. package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +2 -0
  692. package/src/duckdb/src/include/duckdb/parser/qualified_name.hpp +1 -1
  693. package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +5 -22
  694. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +2 -0
  695. package/src/duckdb/src/include/duckdb/parser/statement/copy_database_statement.hpp +40 -0
  696. package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -1
  697. package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +4 -3
  698. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  699. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  700. package/src/duckdb/src/include/duckdb/parser/tableref/showref.hpp +47 -0
  701. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +2 -1
  702. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -1
  703. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +20 -3
  704. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +5 -1
  705. package/src/duckdb/src/include/duckdb/planner/binder.hpp +24 -27
  706. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +4 -0
  707. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +4 -0
  708. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +4 -1
  709. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +2 -1
  710. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +4 -2
  711. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +5 -6
  712. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +11 -0
  713. package/src/duckdb/src/include/duckdb/planner/expression.hpp +2 -1
  714. package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +2 -2
  715. package/src/duckdb/src/include/duckdb/planner/expression_binder/index_binder.hpp +3 -2
  716. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +2 -1
  717. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +2 -1
  718. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +65 -22
  719. package/src/duckdb/src/include/duckdb/planner/filter/struct_filter.hpp +41 -0
  720. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +2 -1
  721. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  722. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +2 -0
  723. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +45 -0
  724. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +3 -0
  725. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +43 -0
  726. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +3 -2
  727. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +5 -10
  728. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +2 -0
  729. package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +11 -4
  730. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +3 -3
  731. package/src/duckdb/src/include/duckdb/planner/pragma_handler.hpp +1 -1
  732. package/src/duckdb/src/include/duckdb/planner/query_node/bound_set_operation_node.hpp +2 -0
  733. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +3 -0
  734. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_cte_scan.hpp +29 -0
  735. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +9 -7
  736. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +2 -1
  737. package/src/duckdb/src/include/duckdb/planner/tableref/bound_dummytableref.hpp +3 -2
  738. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +9 -5
  739. package/src/duckdb/src/include/duckdb/storage/buffer/buffer_pool.hpp +23 -6
  740. package/src/duckdb/src/include/duckdb/storage/buffer/temporary_file_information.hpp +7 -0
  741. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +11 -4
  742. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +0 -3
  743. package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
  744. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +7 -7
  745. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  746. package/src/duckdb/src/include/duckdb/storage/compression/alp/algorithm/alp.hpp +408 -0
  747. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +173 -0
  748. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +283 -0
  749. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_constants.hpp +134 -0
  750. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +42 -0
  751. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +244 -0
  752. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_utils.hpp +103 -0
  753. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +235 -0
  754. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +134 -0
  755. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +301 -0
  756. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_constants.hpp +35 -0
  757. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +41 -0
  758. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +252 -0
  759. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +7 -103
  760. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +5 -234
  761. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -2
  762. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +7 -107
  763. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +5 -184
  764. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +12 -17
  765. package/src/duckdb/src/include/duckdb/storage/database_size.hpp +1 -0
  766. package/src/duckdb/src/include/duckdb/storage/index.hpp +40 -42
  767. package/src/duckdb/src/include/duckdb/storage/index_storage_info.hpp +77 -0
  768. package/src/duckdb/src/include/duckdb/storage/metadata/metadata_manager.hpp +6 -2
  769. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +0 -1
  770. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +12 -6
  771. package/src/duckdb/src/include/duckdb/storage/segment/uncompressed.hpp +8 -3
  772. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +17 -17
  773. package/src/duckdb/src/include/duckdb/storage/statistics/array_stats.hpp +40 -0
  774. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +12 -3
  775. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -0
  776. package/src/duckdb/src/include/duckdb/storage/storage_extension.hpp +3 -2
  777. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +49 -24
  778. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +8 -4
  779. package/src/duckdb/src/include/duckdb/storage/table/array_column_data.hpp +67 -0
  780. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +3 -3
  781. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +1 -0
  782. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +1 -2
  783. package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +8 -3
  784. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  785. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +4 -2
  786. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +7 -0
  787. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +12 -1
  788. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +1 -1
  789. package/src/duckdb/src/include/duckdb/storage/table/struct_column_data.hpp +1 -1
  790. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +16 -12
  791. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +4 -0
  792. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +6 -9
  793. package/src/duckdb/src/include/duckdb/storage/temporary_memory_manager.hpp +119 -0
  794. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +13 -55
  795. package/src/duckdb/src/include/duckdb/transaction/duck_transaction.hpp +1 -1
  796. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +4 -5
  797. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  798. package/src/duckdb/src/include/duckdb/transaction/meta_transaction.hpp +6 -3
  799. package/src/duckdb/src/include/duckdb/transaction/transaction_context.hpp +4 -4
  800. package/src/duckdb/src/include/duckdb/transaction/transaction_manager.hpp +3 -3
  801. package/src/duckdb/src/include/duckdb/verification/fetch_row_verifier.hpp +25 -0
  802. package/src/duckdb/src/include/duckdb/verification/statement_verifier.hpp +5 -0
  803. package/src/duckdb/src/include/duckdb.h +571 -143
  804. package/src/duckdb/src/main/appender.cpp +17 -2
  805. package/src/duckdb/src/main/attached_database.cpp +24 -12
  806. package/src/duckdb/src/main/buffered_data/simple_buffered_data.cpp +96 -0
  807. package/src/duckdb/src/main/capi/appender-c.cpp +42 -3
  808. package/src/duckdb/src/main/capi/arrow-c.cpp +32 -9
  809. package/src/duckdb/src/main/capi/datetime-c.cpp +22 -0
  810. package/src/duckdb/src/main/capi/duckdb-c.cpp +14 -4
  811. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +66 -2
  812. package/src/duckdb/src/main/capi/helper-c.cpp +76 -2
  813. package/src/duckdb/src/main/capi/hugeint-c.cpp +23 -0
  814. package/src/duckdb/src/main/capi/logical_types-c.cpp +27 -3
  815. package/src/duckdb/src/main/capi/pending-c.cpp +43 -9
  816. package/src/duckdb/src/main/capi/prepared-c.cpp +38 -2
  817. package/src/duckdb/src/main/capi/result-c.cpp +54 -3
  818. package/src/duckdb/src/main/capi/table_function-c.cpp +4 -4
  819. package/src/duckdb/src/main/capi/value-c.cpp +10 -0
  820. package/src/duckdb/src/main/chunk_scan_state/query_result.cpp +3 -3
  821. package/src/duckdb/src/main/client_context.cpp +259 -250
  822. package/src/duckdb/src/main/client_data.cpp +0 -1
  823. package/src/duckdb/src/main/client_verify.cpp +26 -8
  824. package/src/duckdb/src/main/config.cpp +34 -13
  825. package/src/duckdb/src/main/connection.cpp +27 -6
  826. package/src/duckdb/src/main/connection_manager.cpp +54 -0
  827. package/src/duckdb/src/main/database.cpp +44 -39
  828. package/src/duckdb/src/main/database_manager.cpp +106 -8
  829. package/src/duckdb/src/main/database_path_and_type.cpp +27 -8
  830. package/src/duckdb/src/main/db_instance_cache.cpp +4 -4
  831. package/src/duckdb/src/main/error_manager.cpp +12 -3
  832. package/src/duckdb/src/main/extension/extension_alias.cpp +2 -2
  833. package/src/duckdb/src/main/extension/extension_helper.cpp +15 -16
  834. package/src/duckdb/src/main/extension/extension_install.cpp +33 -24
  835. package/src/duckdb/src/main/extension/extension_load.cpp +22 -21
  836. package/src/duckdb/src/main/extension/extension_util.cpp +12 -0
  837. package/src/duckdb/src/main/materialized_query_result.cpp +1 -1
  838. package/src/duckdb/src/main/pending_query_result.cpp +25 -8
  839. package/src/duckdb/src/main/prepared_statement.cpp +5 -5
  840. package/src/duckdb/src/main/prepared_statement_data.cpp +8 -1
  841. package/src/duckdb/src/main/query_profiler.cpp +11 -11
  842. package/src/duckdb/src/main/query_result.cpp +32 -6
  843. package/src/duckdb/src/main/relation/cross_product_relation.cpp +1 -1
  844. package/src/duckdb/src/main/relation/join_relation.cpp +2 -2
  845. package/src/duckdb/src/main/relation/read_csv_relation.cpp +38 -32
  846. package/src/duckdb/src/main/relation/setop_relation.cpp +5 -3
  847. package/src/duckdb/src/main/relation.cpp +5 -5
  848. package/src/duckdb/src/main/secret/secret.cpp +135 -0
  849. package/src/duckdb/src/main/secret/secret_manager.cpp +634 -0
  850. package/src/duckdb/src/main/secret/secret_storage.cpp +233 -0
  851. package/src/duckdb/src/main/settings/settings.cpp +133 -38
  852. package/src/duckdb/src/main/stream_query_result.cpp +53 -14
  853. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +6 -0
  854. package/src/duckdb/src/optimizer/cse_optimizer.cpp +1 -1
  855. package/src/duckdb/src/optimizer/deliminator.cpp +136 -14
  856. package/src/duckdb/src/optimizer/filter_combiner.cpp +72 -26
  857. package/src/duckdb/src/optimizer/filter_pushdown.cpp +3 -0
  858. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +2 -1
  859. package/src/duckdb/src/optimizer/join_order/cost_model.cpp +0 -1
  860. package/src/duckdb/src/optimizer/join_order/join_node.cpp +4 -0
  861. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -6
  862. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +20 -0
  863. package/src/duckdb/src/optimizer/join_order/query_graph_manager.cpp +71 -40
  864. package/src/duckdb/src/optimizer/join_order/relation_manager.cpp +12 -3
  865. package/src/duckdb/src/optimizer/join_order/relation_statistics_helper.cpp +77 -3
  866. package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +7 -7
  867. package/src/duckdb/src/optimizer/pushdown/pushdown_semi_anti_join.cpp +56 -0
  868. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +21 -0
  869. package/src/duckdb/src/optimizer/rule/date_part_simplification.cpp +2 -2
  870. package/src/duckdb/src/optimizer/rule/move_constants.cpp +15 -10
  871. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +70 -0
  872. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +17 -5
  873. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -0
  874. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +1 -0
  875. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -2
  876. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +22 -9
  877. package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +28 -4
  878. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +12 -7
  879. package/src/duckdb/src/parallel/event.cpp +2 -2
  880. package/src/duckdb/src/parallel/executor.cpp +114 -81
  881. package/src/duckdb/src/parallel/executor_task.cpp +2 -4
  882. package/src/duckdb/src/parallel/meta_pipeline.cpp +28 -29
  883. package/src/duckdb/src/parallel/pipeline.cpp +41 -41
  884. package/src/duckdb/src/parallel/pipeline_event.cpp +2 -4
  885. package/src/duckdb/src/parallel/pipeline_executor.cpp +13 -75
  886. package/src/duckdb/src/parallel/task_scheduler.cpp +22 -13
  887. package/src/duckdb/src/parser/column_definition.cpp +22 -4
  888. package/src/duckdb/src/parser/column_list.cpp +2 -1
  889. package/src/duckdb/src/parser/expression/function_expression.cpp +1 -1
  890. package/src/duckdb/src/parser/expression/lambda_expression.cpp +51 -0
  891. package/src/duckdb/src/parser/expression/lambdaref_expression.cpp +59 -0
  892. package/src/duckdb/src/parser/expression/window_expression.cpp +9 -1
  893. package/src/duckdb/src/parser/parsed_data/alter_table_info.cpp +40 -0
  894. package/src/duckdb/src/parser/parsed_data/attach_info.cpp +1 -0
  895. package/src/duckdb/src/parser/parsed_data/comment_on_info.cpp +19 -0
  896. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +11 -9
  897. package/src/duckdb/src/parser/parsed_data/create_info.cpp +1 -0
  898. package/src/duckdb/src/parser/parsed_data/create_secret_info.cpp +22 -0
  899. package/src/duckdb/src/parser/parsed_data/create_table_info.cpp +17 -0
  900. package/src/duckdb/src/parser/parsed_data/create_type_info.cpp +19 -0
  901. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +13 -9
  902. package/src/duckdb/src/parser/parsed_data/drop_info.cpp +8 -9
  903. package/src/duckdb/src/parser/parsed_data/extra_drop_info.cpp +16 -0
  904. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +3 -1
  905. package/src/duckdb/src/parser/parser.cpp +14 -8
  906. package/src/duckdb/src/parser/query_error_context.cpp +12 -13
  907. package/src/duckdb/src/parser/query_node/select_node.cpp +5 -1
  908. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +8 -13
  909. package/src/duckdb/src/parser/statement/copy_database_statement.cpp +41 -0
  910. package/src/duckdb/src/parser/statement/set_statement.cpp +5 -1
  911. package/src/duckdb/src/parser/tableref/basetableref.cpp +1 -0
  912. package/src/duckdb/src/parser/tableref/showref.cpp +47 -0
  913. package/src/duckdb/src/parser/transform/constraint/transform_constraint.cpp +6 -2
  914. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -0
  915. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +30 -15
  916. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +1 -0
  917. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +3 -2
  918. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +34 -4
  919. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +26 -12
  920. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +1 -1
  921. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +34 -5
  922. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +3 -1
  923. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +3 -1
  924. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +3 -3
  925. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +3 -3
  926. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +1 -1
  927. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +13 -13
  928. package/src/duckdb/src/parser/transform/helpers/nodetype_to_string.cpp +2 -0
  929. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -1
  930. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +32 -1
  931. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +1 -1
  932. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +1 -0
  933. package/src/duckdb/src/parser/transform/statement/transform_comment_on.cpp +108 -0
  934. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +45 -37
  935. package/src/duckdb/src/parser/transform/statement/transform_copy_database.cpp +29 -0
  936. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +5 -14
  937. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +0 -1
  938. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +1 -1
  939. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +25 -6
  940. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -1
  941. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +6 -14
  942. package/src/duckdb/src/parser/transform/statement/transform_secret.cpp +103 -0
  943. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -1
  944. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +4 -8
  945. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -5
  946. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +14 -41
  947. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +13 -6
  948. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -1
  949. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +1 -1
  950. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +1 -2
  951. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +6 -5
  952. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +1 -1
  953. package/src/duckdb/src/parser/transformer.cpp +22 -0
  954. package/src/duckdb/src/planner/bind_context.cpp +23 -14
  955. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +15 -14
  956. package/src/duckdb/src/planner/binder/expression/bind_between_expression.cpp +20 -9
  957. package/src/duckdb/src/planner/binder/expression/bind_case_expression.cpp +12 -7
  958. package/src/duckdb/src/planner/binder/expression/bind_cast_expression.cpp +4 -4
  959. package/src/duckdb/src/planner/binder/expression/bind_collate_expression.cpp +3 -3
  960. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +279 -195
  961. package/src/duckdb/src/planner/binder/expression/bind_comparison_expression.cpp +103 -17
  962. package/src/duckdb/src/planner/binder/expression/bind_conjunction_expression.cpp +3 -3
  963. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +91 -68
  964. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +116 -84
  965. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +85 -15
  966. package/src/duckdb/src/planner/binder/expression/bind_operator_expression.cpp +68 -31
  967. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +7 -7
  968. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +11 -7
  969. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +42 -19
  970. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +38 -16
  971. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +16 -7
  972. package/src/duckdb/src/planner/binder/query_node/bind_recursive_cte_node.cpp +3 -0
  973. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +83 -12
  974. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -37
  975. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +3 -4
  976. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +2 -2
  977. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +3 -3
  978. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +7 -5
  979. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -0
  980. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +48 -50
  981. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +187 -0
  982. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +38 -22
  983. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +8 -15
  984. package/src/duckdb/src/planner/binder/statement/bind_drop.cpp +6 -1
  985. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +2 -2
  986. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -10
  987. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +37 -13
  988. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +8 -2
  989. package/src/duckdb/src/planner/binder/statement/bind_simple.cpp +2 -0
  990. package/src/duckdb/src/planner/binder/statement/bind_summarize.cpp +29 -14
  991. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +1 -1
  992. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +16 -6
  993. package/src/duckdb/src/planner/binder/tableref/bind_expressionlistref.cpp +11 -4
  994. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +1 -1
  995. package/src/duckdb/src/planner/binder/tableref/bind_named_parameters.cpp +2 -2
  996. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +18 -17
  997. package/src/duckdb/src/planner/binder/tableref/bind_showref.cpp +85 -0
  998. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -17
  999. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -9
  1000. package/src/duckdb/src/planner/binder.cpp +31 -26
  1001. package/src/duckdb/src/planner/bound_result_modifier.cpp +24 -0
  1002. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  1003. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +10 -1
  1004. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +20 -4
  1005. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +9 -10
  1006. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +65 -3
  1007. package/src/duckdb/src/planner/expression.cpp +15 -5
  1008. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +5 -6
  1009. package/src/duckdb/src/planner/expression_binder/check_binder.cpp +9 -8
  1010. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +10 -7
  1011. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +9 -4
  1012. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +0 -25
  1013. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +8 -11
  1014. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -2
  1015. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +15 -8
  1016. package/src/duckdb/src/planner/expression_binder/where_binder.cpp +3 -4
  1017. package/src/duckdb/src/planner/expression_binder.cpp +51 -25
  1018. package/src/duckdb/src/planner/expression_iterator.cpp +2 -1
  1019. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -0
  1020. package/src/duckdb/src/planner/filter/struct_filter.cpp +33 -0
  1021. package/src/duckdb/src/planner/joinside.cpp +1 -1
  1022. package/src/duckdb/src/planner/logical_operator.cpp +2 -1
  1023. package/src/duckdb/src/planner/operator/logical_copy_database.cpp +32 -0
  1024. package/src/duckdb/src/planner/operator/logical_copy_to_file.cpp +13 -4
  1025. package/src/duckdb/src/planner/operator/logical_create_table.cpp +2 -0
  1026. package/src/duckdb/src/planner/operator/logical_get.cpp +4 -1
  1027. package/src/duckdb/src/planner/operator/logical_join.cpp +8 -0
  1028. package/src/duckdb/src/planner/planner.cpp +24 -23
  1029. package/src/duckdb/src/planner/pragma_handler.cpp +10 -19
  1030. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +99 -6
  1031. package/src/duckdb/src/planner/subquery/rewrite_cte_scan.cpp +36 -0
  1032. package/src/duckdb/src/planner/table_binding.cpp +14 -12
  1033. package/src/duckdb/src/storage/buffer/block_handle.cpp +12 -10
  1034. package/src/duckdb/src/storage/buffer/block_manager.cpp +1 -1
  1035. package/src/duckdb/src/storage/buffer/buffer_pool.cpp +25 -9
  1036. package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +4 -3
  1037. package/src/duckdb/src/storage/buffer_manager.cpp +14 -3
  1038. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +0 -8
  1039. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +15 -7
  1040. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +1 -1
  1041. package/src/duckdb/src/storage/checkpoint_manager.cpp +94 -41
  1042. package/src/duckdb/src/storage/compression/alp/alp.cpp +57 -0
  1043. package/src/duckdb/src/storage/compression/alp/alp_constants.cpp +13 -0
  1044. package/src/duckdb/src/storage/compression/alprd.cpp +57 -0
  1045. package/src/duckdb/src/storage/compression/bitpacking.cpp +86 -55
  1046. package/src/duckdb/src/storage/compression/bitpacking_hugeint.cpp +41 -41
  1047. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +1 -3
  1048. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +2 -0
  1049. package/src/duckdb/src/storage/compression/fsst.cpp +4 -4
  1050. package/src/duckdb/src/storage/compression/numeric_constant.cpp +3 -0
  1051. package/src/duckdb/src/storage/compression/rle.cpp +6 -4
  1052. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +7 -7
  1053. package/src/duckdb/src/storage/compression/uncompressed.cpp +1 -0
  1054. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  1055. package/src/duckdb/src/storage/data_table.cpp +32 -96
  1056. package/src/duckdb/src/storage/index.cpp +23 -11
  1057. package/src/duckdb/src/storage/local_storage.cpp +36 -19
  1058. package/src/duckdb/src/storage/metadata/metadata_manager.cpp +2 -2
  1059. package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
  1060. package/src/duckdb/src/storage/serialization/serialize_create_info.cpp +9 -4
  1061. package/src/duckdb/src/storage/serialization/serialize_expression.cpp +3 -3
  1062. package/src/duckdb/src/storage/serialization/serialize_extra_drop_info.cpp +42 -0
  1063. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +7 -17
  1064. package/src/duckdb/src/storage/serialization/serialize_macro_function.cpp +2 -2
  1065. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +84 -77
  1066. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +63 -4
  1067. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +23 -0
  1068. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +2 -0
  1069. package/src/duckdb/src/storage/serialization/serialize_storage.cpp +35 -0
  1070. package/src/duckdb/src/storage/serialization/serialize_table_filter.cpp +19 -0
  1071. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +22 -1
  1072. package/src/duckdb/src/storage/serialization/serialize_types.cpp +50 -0
  1073. package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -7
  1074. package/src/duckdb/src/storage/standard_buffer_manager.cpp +57 -28
  1075. package/src/duckdb/src/storage/statistics/array_stats.cpp +131 -0
  1076. package/src/duckdb/src/storage/statistics/base_statistics.cpp +62 -4
  1077. package/src/duckdb/src/storage/statistics/column_statistics.cpp +1 -0
  1078. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +3 -1
  1079. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +21 -0
  1080. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +5 -0
  1081. package/src/duckdb/src/storage/statistics/string_stats.cpp +2 -2
  1082. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  1083. package/src/duckdb/src/storage/storage_manager.cpp +47 -22
  1084. package/src/duckdb/src/storage/table/array_column_data.cpp +241 -0
  1085. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -1
  1086. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +3 -1
  1087. package/src/duckdb/src/storage/table/column_data.cpp +41 -18
  1088. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +12 -3
  1089. package/src/duckdb/src/storage/table/column_segment.cpp +40 -6
  1090. package/src/duckdb/src/storage/table/list_column_data.cpp +18 -15
  1091. package/src/duckdb/src/storage/table/row_group.cpp +73 -21
  1092. package/src/duckdb/src/storage/table/row_group_collection.cpp +395 -20
  1093. package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -1
  1094. package/src/duckdb/src/storage/table/scan_state.cpp +4 -0
  1095. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -5
  1096. package/src/duckdb/src/storage/table/struct_column_data.cpp +30 -10
  1097. package/src/duckdb/src/storage/table/table_statistics.cpp +7 -1
  1098. package/src/duckdb/src/storage/table/update_segment.cpp +18 -2
  1099. package/src/duckdb/src/storage/table_index_list.cpp +73 -7
  1100. package/src/duckdb/src/storage/temporary_memory_manager.cpp +148 -0
  1101. package/src/duckdb/src/storage/wal_replay.cpp +329 -152
  1102. package/src/duckdb/src/storage/write_ahead_log.cpp +157 -137
  1103. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -2
  1104. package/src/duckdb/src/transaction/commit_state.cpp +89 -63
  1105. package/src/duckdb/src/transaction/duck_transaction.cpp +5 -3
  1106. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +26 -54
  1107. package/src/duckdb/src/transaction/meta_transaction.cpp +37 -23
  1108. package/src/duckdb/src/transaction/transaction_context.cpp +23 -4
  1109. package/src/duckdb/src/transaction/undo_buffer.cpp +16 -2
  1110. package/src/duckdb/src/verification/fetch_row_verifier.cpp +13 -0
  1111. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +5 -7
  1112. package/src/duckdb/src/verification/statement_verifier.cpp +6 -5
  1113. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +100 -29
  1114. package/src/duckdb/third_party/fmt/include/fmt/format-inl.h +1 -1
  1115. package/src/duckdb/third_party/fmt/include/fmt/format.h +4 -2
  1116. package/src/duckdb/third_party/fmt/include/fmt/printf.h +5 -5
  1117. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +4 -0
  1118. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +82 -21
  1119. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +551 -1004
  1120. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +17 -3
  1121. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24861 -23465
  1122. package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +420 -389
  1123. package/src/duckdb/third_party/mbedtls/include/mbedtls/aes.h +640 -1
  1124. package/src/duckdb/third_party/mbedtls/include/mbedtls/aes_alt.h +1 -0
  1125. package/src/duckdb/third_party/mbedtls/include/mbedtls/aria.h +358 -0
  1126. package/src/duckdb/third_party/mbedtls/include/mbedtls/aria_alt.h +1 -0
  1127. package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia.h +316 -0
  1128. package/src/duckdb/third_party/mbedtls/include/mbedtls/camellia_alt.h +1 -0
  1129. package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm.h +1 -1
  1130. package/src/duckdb/third_party/mbedtls/include/mbedtls/ccm_alt.h +1 -0
  1131. package/src/duckdb/third_party/mbedtls/include/mbedtls/chacha20.h +1 -0
  1132. package/src/duckdb/third_party/mbedtls/include/mbedtls/chachapoly.h +1 -0
  1133. package/src/duckdb/third_party/mbedtls/include/mbedtls/cipher.h +124 -124
  1134. package/src/duckdb/third_party/mbedtls/include/mbedtls/cmac.h +1 -0
  1135. package/src/duckdb/third_party/mbedtls/include/mbedtls/entropy.h +293 -0
  1136. package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm.h +383 -0
  1137. package/src/duckdb/third_party/mbedtls/include/mbedtls/gcm_alt.h +1 -0
  1138. package/src/duckdb/third_party/mbedtls/include/mbedtls/mbedtls_config.h +9 -0
  1139. package/src/duckdb/third_party/mbedtls/include/mbedtls/nist_kw.h +1 -0
  1140. package/src/duckdb/third_party/mbedtls/include/mbedtls/timing.h +1 -0
  1141. package/src/duckdb/third_party/mbedtls/include/mbedtls_wrapper.hpp +35 -6
  1142. package/src/duckdb/third_party/mbedtls/library/aes.cpp +2171 -0
  1143. package/src/duckdb/third_party/mbedtls/library/aesni.h +1 -0
  1144. package/src/duckdb/third_party/mbedtls/library/aria.cpp +1058 -0
  1145. package/src/duckdb/third_party/mbedtls/library/camellia.cpp +1087 -0
  1146. package/src/duckdb/third_party/mbedtls/library/cipher.cpp +1633 -0
  1147. package/src/duckdb/third_party/mbedtls/library/cipher_wrap.cpp +2270 -0
  1148. package/src/duckdb/third_party/mbedtls/library/cipher_wrap.h +146 -0
  1149. package/src/duckdb/third_party/mbedtls/library/entropy.cpp +701 -0
  1150. package/src/duckdb/third_party/mbedtls/library/entropy_poll.cpp +237 -0
  1151. package/src/duckdb/third_party/mbedtls/library/entropy_poll.h +76 -0
  1152. package/src/duckdb/third_party/mbedtls/library/gcm.cpp +1161 -0
  1153. package/src/duckdb/third_party/mbedtls/library/padlock.h +1 -0
  1154. package/src/duckdb/third_party/mbedtls/mbedtls_wrapper.cpp +132 -24
  1155. package/src/duckdb/third_party/pcg/pcg_uint128.hpp +1 -1
  1156. package/src/duckdb/third_party/skiplist/HeadNode.h +934 -0
  1157. package/src/duckdb/third_party/skiplist/IntegrityEnums.h +62 -0
  1158. package/src/duckdb/third_party/skiplist/Node.h +641 -0
  1159. package/src/duckdb/third_party/skiplist/NodeRefs.h +251 -0
  1160. package/src/duckdb/third_party/skiplist/RollingMedian.h +202 -0
  1161. package/src/duckdb/third_party/skiplist/SkipList.cpp +40 -0
  1162. package/src/duckdb/third_party/skiplist/SkipList.h +549 -0
  1163. package/src/duckdb/third_party/thrift/thrift/thrift-config.h +1 -1
  1164. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  1165. package/src/duckdb/ub_src_catalog.cpp +3 -1
  1166. package/src/duckdb/ub_src_catalog_catalog_entry_dependency.cpp +6 -0
  1167. package/src/duckdb/ub_src_common.cpp +1 -1
  1168. package/src/duckdb/ub_src_common_exception.cpp +6 -0
  1169. package/src/duckdb/ub_src_common_types.cpp +2 -2
  1170. package/src/duckdb/ub_src_core_functions.cpp +2 -0
  1171. package/src/duckdb/ub_src_core_functions_scalar_array.cpp +4 -0
  1172. package/src/duckdb/ub_src_core_functions_scalar_blob.cpp +2 -0
  1173. package/src/duckdb/ub_src_core_functions_scalar_list.cpp +7 -3
  1174. package/src/duckdb/ub_src_core_functions_scalar_secret.cpp +2 -0
  1175. package/src/duckdb/ub_src_core_functions_scalar_string.cpp +4 -0
  1176. package/src/duckdb/ub_src_execution_index.cpp +4 -0
  1177. package/src/duckdb/ub_src_execution_operator_csv_scanner_buffer_manager.cpp +6 -0
  1178. package/src/duckdb/ub_src_execution_operator_csv_scanner_scanner.cpp +10 -0
  1179. package/src/duckdb/ub_src_execution_operator_csv_scanner_state_machine.cpp +4 -0
  1180. package/src/duckdb/ub_src_execution_operator_csv_scanner_table_function.cpp +4 -0
  1181. package/src/duckdb/ub_src_execution_operator_csv_scanner_util.cpp +4 -0
  1182. package/src/duckdb/ub_src_execution_operator_helper.cpp +4 -0
  1183. package/src/duckdb/ub_src_execution_operator_join.cpp +4 -2
  1184. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  1185. package/src/duckdb/ub_src_execution_physical_plan.cpp +4 -2
  1186. package/src/duckdb/ub_src_function_cast.cpp +2 -0
  1187. package/src/duckdb/ub_src_function_scalar_list.cpp +4 -0
  1188. package/src/duckdb/ub_src_function_table.cpp +4 -4
  1189. package/src/duckdb/ub_src_function_table_system.cpp +6 -0
  1190. package/src/duckdb/ub_src_main.cpp +2 -0
  1191. package/src/duckdb/ub_src_main_buffered_data.cpp +2 -0
  1192. package/src/duckdb/ub_src_main_secret.cpp +6 -0
  1193. package/src/duckdb/ub_src_optimizer_pushdown.cpp +2 -0
  1194. package/src/duckdb/ub_src_parser_expression.cpp +2 -0
  1195. package/src/duckdb/ub_src_parser_parsed_data.cpp +6 -0
  1196. package/src/duckdb/ub_src_parser_statement.cpp +2 -2
  1197. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  1198. package/src/duckdb/ub_src_parser_transform_statement.cpp +6 -0
  1199. package/src/duckdb/ub_src_planner_binder_statement.cpp +2 -2
  1200. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  1201. package/src/duckdb/ub_src_planner_filter.cpp +2 -0
  1202. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  1203. package/src/duckdb/ub_src_planner_subquery.cpp +2 -0
  1204. package/src/duckdb/ub_src_storage.cpp +2 -0
  1205. package/src/duckdb/ub_src_storage_compression.cpp +2 -0
  1206. package/src/duckdb/ub_src_storage_compression_alp.cpp +4 -0
  1207. package/src/duckdb/ub_src_storage_serialization.cpp +2 -0
  1208. package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
  1209. package/src/duckdb/ub_src_storage_table.cpp +2 -0
  1210. package/src/duckdb_node.hpp +1 -1
  1211. package/src/statement.cpp +18 -8
  1212. package/src/utils.cpp +1 -15
  1213. package/test/columns.test.ts +2 -1
  1214. 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
- void SetError(struct AdbcError *error, const char *message_p) {
105
- if (!message_p) {
106
- message_p = "";
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
- // Driver state
116
+ ~ManagedLibrary() {
117
+ Release();
118
+ }
113
119
 
114
- /// Hold the driver DLL and the driver release callback in the driver struct.
115
- struct ManagerDriverState {
116
- // The original release callback
117
- AdbcStatusCode (*driver_release)(struct AdbcDriver *driver, struct AdbcError *error);
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 AdbcDatabaseSetOption(struct AdbcDatabase *database, const char *key, const char *value,
656
+ AdbcStatusCode AdbcDatabaseGetOption(struct AdbcDatabase *database, const char *key, char *value, size_t *length,
167
657
  struct AdbcError *error) {
168
- if (!database) {
169
- return ADBC_STATUS_INVALID_ARGUMENT;
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, ADBC_VERSION_1_0_0, database->private_driver, error);
220
- } else {
221
- status = AdbcLoadDriver(args->driver.c_str(), args->entrypoint.c_str(), ADBC_VERSION_1_0_0,
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
- for (const auto &option : args->options) {
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
- delete args;
248
- // Release the database
249
- std::ignore = database->private_driver->DatabaseRelease(database, error);
250
- if (database->private_driver->release) {
251
- database->private_driver->release(database->private_driver, error);
252
- }
253
- delete database->private_driver;
254
- database->private_driver = nullptr;
255
- // Should be redundant, but ensure that AdbcDatabaseRelease
256
- // below doesn't think that it contains a TempDatabase
257
- database->private_data = nullptr;
258
- return status;
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 AdbcConnectionCommit(struct AdbcConnection *connection, struct AdbcError *error) {
286
- if (!connection) {
287
- return ADBC_STATUS_INVALID_ARGUMENT;
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, size_t info_codes_length,
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
- return connection->private_driver->ConnectionGetInfo(connection, info_codes, info_codes_length, out, error);
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
- SetError(error, "connection can't be null");
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, "connection must be initialized");
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
- return connection->private_driver->ConnectionGetObjects(connection, depth, catalog, db_schema, table_name,
319
- table_types, column_name, stream, error);
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
- return connection->private_driver->ConnectionGetTableTypes(connection, stream, error);
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
- return connection->private_driver->ConnectionReadPartition(connection, serialized_partition, serialized_length, out,
398
- error);
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 ADBC_STATUS_INVALID_ARGUMENT;
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
- return statement->private_driver->StatementExecuteQuery(statement, out, rows_affected, error);
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 AdbcStatementSetSqlQuery(struct AdbcStatement *statement, const char *query, struct AdbcError *error) {
553
- if (!statement) {
554
- return ADBC_STATUS_INVALID_ARGUMENT;
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 " (" STRINGIFY_VALUE(CONSTANT) ")";
1424
+ case ADBC_STATUS_##CONSTANT: \
1425
+ return #CONSTANT;
579
1426
 
580
1427
  switch (code) {
581
- CASE(ADBC_STATUS_OK);
582
- CASE(ADBC_STATUS_UNKNOWN);
583
- CASE(ADBC_STATUS_NOT_IMPLEMENTED);
584
- CASE(ADBC_STATUS_NOT_FOUND);
585
- CASE(ADBC_STATUS_ALREADY_EXISTS);
586
- CASE(ADBC_STATUS_INVALID_ARGUMENT);
587
- CASE(ADBC_STATUS_INVALID_STATE);
588
- CASE(ADBC_STATUS_INVALID_DATA);
589
- CASE(ADBC_STATUS_INTEGRITY);
590
- CASE(ADBC_STATUS_INTERNAL);
591
- CASE(ADBC_STATUS_IO);
592
- CASE(ADBC_STATUS_CANCELLED);
593
- CASE(ADBC_STATUS_TIMEOUT);
594
- CASE(ADBC_STATUS_UNAUTHENTICATED);
595
- CASE(ADBC_STATUS_UNAUTHORIZED);
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
- if (version != ADBC_VERSION_1_0_0) {
610
- SetError(error, "Only ADBC 1.0.0 is supported");
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
- auto *driver = reinterpret_cast<struct AdbcDriver *>(raw_driver);
615
-
616
- if (!entrypoint) {
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
- void *load_handle = reinterpret_cast<void *>(GetProcAddress(handle, entrypoint));
645
- init_func = reinterpret_cast<AdbcDriverInitFunc>(load_handle);
646
- if (!init_func) {
647
- std::string message = "GetProcAddress(";
648
- message += entrypoint;
649
- message += ") failed: ";
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
- #else
660
-
661
- #if defined(__APPLE__)
662
- const std::string kPlatformLibraryPrefix = "lib";
663
- const std::string kPlatformLibrarySuffix = ".dylib";
664
- #else
665
- const std::string kPlatformLibraryPrefix = "lib";
666
- const std::string kPlatformLibrarySuffix = ".so";
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
- void *load_handle = dlsym(handle, entrypoint);
704
- if (!load_handle) {
705
- std::string message = "dlsym(";
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
- #endif // defined(_WIN32)
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
- #if defined(_WIN32)
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
- #if defined(_WIN32)
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
- auto result = init_func(version, raw_driver, error);
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 == ADBC_VERSION_1_0_0) {
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