duckdb 0.8.1-dev26.0 → 0.8.1-dev276.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 (604) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu-datepart.cpp +1 -1
  4. package/src/duckdb/extension/icu/icu-makedate.cpp +5 -4
  5. package/src/duckdb/extension/json/buffered_json_reader.cpp +23 -14
  6. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +6 -6
  7. package/src/duckdb/extension/json/include/json_common.hpp +13 -3
  8. package/src/duckdb/extension/json/include/json_executors.hpp +1 -1
  9. package/src/duckdb/extension/json/include/json_scan.hpp +3 -1
  10. package/src/duckdb/extension/json/json_functions/json_create.cpp +16 -16
  11. package/src/duckdb/extension/json/json_functions/json_merge_patch.cpp +3 -3
  12. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +2 -2
  13. package/src/duckdb/extension/json/json_functions/json_structure.cpp +5 -3
  14. package/src/duckdb/extension/json/json_functions/json_transform.cpp +12 -12
  15. package/src/duckdb/extension/json/json_functions/read_json.cpp +2 -1
  16. package/src/duckdb/extension/json/json_functions.cpp +6 -3
  17. package/src/duckdb/extension/json/json_scan.cpp +40 -25
  18. package/src/duckdb/extension/parquet/column_reader.cpp +57 -52
  19. package/src/duckdb/extension/parquet/column_writer.cpp +57 -45
  20. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +1 -1
  21. package/src/duckdb/extension/parquet/include/column_reader.hpp +5 -4
  22. package/src/duckdb/extension/parquet/include/column_writer.hpp +24 -0
  23. package/src/duckdb/extension/parquet/include/decode_utils.hpp +6 -0
  24. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +1 -1
  25. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +4 -4
  26. package/src/duckdb/extension/parquet/include/parquet_rle_bp_decoder.hpp +4 -5
  27. package/src/duckdb/extension/parquet/include/resizable_buffer.hpp +4 -4
  28. package/src/duckdb/extension/parquet/include/row_number_column_reader.hpp +1 -1
  29. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +1 -1
  30. package/src/duckdb/extension/parquet/parquet-extension.cpp +1 -1
  31. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  32. package/src/duckdb/extension/parquet/parquet_reader.cpp +18 -18
  33. package/src/duckdb/extension/parquet/parquet_statistics.cpp +23 -26
  34. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +2 -2
  35. package/src/duckdb/extension/parquet/parquet_writer.cpp +3 -3
  36. package/src/duckdb/extension/parquet/zstd_file_system.cpp +3 -3
  37. package/src/duckdb/src/catalog/catalog.cpp +5 -17
  38. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +113 -0
  39. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +7 -0
  40. package/src/duckdb/src/catalog/catalog_entry.cpp +4 -4
  41. package/src/duckdb/src/catalog/catalog_search_path.cpp +49 -12
  42. package/src/duckdb/src/catalog/catalog_set.cpp +1 -1
  43. package/src/duckdb/src/catalog/default/default_types.cpp +9 -84
  44. package/src/duckdb/src/catalog/dependency_manager.cpp +2 -2
  45. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -0
  46. package/src/duckdb/src/common/adbc/adbc.cpp +301 -106
  47. package/src/duckdb/src/common/adbc/driver_manager.cpp +10 -22
  48. package/src/duckdb/src/common/arrow/arrow_appender.cpp +12 -12
  49. package/src/duckdb/src/common/arrow/arrow_wrapper.cpp +7 -7
  50. package/src/duckdb/src/common/checksum.cpp +1 -1
  51. package/src/duckdb/src/common/compressed_file_system.cpp +6 -6
  52. package/src/duckdb/src/common/crypto/md5.cpp +9 -9
  53. package/src/duckdb/src/common/exception.cpp +4 -1
  54. package/src/duckdb/src/common/exception_format_value.cpp +19 -14
  55. package/src/duckdb/src/common/field_writer.cpp +1 -1
  56. package/src/duckdb/src/common/file_system.cpp +15 -2
  57. package/src/duckdb/src/common/fsst.cpp +11 -6
  58. package/src/duckdb/src/common/gzip_file_system.cpp +8 -8
  59. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  60. package/src/duckdb/src/common/local_file_system.cpp +11 -11
  61. package/src/duckdb/src/common/multi_file_reader.cpp +3 -0
  62. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  63. package/src/duckdb/src/common/pipe_file_system.cpp +2 -2
  64. package/src/duckdb/src/common/radix_partitioning.cpp +2 -2
  65. package/src/duckdb/src/common/row_operations/row_heap_gather.cpp +1 -1
  66. package/src/duckdb/src/common/row_operations/row_heap_scatter.cpp +5 -5
  67. package/src/duckdb/src/common/row_operations/row_match.cpp +1 -1
  68. package/src/duckdb/src/common/row_operations/row_radix_scatter.cpp +2 -2
  69. package/src/duckdb/src/common/row_operations/row_scatter.cpp +4 -4
  70. package/src/duckdb/src/common/serializer/binary_deserializer.cpp +1 -1
  71. package/src/duckdb/src/common/serializer/binary_serializer.cpp +3 -3
  72. package/src/duckdb/src/common/serializer.cpp +1 -1
  73. package/src/duckdb/src/common/sort/comparators.cpp +1 -1
  74. package/src/duckdb/src/common/sort/merge_sorter.cpp +7 -2
  75. package/src/duckdb/src/common/sort/partition_state.cpp +2 -2
  76. package/src/duckdb/src/common/types/bit.cpp +5 -5
  77. package/src/duckdb/src/common/types/blob.cpp +8 -8
  78. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +4 -4
  79. package/src/duckdb/src/common/types/column/column_data_collection.cpp +3 -3
  80. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +1 -1
  81. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  82. package/src/duckdb/src/common/types/hash.cpp +2 -2
  83. package/src/duckdb/src/common/types/hyperloglog.cpp +22 -21
  84. package/src/duckdb/src/common/types/list_segment.cpp +77 -49
  85. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +1 -1
  86. package/src/duckdb/src/common/types/row/row_data_collection_scanner.cpp +5 -4
  87. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +5 -3
  88. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +61 -24
  89. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  90. package/src/duckdb/src/common/types/value.cpp +3 -2
  91. package/src/duckdb/src/common/types/vector.cpp +98 -101
  92. package/src/duckdb/src/common/types/vector_cache.cpp +6 -6
  93. package/src/duckdb/src/common/types/vector_constants.cpp +2 -1
  94. package/src/duckdb/src/common/types.cpp +44 -33
  95. package/src/duckdb/src/common/vector_operations/boolean_operators.cpp +2 -2
  96. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +12 -12
  97. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +13 -11
  98. package/src/duckdb/src/common/vector_operations/vector_storage.cpp +1 -1
  99. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +30 -33
  100. package/src/duckdb/src/core_functions/aggregate/algebraic/covar.cpp +0 -4
  101. package/src/duckdb/src/core_functions/aggregate/distributive/approx_count.cpp +32 -36
  102. package/src/duckdb/src/core_functions/aggregate/distributive/arg_min_max.cpp +53 -66
  103. package/src/duckdb/src/core_functions/aggregate/distributive/bitagg.cpp +48 -48
  104. package/src/duckdb/src/core_functions/aggregate/distributive/bitstring_agg.cpp +44 -44
  105. package/src/duckdb/src/core_functions/aggregate/distributive/bool.cpp +32 -32
  106. package/src/duckdb/src/core_functions/aggregate/distributive/entropy.cpp +34 -34
  107. package/src/duckdb/src/core_functions/aggregate/distributive/kurtosis.cpp +30 -31
  108. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +91 -103
  109. package/src/duckdb/src/core_functions/aggregate/distributive/product.cpp +17 -17
  110. package/src/duckdb/src/core_functions/aggregate/distributive/skew.cpp +25 -27
  111. package/src/duckdb/src/core_functions/aggregate/distributive/string_agg.cpp +36 -37
  112. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +22 -22
  113. package/src/duckdb/src/core_functions/aggregate/holistic/approximate_quantile.cpp +48 -84
  114. package/src/duckdb/src/core_functions/aggregate/holistic/mode.cpp +49 -51
  115. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +97 -121
  116. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +62 -99
  117. package/src/duckdb/src/core_functions/aggregate/nested/histogram.cpp +24 -26
  118. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +22 -23
  119. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +16 -18
  120. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +22 -25
  121. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +19 -24
  122. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +18 -23
  123. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +14 -18
  124. package/src/duckdb/src/core_functions/function_list.cpp +1 -0
  125. package/src/duckdb/src/core_functions/scalar/blob/base64.cpp +1 -1
  126. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +45 -45
  127. package/src/duckdb/src/core_functions/scalar/date/strftime.cpp +2 -2
  128. package/src/duckdb/src/core_functions/scalar/generic/current_setting.cpp +1 -1
  129. package/src/duckdb/src/core_functions/scalar/generic/least.cpp +2 -2
  130. package/src/duckdb/src/core_functions/scalar/generic/stats.cpp +1 -1
  131. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +14 -0
  132. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +3 -3
  133. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +2 -4
  134. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +3 -3
  135. package/src/duckdb/src/core_functions/scalar/list/list_lambdas.cpp +6 -7
  136. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +1 -1
  137. package/src/duckdb/src/core_functions/scalar/map/cardinality.cpp +1 -1
  138. package/src/duckdb/src/core_functions/scalar/map/map.cpp +2 -2
  139. package/src/duckdb/src/core_functions/scalar/map/map_concat.cpp +4 -1
  140. package/src/duckdb/src/core_functions/scalar/map/map_extract.cpp +5 -9
  141. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -3
  142. package/src/duckdb/src/core_functions/scalar/string/starts_with.cpp +3 -2
  143. package/src/duckdb/src/core_functions/scalar/string/string_split.cpp +4 -4
  144. package/src/duckdb/src/core_functions/scalar/string/trim.cpp +1 -1
  145. package/src/duckdb/src/core_functions/scalar/union/union_extract.cpp +1 -1
  146. package/src/duckdb/src/execution/adaptive_filter.cpp +1 -1
  147. package/src/duckdb/src/execution/expression_executor/execute_case.cpp +10 -10
  148. package/src/duckdb/src/execution/expression_executor/execute_conjunction.cpp +7 -7
  149. package/src/duckdb/src/execution/expression_executor.cpp +28 -28
  150. package/src/duckdb/src/execution/index/art/art.cpp +30 -32
  151. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +3 -4
  152. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  153. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_inner.cpp +4 -4
  154. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +2 -2
  155. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +1 -1
  156. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +1 -1
  157. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +2 -2
  158. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +4 -4
  159. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +7 -5
  160. package/src/duckdb/src/execution/operator/filter/physical_filter.cpp +1 -1
  161. package/src/duckdb/src/execution/operator/helper/physical_reset.cpp +5 -2
  162. package/src/duckdb/src/execution/operator/helper/physical_set.cpp +5 -1
  163. package/src/duckdb/src/execution/operator/join/outer_join_marker.cpp +1 -1
  164. package/src/duckdb/src/execution/operator/join/perfect_hash_join_executor.cpp +1 -1
  165. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +2 -2
  166. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +4 -4
  167. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +3 -3
  168. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +3 -3
  169. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +3 -3
  170. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +1 -1
  171. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +2 -2
  172. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +2 -2
  173. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -3
  174. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  175. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -2
  176. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +1 -1
  177. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +3 -3
  178. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +2 -1
  179. package/src/duckdb/src/execution/operator/scan/physical_expression_scan.cpp +1 -1
  180. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +2 -2
  181. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +1 -1
  182. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +1 -1
  183. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +1 -1
  184. package/src/duckdb/src/execution/physical_plan/plan_create_table.cpp +1 -1
  185. package/src/duckdb/src/execution/physical_plan_generator.cpp +2 -2
  186. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -1
  187. package/src/duckdb/src/execution/reservoir_sample.cpp +2 -2
  188. package/src/duckdb/src/execution/window_segment_tree.cpp +8 -6
  189. package/src/duckdb/src/function/aggregate/distributive/count.cpp +158 -20
  190. package/src/duckdb/src/function/aggregate/distributive/first.cpp +66 -74
  191. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +13 -13
  192. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  193. package/src/duckdb/src/function/cast/decimal_cast.cpp +1 -1
  194. package/src/duckdb/src/function/cast/enum_casts.cpp +2 -2
  195. package/src/duckdb/src/function/cast/list_casts.cpp +2 -4
  196. package/src/duckdb/src/function/cast/string_cast.cpp +11 -11
  197. package/src/duckdb/src/function/cast/union_casts.cpp +2 -2
  198. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +3 -2
  199. package/src/duckdb/src/function/pragma/pragma_queries.cpp +33 -23
  200. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +1 -1
  201. package/src/duckdb/src/function/scalar/list/list_concat.cpp +2 -2
  202. package/src/duckdb/src/function/scalar/list/list_extract.cpp +3 -3
  203. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -3
  204. package/src/duckdb/src/function/scalar/string/concat.cpp +8 -7
  205. package/src/duckdb/src/function/scalar/string/contains.cpp +4 -4
  206. package/src/duckdb/src/function/scalar/string/like.cpp +5 -5
  207. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +4 -4
  208. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +6 -2
  209. package/src/duckdb/src/function/scalar/string/regexp.cpp +3 -3
  210. package/src/duckdb/src/function/scalar/string/strip_accents.cpp +1 -1
  211. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +1 -1
  212. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +25 -23
  213. package/src/duckdb/src/function/scalar_function.cpp +3 -3
  214. package/src/duckdb/src/function/table/arrow.cpp +6 -6
  215. package/src/duckdb/src/function/table/arrow_conversion.cpp +67 -61
  216. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  217. package/src/duckdb/src/function/table/copy_csv.cpp +11 -7
  218. package/src/duckdb/src/function/table/glob.cpp +1 -1
  219. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  220. package/src/duckdb/src/function/table/range.cpp +4 -4
  221. package/src/duckdb/src/function/table/read_csv.cpp +15 -20
  222. package/src/duckdb/src/function/table/repeat.cpp +2 -2
  223. package/src/duckdb/src/function/table/repeat_row.cpp +10 -3
  224. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +1 -1
  225. package/src/duckdb/src/function/table/system/test_vector_types.cpp +82 -26
  226. package/src/duckdb/src/function/table/table_scan.cpp +2 -2
  227. package/src/duckdb/src/function/table/unnest.cpp +1 -1
  228. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  229. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +2 -5
  230. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +2 -0
  231. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +6 -0
  232. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +2 -2
  233. package/src/duckdb/src/include/duckdb/catalog/catalog_search_path.hpp +8 -2
  234. package/src/duckdb/src/include/duckdb/catalog/default/builtin_types/types.hpp +97 -0
  235. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +5 -0
  236. package/src/duckdb/src/include/duckdb/common/allocator.hpp +15 -4
  237. package/src/duckdb/src/include/duckdb/common/arrow/arrow_buffer.hpp +7 -2
  238. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +2 -2
  239. package/src/duckdb/src/include/duckdb/common/exception.hpp +5 -2
  240. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +3 -3
  241. package/src/duckdb/src/include/duckdb/common/file_system.hpp +11 -0
  242. package/src/duckdb/src/include/duckdb/common/fsst.hpp +2 -3
  243. package/src/duckdb/src/include/duckdb/common/radix.hpp +3 -3
  244. package/src/duckdb/src/include/duckdb/common/serializer/binary_deserializer.hpp +1 -1
  245. package/src/duckdb/src/include/duckdb/common/serializer/binary_serializer.hpp +4 -1
  246. package/src/duckdb/src/include/duckdb/common/serializer.hpp +4 -4
  247. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +30 -0
  248. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +12 -0
  249. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +6 -2
  250. package/src/duckdb/src/include/duckdb/common/types/null_value.hpp +1 -1
  251. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +12 -0
  252. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +10 -10
  253. package/src/duckdb/src/include/duckdb/common/types/value.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +9 -0
  255. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +18 -6
  256. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +112 -76
  257. package/src/duckdb/src/include/duckdb/common/vector_operations/binary_executor.hpp +16 -15
  258. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +11 -11
  259. package/src/duckdb/src/include/duckdb/common/vector_operations/ternary_executor.hpp +23 -19
  260. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -3
  261. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +20 -24
  262. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +36 -39
  263. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/stddev.hpp +57 -53
  264. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +8 -9
  265. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +16 -18
  266. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +7 -8
  267. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +9 -0
  268. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +2 -6
  269. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +16 -36
  270. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +14 -2
  271. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -3
  272. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_result_collector.hpp +3 -0
  273. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_buffer.hpp +1 -1
  274. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +5 -2
  275. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +12 -12
  276. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +8 -29
  277. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +95 -0
  278. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +13 -2
  279. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +4 -4
  280. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +44 -0
  281. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +6 -6
  282. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  283. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +3 -1
  284. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +2 -2
  285. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +3 -3
  286. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  287. package/src/duckdb/src/include/duckdb/function/table_function.hpp +8 -7
  288. package/src/duckdb/src/include/duckdb/main/capi/cast/utils.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  290. package/src/duckdb/src/include/duckdb/main/materialized_query_result.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/main/pending_query_result.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/main/query_result.hpp +17 -0
  293. package/src/duckdb/src/include/duckdb/main/relation.hpp +12 -0
  294. package/src/duckdb/src/include/duckdb/main/settings.hpp +9 -0
  295. package/src/duckdb/src/include/duckdb/main/stream_query_result.hpp +3 -0
  296. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  297. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +6 -12
  298. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +2 -2
  299. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +1 -1
  300. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  301. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +1 -1
  302. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +1 -1
  303. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +1 -1
  305. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +1 -1
  307. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +1 -1
  309. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +1 -1
  316. package/src/duckdb/src/include/duckdb/parser/expression_map.hpp +1 -1
  317. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +2 -2
  318. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -1
  319. package/src/duckdb/src/include/duckdb/parser/parser.hpp +2 -0
  320. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -2
  321. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +36 -5
  322. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +7 -4
  323. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +1 -1
  324. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +1 -1
  325. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +1 -1
  327. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +1 -1
  329. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +4 -3
  332. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +107 -91
  333. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  334. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +2 -2
  335. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +2 -2
  336. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +34 -1
  337. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +2 -2
  338. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +1 -1
  339. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +1 -1
  345. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +1 -1
  348. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +1 -1
  350. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +1 -1
  351. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +1 -1
  352. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  353. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +1 -1
  355. package/src/duckdb/src/include/duckdb/planner/expression.hpp +5 -7
  356. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  357. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +6 -0
  358. package/src/duckdb/src/include/duckdb/planner/filter/constant_filter.hpp +3 -0
  359. package/src/duckdb/src/include/duckdb/planner/filter/null_filter.hpp +6 -0
  360. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +7 -2
  361. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +6 -2
  362. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +4 -0
  363. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +5 -1
  364. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +5 -1
  365. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +3 -0
  366. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +6 -2
  367. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +4 -0
  368. package/src/duckdb/src/include/duckdb/planner/table_binding.hpp +26 -0
  369. package/src/duckdb/src/include/duckdb/planner/table_filter.hpp +17 -0
  370. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +3 -0
  371. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +1 -1
  372. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  373. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +2 -2
  374. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  375. package/src/duckdb/src/include/duckdb/storage/index.hpp +2 -2
  376. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  377. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +12 -0
  378. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +1 -1
  379. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +25 -2
  380. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +12 -0
  381. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +22 -0
  382. package/src/duckdb/src/include/duckdb/transaction/duck_transaction_manager.hpp +2 -2
  383. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +2 -2
  384. package/src/duckdb/src/main/capi/appender-c.cpp +5 -5
  385. package/src/duckdb/src/main/capi/arrow-c.cpp +10 -10
  386. package/src/duckdb/src/main/capi/cast/from_decimal-c.cpp +1 -1
  387. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  388. package/src/duckdb/src/main/capi/config-c.cpp +1 -1
  389. package/src/duckdb/src/main/capi/data_chunk-c.cpp +17 -17
  390. package/src/duckdb/src/main/capi/duckdb-c.cpp +4 -4
  391. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +4 -4
  392. package/src/duckdb/src/main/capi/logical_types-c.cpp +22 -21
  393. package/src/duckdb/src/main/capi/pending-c.cpp +6 -6
  394. package/src/duckdb/src/main/capi/prepared-c.cpp +10 -10
  395. package/src/duckdb/src/main/capi/replacement_scan-c.cpp +6 -6
  396. package/src/duckdb/src/main/capi/result-c.cpp +23 -23
  397. package/src/duckdb/src/main/capi/table_function-c.cpp +1 -1
  398. package/src/duckdb/src/main/client_context.cpp +3 -3
  399. package/src/duckdb/src/main/config.cpp +1 -0
  400. package/src/duckdb/src/main/database_manager.cpp +1 -1
  401. package/src/duckdb/src/main/error_manager.cpp +1 -1
  402. package/src/duckdb/src/main/extension/extension_load.cpp +1 -1
  403. package/src/duckdb/src/main/relation/create_table_relation.cpp +1 -1
  404. package/src/duckdb/src/main/relation/create_view_relation.cpp +1 -1
  405. package/src/duckdb/src/main/relation/delete_relation.cpp +1 -1
  406. package/src/duckdb/src/main/relation/explain_relation.cpp +1 -1
  407. package/src/duckdb/src/main/relation/insert_relation.cpp +1 -1
  408. package/src/duckdb/src/main/relation/update_relation.cpp +1 -1
  409. package/src/duckdb/src/main/relation/write_csv_relation.cpp +1 -1
  410. package/src/duckdb/src/main/relation/write_parquet_relation.cpp +1 -1
  411. package/src/duckdb/src/main/relation.cpp +1 -1
  412. package/src/duckdb/src/main/settings/settings.cpp +22 -6
  413. package/src/duckdb/src/optimizer/deliminator.cpp +12 -12
  414. package/src/duckdb/src/optimizer/expression_heuristics.cpp +1 -0
  415. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -3
  416. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -10
  417. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +1 -1
  418. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  419. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -4
  420. package/src/duckdb/src/optimizer/rule/distributivity.cpp +2 -2
  421. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +6 -6
  422. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  423. package/src/duckdb/src/parallel/executor.cpp +1 -1
  424. package/src/duckdb/src/parser/base_expression.cpp +2 -5
  425. package/src/duckdb/src/parser/column_definition.cpp +5 -8
  426. package/src/duckdb/src/parser/expression/between_expression.cpp +4 -4
  427. package/src/duckdb/src/parser/expression/case_expression.cpp +6 -6
  428. package/src/duckdb/src/parser/expression/cast_expression.cpp +4 -4
  429. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -3
  430. package/src/duckdb/src/parser/expression/columnref_expression.cpp +4 -4
  431. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -3
  432. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +2 -2
  433. package/src/duckdb/src/parser/expression/constant_expression.cpp +2 -2
  434. package/src/duckdb/src/parser/expression/function_expression.cpp +10 -14
  435. package/src/duckdb/src/parser/expression/lambda_expression.cpp +2 -2
  436. package/src/duckdb/src/parser/expression/operator_expression.cpp +4 -4
  437. package/src/duckdb/src/parser/expression/parameter_expression.cpp +2 -2
  438. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +3 -3
  439. package/src/duckdb/src/parser/expression/star_expression.cpp +9 -9
  440. package/src/duckdb/src/parser/expression/subquery_expression.cpp +5 -5
  441. package/src/duckdb/src/parser/expression/window_expression.cpp +13 -24
  442. package/src/duckdb/src/parser/parsed_expression.cpp +34 -18
  443. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +4 -4
  444. package/src/duckdb/src/parser/parser.cpp +4 -4
  445. package/src/duckdb/src/parser/query_node/select_node.cpp +6 -13
  446. package/src/duckdb/src/parser/query_node.cpp +7 -6
  447. package/src/duckdb/src/parser/result_modifier.cpp +25 -18
  448. package/src/duckdb/src/parser/statement/select_statement.cpp +3 -3
  449. package/src/duckdb/src/parser/tableref/basetableref.cpp +4 -4
  450. package/src/duckdb/src/parser/tableref/emptytableref.cpp +1 -1
  451. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +5 -5
  452. package/src/duckdb/src/parser/tableref/joinref.cpp +6 -6
  453. package/src/duckdb/src/parser/tableref/pivotref.cpp +10 -15
  454. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -3
  455. package/src/duckdb/src/parser/tableref/table_function.cpp +3 -3
  456. package/src/duckdb/src/parser/tableref.cpp +12 -3
  457. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +7 -7
  458. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +4 -4
  459. package/src/duckdb/src/parser/transform/expression/transform_boolean_test.cpp +4 -4
  460. package/src/duckdb/src/parser/transform/expression/transform_case.cpp +8 -10
  461. package/src/duckdb/src/parser/transform/expression/transform_cast.cpp +7 -9
  462. package/src/duckdb/src/parser/transform/expression/transform_coalesce.cpp +3 -5
  463. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +22 -22
  464. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +2 -2
  465. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +42 -44
  466. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +70 -75
  467. package/src/duckdb/src/parser/transform/expression/transform_grouping_function.cpp +4 -4
  468. package/src/duckdb/src/parser/transform/expression/transform_interval.cpp +7 -7
  469. package/src/duckdb/src/parser/transform/expression/transform_is_null.cpp +4 -5
  470. package/src/duckdb/src/parser/transform/expression/transform_lambda.cpp +5 -6
  471. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +28 -29
  472. package/src/duckdb/src/parser/transform/expression/transform_param_ref.cpp +13 -14
  473. package/src/duckdb/src/parser/transform/expression/transform_positional_reference.cpp +4 -4
  474. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +9 -10
  475. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +28 -32
  476. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +18 -18
  477. package/src/duckdb/src/parser/transform/helpers/transform_sample.cpp +3 -3
  478. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +27 -26
  479. package/src/duckdb/src/parser/transform/statement/transform_alter_sequence.cpp +11 -14
  480. package/src/duckdb/src/parser/transform/statement/transform_alter_table.cpp +14 -16
  481. package/src/duckdb/src/parser/transform/statement/transform_attach.cpp +8 -9
  482. package/src/duckdb/src/parser/transform/statement/transform_call.cpp +2 -5
  483. package/src/duckdb/src/parser/transform/statement/transform_checkpoint.cpp +4 -6
  484. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +22 -23
  485. package/src/duckdb/src/parser/transform/statement/transform_create_database.cpp +3 -4
  486. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +14 -18
  487. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +13 -15
  488. package/src/duckdb/src/parser/transform/statement/transform_create_schema.cpp +8 -10
  489. package/src/duckdb/src/parser/transform/statement/transform_create_sequence.cpp +8 -10
  490. package/src/duckdb/src/parser/transform/statement/transform_create_table.cpp +26 -28
  491. package/src/duckdb/src/parser/transform/statement/transform_create_table_as.cpp +8 -10
  492. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +12 -15
  493. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +13 -18
  494. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +11 -13
  495. package/src/duckdb/src/parser/transform/statement/transform_detach.cpp +3 -4
  496. package/src/duckdb/src/parser/transform/statement/transform_drop.cpp +20 -22
  497. package/src/duckdb/src/parser/transform/statement/transform_explain.cpp +5 -7
  498. package/src/duckdb/src/parser/transform/statement/transform_export.cpp +5 -6
  499. package/src/duckdb/src/parser/transform/statement/transform_import.cpp +2 -3
  500. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +21 -24
  501. package/src/duckdb/src/parser/transform/statement/transform_load.cpp +4 -5
  502. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -7
  503. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +7 -9
  504. package/src/duckdb/src/parser/transform/statement/transform_prepare.cpp +11 -19
  505. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +12 -14
  506. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +12 -9
  507. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +34 -34
  508. package/src/duckdb/src/parser/transform/statement/transform_set.cpp +18 -19
  509. package/src/duckdb/src/parser/transform/statement/transform_show.cpp +5 -7
  510. package/src/duckdb/src/parser/transform/statement/transform_show_select.cpp +4 -5
  511. package/src/duckdb/src/parser/transform/statement/transform_transaction.cpp +3 -5
  512. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +10 -13
  513. package/src/duckdb/src/parser/transform/statement/transform_upsert.cpp +4 -4
  514. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +2 -3
  515. package/src/duckdb/src/parser/transform/statement/transform_vacuum.cpp +6 -10
  516. package/src/duckdb/src/parser/transform/tableref/transform_base_tableref.cpp +18 -18
  517. package/src/duckdb/src/parser/transform/tableref/transform_from.cpp +5 -5
  518. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +11 -11
  519. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +30 -27
  520. package/src/duckdb/src/parser/transform/tableref/transform_subquery.cpp +5 -5
  521. package/src/duckdb/src/parser/transform/tableref/transform_table_function.cpp +13 -12
  522. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +8 -8
  523. package/src/duckdb/src/parser/transformer.cpp +46 -46
  524. package/src/duckdb/src/planner/bind_context.cpp +9 -10
  525. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +1 -1
  526. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +1 -1
  527. package/src/duckdb/src/planner/binder/expression/bind_positional_reference_expression.cpp +8 -3
  528. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +1 -1
  529. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +6 -3
  530. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +8 -8
  531. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +4 -4
  532. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +1 -1
  533. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +18 -1
  534. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +2 -2
  535. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -114
  536. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +4 -2
  537. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +17 -7
  538. package/src/duckdb/src/planner/binder.cpp +1 -1
  539. package/src/duckdb/src/planner/bound_result_modifier.cpp +16 -11
  540. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +5 -5
  541. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  542. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +5 -5
  543. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +3 -3
  544. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  545. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +4 -4
  546. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  547. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  548. package/src/duckdb/src/planner/expression/bound_expression.cpp +1 -1
  549. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +3 -4
  550. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -5
  551. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  552. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +3 -4
  553. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +2 -2
  554. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  555. package/src/duckdb/src/planner/expression/bound_subquery_expression.cpp +1 -1
  556. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +3 -3
  557. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +8 -21
  558. package/src/duckdb/src/planner/expression.cpp +15 -0
  559. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +2 -2
  560. package/src/duckdb/src/planner/expression_binder.cpp +3 -2
  561. package/src/duckdb/src/planner/expression_iterator.cpp +2 -2
  562. package/src/duckdb/src/planner/filter/conjunction_filter.cpp +2 -2
  563. package/src/duckdb/src/planner/filter/constant_filter.cpp +1 -1
  564. package/src/duckdb/src/planner/logical_operator.cpp +3 -4
  565. package/src/duckdb/src/planner/logical_operator_visitor.cpp +1 -1
  566. package/src/duckdb/src/planner/planner.cpp +5 -15
  567. package/src/duckdb/src/planner/table_filter.cpp +1 -1
  568. package/src/duckdb/src/storage/arena_allocator.cpp +2 -2
  569. package/src/duckdb/src/storage/buffer/block_handle.cpp +1 -1
  570. package/src/duckdb/src/storage/checkpoint/write_overflow_strings_to_disk.cpp +2 -2
  571. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -3
  572. package/src/duckdb/src/storage/compression/bitpacking.cpp +8 -8
  573. package/src/duckdb/src/storage/compression/dictionary_compression.cpp +36 -36
  574. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +11 -11
  575. package/src/duckdb/src/storage/compression/fsst.cpp +34 -34
  576. package/src/duckdb/src/storage/compression/rle.cpp +8 -8
  577. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +13 -13
  578. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +11 -11
  579. package/src/duckdb/src/storage/data_table.cpp +8 -7
  580. package/src/duckdb/src/storage/index.cpp +1 -3
  581. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  582. package/src/duckdb/src/storage/magic_bytes.cpp +1 -1
  583. package/src/duckdb/src/storage/single_file_block_manager.cpp +3 -3
  584. package/src/duckdb/src/storage/standard_buffer_manager.cpp +3 -3
  585. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  586. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +1 -1
  587. package/src/duckdb/src/storage/statistics/string_stats.cpp +15 -14
  588. package/src/duckdb/src/storage/table/chunk_info.cpp +2 -2
  589. package/src/duckdb/src/storage/table/column_segment.cpp +3 -3
  590. package/src/duckdb/src/storage/table/list_column_data.cpp +3 -3
  591. package/src/duckdb/src/storage/table/row_group.cpp +4 -4
  592. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -1
  593. package/src/duckdb/src/storage/table/update_segment.cpp +12 -12
  594. package/src/duckdb/src/storage/wal_replay.cpp +5 -6
  595. package/src/duckdb/src/transaction/cleanup_state.cpp +3 -3
  596. package/src/duckdb/src/transaction/commit_state.cpp +8 -8
  597. package/src/duckdb/src/transaction/duck_transaction.cpp +9 -7
  598. package/src/duckdb/src/transaction/duck_transaction_manager.cpp +16 -16
  599. package/src/duckdb/src/transaction/rollback_state.cpp +3 -3
  600. package/src/duckdb/src/verification/prepared_statement_verifier.cpp +1 -1
  601. package/src/duckdb/src/verification/statement_verifier.cpp +3 -4
  602. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +2 -2
  603. package/src/duckdb/third_party/pcg/pcg_extras.hpp +1 -1
  604. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
@@ -5,14 +5,17 @@
5
5
  #include "duckdb/common/string_util.hpp"
6
6
 
7
7
  #include "duckdb.h"
8
- #include "duckdb/main/connection.hpp"
9
8
  #include "duckdb/common/arrow/arrow_wrapper.hpp"
10
9
  #include "duckdb/common/arrow/arrow.hpp"
11
10
 
11
+ #ifndef DUCKDB_AMALGAMATION
12
+ #include "duckdb/main/connection.hpp"
13
+ #endif
14
+
12
15
  #include <string.h>
13
16
  #include <stdlib.h>
14
17
 
15
- // We gotta leak the symbols of the init function
18
+ // We must leak the symbols of the init function
16
19
  duckdb_adbc::AdbcStatusCode duckdb_adbc_init(size_t count, struct duckdb_adbc::AdbcDriver *driver,
17
20
  struct duckdb_adbc::AdbcError *error) {
18
21
  if (!driver) {
@@ -37,27 +40,24 @@ duckdb_adbc::AdbcStatusCode duckdb_adbc_init(size_t count, struct duckdb_adbc::A
37
40
  driver->StatementSetOption = duckdb_adbc::StatementSetOption;
38
41
  driver->StatementSetSqlQuery = duckdb_adbc::StatementSetSqlQuery;
39
42
  driver->ConnectionGetObjects = duckdb_adbc::ConnectionGetObjects;
43
+ driver->ConnectionCommit = duckdb_adbc::ConnectionCommit;
44
+ driver->ConnectionRollback = duckdb_adbc::ConnectionRollback;
45
+ driver->ConnectionReadPartition = duckdb_adbc::ConnectionReadPartition;
46
+ driver->StatementExecutePartitions = duckdb_adbc::StatementExecutePartitions;
40
47
  return ADBC_STATUS_OK;
41
48
  }
42
49
 
43
50
  namespace duckdb_adbc {
44
- #define CHECK_TRUE(p, e, m) \
45
- if (!(p)) { \
46
- if (e) { \
47
- e->message = strdup(m); /* TODO Set cleanup callback */ \
48
- } \
49
- return ADBC_STATUS_INVALID_ARGUMENT; \
51
+ AdbcStatusCode SetErrorMaybe(const void *result, AdbcError *error, const std::string &error_message) {
52
+ if (!error) {
53
+ return ADBC_STATUS_INVALID_ARGUMENT;
50
54
  }
51
-
52
- #define CHECK_RES(res, e, m) \
53
- if (res != DuckDBSuccess) { \
54
- if (e) { \
55
- e->message = strdup(m); \
56
- } \
57
- return ADBC_STATUS_INTERNAL; \
58
- } else { \
59
- return ADBC_STATUS_OK; \
55
+ if (!result) {
56
+ SetError(error, error_message);
57
+ return ADBC_STATUS_INVALID_ARGUMENT;
60
58
  }
59
+ return ADBC_STATUS_OK;
60
+ }
61
61
 
62
62
  struct DuckDBAdbcDatabaseWrapper {
63
63
  //! The DuckDB Database Configuration
@@ -68,25 +68,58 @@ struct DuckDBAdbcDatabaseWrapper {
68
68
  std::string path;
69
69
  };
70
70
 
71
- AdbcStatusCode DatabaseNew(struct AdbcDatabase *database, struct AdbcError *error) {
72
- CHECK_TRUE(database, error, "Missing database object");
71
+ void InitiliazeADBCError(AdbcError *error) {
72
+ if (!error) {
73
+ return;
74
+ }
75
+ error->message = nullptr;
76
+ error->release = nullptr;
77
+ std::memset(error->sqlstate, '\0', sizeof(error->sqlstate));
78
+ error->vendor_code = -1;
79
+ }
73
80
 
81
+ AdbcStatusCode CheckResult(duckdb_state &res, AdbcError *error, const char *error_msg) {
82
+ if (!error) {
83
+ // Error should be a non-null pointer
84
+ return ADBC_STATUS_INVALID_ARGUMENT;
85
+ }
86
+ if (res != DuckDBSuccess) {
87
+ duckdb_adbc::SetError(error, error_msg);
88
+ return ADBC_STATUS_INTERNAL;
89
+ }
90
+ return ADBC_STATUS_OK;
91
+ }
92
+
93
+ AdbcStatusCode DatabaseNew(struct AdbcDatabase *database, struct AdbcError *error) {
94
+ auto status = SetErrorMaybe(database, error, "Missing database object");
95
+ if (status != ADBC_STATUS_OK) {
96
+ return status;
97
+ }
74
98
  database->private_data = nullptr;
75
99
  // you can't malloc a struct with a non-trivial C++ constructor
76
100
  // and std::string has a non-trivial constructor. so we need
77
101
  // to use new and delete rather than malloc and free.
78
102
  auto wrapper = new DuckDBAdbcDatabaseWrapper;
79
- CHECK_TRUE(wrapper, error, "Allocation error");
80
-
103
+ status = SetErrorMaybe(wrapper, error, "Allocation error");
104
+ if (status != ADBC_STATUS_OK) {
105
+ return status;
106
+ }
81
107
  database->private_data = wrapper;
82
108
  auto res = duckdb_create_config(&wrapper->config);
83
- CHECK_RES(res, error, "Failed to allocate");
109
+ return CheckResult(res, error, "Failed to allocate");
84
110
  }
85
111
 
86
112
  AdbcStatusCode DatabaseSetOption(struct AdbcDatabase *database, const char *key, const char *value,
87
113
  struct AdbcError *error) {
88
- CHECK_TRUE(database, error, "Missing database object");
89
- CHECK_TRUE(key, error, "Missing key");
114
+ auto status = SetErrorMaybe(database, error, "Missing database object");
115
+ if (status != ADBC_STATUS_OK) {
116
+ return status;
117
+ }
118
+
119
+ status = SetErrorMaybe(key, error, "Missing key");
120
+ if (status != ADBC_STATUS_OK) {
121
+ return status;
122
+ }
90
123
 
91
124
  auto wrapper = (DuckDBAdbcDatabaseWrapper *)database->private_data;
92
125
  if (strcmp(key, "path") == 0) {
@@ -95,17 +128,22 @@ AdbcStatusCode DatabaseSetOption(struct AdbcDatabase *database, const char *key,
95
128
  }
96
129
  auto res = duckdb_set_config(wrapper->config, key, value);
97
130
 
98
- CHECK_RES(res, error, "Failed to set configuration option");
131
+ return CheckResult(res, error, "Failed to set configuration option");
99
132
  }
100
133
 
101
134
  AdbcStatusCode DatabaseInit(struct AdbcDatabase *database, struct AdbcError *error) {
135
+ if (!error) {
136
+ return ADBC_STATUS_INVALID_ARGUMENT;
137
+ }
138
+ if (!database) {
139
+ duckdb_adbc::SetError(error, "ADBC Database has an invalid pointer");
140
+ return ADBC_STATUS_INVALID_ARGUMENT;
141
+ }
102
142
  char *errormsg;
103
143
  // TODO can we set the database path via option, too? Does not look like it...
104
144
  auto wrapper = (DuckDBAdbcDatabaseWrapper *)database->private_data;
105
145
  auto res = duckdb_open_ext(wrapper->path.c_str(), &wrapper->database, wrapper->config, &errormsg);
106
-
107
- // TODO this leaks memory because errormsg is malloc-ed
108
- CHECK_RES(res, error, errormsg);
146
+ return CheckResult(res, error, errormsg);
109
147
  }
110
148
 
111
149
  AdbcStatusCode DatabaseRelease(struct AdbcDatabase *database, struct AdbcError *error) {
@@ -122,28 +160,134 @@ AdbcStatusCode DatabaseRelease(struct AdbcDatabase *database, struct AdbcError *
122
160
  }
123
161
 
124
162
  AdbcStatusCode ConnectionNew(struct AdbcConnection *connection, struct AdbcError *error) {
163
+ auto status = SetErrorMaybe(connection, error, "Missing connection object");
164
+ if (status != ADBC_STATUS_OK) {
165
+ return status;
166
+ }
125
167
 
126
- CHECK_TRUE(connection, error, "Missing connection object");
127
168
  connection->private_data = nullptr;
128
169
  return ADBC_STATUS_OK;
129
170
  }
130
171
 
172
+ AdbcStatusCode ExecuteQuery(duckdb::Connection *conn, const char *query, struct AdbcError *error) {
173
+ auto res = conn->Query(query);
174
+ if (res->HasError()) {
175
+ auto error_message = "Failed to execute query \"" + std::string(query) + "\": " + res->GetError();
176
+ SetError(error, error_message);
177
+ return ADBC_STATUS_INTERNAL;
178
+ }
179
+ return ADBC_STATUS_OK;
180
+ }
181
+
131
182
  AdbcStatusCode ConnectionSetOption(struct AdbcConnection *connection, const char *key, const char *value,
132
183
  struct AdbcError *error) {
133
- // there are no connection-level options that need to be set before connecting
134
- return ADBC_STATUS_OK;
184
+ if (!connection) {
185
+ SetError(error, "Connection is not set");
186
+ return ADBC_STATUS_INVALID_ARGUMENT;
187
+ }
188
+ auto conn = (duckdb::Connection *)connection->private_data;
189
+ if (strcmp(key, ADBC_CONNECTION_OPTION_AUTOCOMMIT) == 0) {
190
+ if (strcmp(value, ADBC_OPTION_VALUE_ENABLED) == 0) {
191
+ if (conn->HasActiveTransaction()) {
192
+ AdbcStatusCode status = ExecuteQuery(conn, "COMMIT", error);
193
+ if (status != ADBC_STATUS_OK) {
194
+ return status;
195
+ }
196
+ } else {
197
+ // no-op
198
+ }
199
+ } else if (strcmp(value, ADBC_OPTION_VALUE_DISABLED) == 0) {
200
+ if (conn->HasActiveTransaction()) {
201
+ // no-op
202
+ } else {
203
+ // begin
204
+ AdbcStatusCode status = ExecuteQuery(conn, "START TRANSACTION", error);
205
+ if (status != ADBC_STATUS_OK) {
206
+ return status;
207
+ }
208
+ }
209
+ } else {
210
+ auto error_message = "Invalid connection option value " + std::string(key) + "=" + std::string(value);
211
+ SetError(error, error_message);
212
+ return ADBC_STATUS_INVALID_ARGUMENT;
213
+ }
214
+ return ADBC_STATUS_OK;
215
+ }
216
+ auto error_message =
217
+ "Unknown connection option " + std::string(key) + "=" + (value ? std::string(value) : "(NULL)");
218
+ SetError(error, error_message);
219
+ return ADBC_STATUS_NOT_IMPLEMENTED;
220
+ }
221
+
222
+ AdbcStatusCode ConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition,
223
+ size_t serialized_length, struct ArrowArrayStream *out,
224
+ struct AdbcError *error) {
225
+ SetError(error, "Read Partitions are not supported in DuckDB");
226
+ return ADBC_STATUS_NOT_IMPLEMENTED;
227
+ }
228
+
229
+ AdbcStatusCode StatementExecutePartitions(struct AdbcStatement *statement, struct ArrowSchema *schema,
230
+ struct AdbcPartitions *partitions, int64_t *rows_affected,
231
+ struct AdbcError *error) {
232
+ SetError(error, "Execute Partitions are not supported in DuckDB");
233
+ return ADBC_STATUS_NOT_IMPLEMENTED;
234
+ }
235
+
236
+ AdbcStatusCode ConnectionCommit(struct AdbcConnection *connection, struct AdbcError *error) {
237
+ if (!connection) {
238
+ SetError(error, "Connection is not set");
239
+ return ADBC_STATUS_INVALID_ARGUMENT;
240
+ }
241
+ auto conn = (duckdb::Connection *)connection->private_data;
242
+ if (!conn->HasActiveTransaction()) {
243
+ SetError(error, "No active transaction, cannot commit");
244
+ return ADBC_STATUS_INVALID_STATE;
245
+ }
246
+
247
+ AdbcStatusCode status = ExecuteQuery(conn, "COMMIT", error);
248
+ if (status != ADBC_STATUS_OK) {
249
+ return status;
250
+ }
251
+ return ExecuteQuery(conn, "START TRANSACTION", error);
252
+ }
253
+
254
+ AdbcStatusCode ConnectionRollback(struct AdbcConnection *connection, struct AdbcError *error) {
255
+ if (!connection) {
256
+ SetError(error, "Connection is not set");
257
+ return ADBC_STATUS_INVALID_ARGUMENT;
258
+ }
259
+ auto conn = (duckdb::Connection *)connection->private_data;
260
+ if (!conn->HasActiveTransaction()) {
261
+ SetError(error, "No active transaction, cannot rollback");
262
+ return ADBC_STATUS_INVALID_STATE;
263
+ }
264
+
265
+ AdbcStatusCode status = ExecuteQuery(conn, "ROLLBACK", error);
266
+ if (status != ADBC_STATUS_OK) {
267
+ return status;
268
+ }
269
+ return ExecuteQuery(conn, "START TRANSACTION", error);
135
270
  }
136
271
 
137
272
  AdbcStatusCode ConnectionInit(struct AdbcConnection *connection, struct AdbcDatabase *database,
138
273
  struct AdbcError *error) {
139
- CHECK_TRUE(database, error, "Missing database");
140
- CHECK_TRUE(database->private_data, error, "Invalid database");
141
- CHECK_TRUE(connection, error, "Missing connection");
274
+ auto status = SetErrorMaybe(database, error, "Missing database");
275
+ if (status != ADBC_STATUS_OK) {
276
+ return status;
277
+ }
278
+ status = SetErrorMaybe(database->private_data, error, "Invalid database");
279
+ if (status != ADBC_STATUS_OK) {
280
+ return status;
281
+ }
282
+ status = SetErrorMaybe(connection, error, "Missing connection");
283
+ if (status != ADBC_STATUS_OK) {
284
+ return status;
285
+ }
142
286
  auto database_wrapper = (DuckDBAdbcDatabaseWrapper *)database->private_data;
143
287
 
144
288
  connection->private_data = nullptr;
145
289
  auto res = duckdb_connect(database_wrapper->database, (duckdb_connection *)&connection->private_data);
146
- CHECK_RES(res, error, "Failed to connect to Database");
290
+ return CheckResult(res, error, "Failed to connect to Database");
147
291
  }
148
292
 
149
293
  AdbcStatusCode ConnectionRelease(struct AdbcConnection *connection, struct AdbcError *error) {
@@ -176,11 +320,11 @@ void release(struct ArrowArrayStream *stream) {
176
320
  if (!stream || !stream->release) {
177
321
  return;
178
322
  }
179
- stream->release = nullptr;
180
323
  if (stream->private_data) {
181
324
  duckdb_destroy_arrow((duckdb_arrow *)&stream->private_data);
182
325
  stream->private_data = nullptr;
183
326
  }
327
+ stream->release = nullptr;
184
328
  }
185
329
 
186
330
  const char *get_last_error(struct ArrowArrayStream *stream) {
@@ -213,19 +357,35 @@ void stream_schema(uintptr_t factory_ptr, duckdb::ArrowSchemaWrapper &schema) {
213
357
  AdbcStatusCode Ingest(duckdb_connection connection, const char *table_name, struct ArrowArrayStream *input,
214
358
  struct AdbcError *error) {
215
359
 
216
- CHECK_TRUE(connection, error, "Invalid connection");
217
- CHECK_TRUE(input, error, "Missing input arrow stream pointer");
218
- CHECK_TRUE(table_name, error, "Missing database object name");
360
+ auto status = SetErrorMaybe(connection, error, "Invalid connection");
361
+ if (status != ADBC_STATUS_OK) {
362
+ return status;
363
+ }
364
+
365
+ status = SetErrorMaybe(input, error, "Missing input arrow stream pointer");
366
+ if (status != ADBC_STATUS_OK) {
367
+ return status;
368
+ }
219
369
 
370
+ status = SetErrorMaybe(table_name, error, "Missing database object name");
371
+ if (status != ADBC_STATUS_OK) {
372
+ return status;
373
+ }
374
+ auto cconn = (duckdb::Connection *)connection;
375
+
376
+ auto has_table = cconn->TableInfo(table_name);
377
+ auto arrow_scan = cconn->TableFunction("arrow_scan", {duckdb::Value::POINTER((uintptr_t)input),
378
+ duckdb::Value::POINTER((uintptr_t)stream_produce),
379
+ duckdb::Value::POINTER((uintptr_t)get_schema)});
220
380
  try {
221
- // TODO evil cast, do we need a way to do this from the C api?
222
- auto cconn = (duckdb::Connection *)connection;
223
- cconn
224
- ->TableFunction("arrow_scan",
225
- {duckdb::Value::POINTER((uintptr_t)input),
226
- duckdb::Value::POINTER((uintptr_t)stream_produce),
227
- duckdb::Value::POINTER((uintptr_t)get_schema)}) // TODO make this a parameter somewhere
228
- ->Create(table_name); // TODO this should probably be a temp table
381
+ if (!has_table) {
382
+ // We create the table based on an Arrow Scanner
383
+ arrow_scan->Create(table_name);
384
+ } else {
385
+ arrow_scan->CreateView("temp_adbc_view", true, true);
386
+ auto query = "insert into " + std::string(table_name) + " select * from temp_adbc_view";
387
+ auto result = cconn->Query(query);
388
+ }
229
389
  // After creating a table, the arrow array stream is released. Hence we must set it as released to avoid
230
390
  // double-releasing it
231
391
  input->release = nullptr;
@@ -251,14 +411,28 @@ struct DuckDBAdbcStatementWrapper {
251
411
  AdbcStatusCode StatementNew(struct AdbcConnection *connection, struct AdbcStatement *statement,
252
412
  struct AdbcError *error) {
253
413
 
254
- CHECK_TRUE(connection, error, "Missing connection object");
255
- CHECK_TRUE(connection->private_data, error, "Invalid connection object");
256
- CHECK_TRUE(statement, error, "Missing statement object");
414
+ auto status = SetErrorMaybe(connection, error, "Missing connection object");
415
+ if (status != ADBC_STATUS_OK) {
416
+ return status;
417
+ }
418
+
419
+ status = SetErrorMaybe(connection->private_data, error, "Invalid connection object");
420
+ if (status != ADBC_STATUS_OK) {
421
+ return status;
422
+ }
423
+
424
+ status = SetErrorMaybe(statement, error, "Missing statement object");
425
+ if (status != ADBC_STATUS_OK) {
426
+ return status;
427
+ }
257
428
 
258
429
  statement->private_data = nullptr;
259
430
 
260
431
  auto statement_wrapper = (DuckDBAdbcStatementWrapper *)malloc(sizeof(DuckDBAdbcStatementWrapper));
261
- CHECK_TRUE(statement_wrapper, error, "Allocation error");
432
+ status = SetErrorMaybe(statement_wrapper, error, "Allocation error");
433
+ if (status != ADBC_STATUS_OK) {
434
+ return status;
435
+ }
262
436
 
263
437
  statement->private_data = statement_wrapper;
264
438
  statement_wrapper->connection = (duckdb_connection)connection->private_data;
@@ -298,8 +472,16 @@ AdbcStatusCode StatementRelease(struct AdbcStatement *statement, struct AdbcErro
298
472
 
299
473
  AdbcStatusCode StatementExecuteQuery(struct AdbcStatement *statement, struct ArrowArrayStream *out,
300
474
  int64_t *rows_affected, struct AdbcError *error) {
301
- CHECK_TRUE(statement, error, "Missing statement object");
302
- CHECK_TRUE(statement->private_data, error, "Invalid statement object");
475
+ auto status = SetErrorMaybe(statement, error, "Missing statement object");
476
+ if (status != ADBC_STATUS_OK) {
477
+ return status;
478
+ }
479
+
480
+ status = SetErrorMaybe(statement->private_data, error, "Invalid statement object");
481
+ if (status != ADBC_STATUS_OK) {
482
+ return status;
483
+ }
484
+
303
485
  auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
304
486
 
305
487
  // TODO: Set affected rows, careful with early return
@@ -314,7 +496,10 @@ AdbcStatusCode StatementExecuteQuery(struct AdbcStatement *statement, struct Arr
314
496
  }
315
497
 
316
498
  auto res = duckdb_execute_prepared_arrow(wrapper->statement, &wrapper->result);
317
- CHECK_TRUE(res == DuckDBSuccess, error, duckdb_query_arrow_error(wrapper->result));
499
+ if (res != DuckDBSuccess) {
500
+ SetError(error, duckdb_query_arrow_error(wrapper->result));
501
+ return ADBC_STATUS_INVALID_ARGUMENT;
502
+ }
318
503
 
319
504
  if (out) {
320
505
  out->private_data = wrapper->result;
@@ -333,25 +518,45 @@ AdbcStatusCode StatementExecuteQuery(struct AdbcStatement *statement, struct Arr
333
518
 
334
519
  // this is a nop for us
335
520
  AdbcStatusCode StatementPrepare(struct AdbcStatement *statement, struct AdbcError *error) {
336
- CHECK_TRUE(statement, error, "Missing statement object");
337
- CHECK_TRUE(statement->private_data, error, "Invalid statement object");
521
+ auto status = SetErrorMaybe(statement, error, "Missing statement object");
522
+ if (status != ADBC_STATUS_OK) {
523
+ return status;
524
+ }
525
+
526
+ status = SetErrorMaybe(statement->private_data, error, "Invalid statement object");
527
+ if (status != ADBC_STATUS_OK) {
528
+ return status;
529
+ }
530
+
338
531
  return ADBC_STATUS_OK;
339
532
  }
340
533
 
341
534
  AdbcStatusCode StatementSetSqlQuery(struct AdbcStatement *statement, const char *query, struct AdbcError *error) {
342
- CHECK_TRUE(statement, error, "Missing statement object");
343
- CHECK_TRUE(query, error, "Missing query");
535
+ auto status = SetErrorMaybe(statement, error, "Missing statement object");
536
+ if (status != ADBC_STATUS_OK) {
537
+ return status;
538
+ }
539
+ status = SetErrorMaybe(query, error, "Missing query");
540
+ if (status != ADBC_STATUS_OK) {
541
+ return status;
542
+ }
344
543
 
345
544
  auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
346
545
  auto res = duckdb_prepare(wrapper->connection, query, &wrapper->statement);
347
-
348
- CHECK_RES(res, error, duckdb_prepare_error(wrapper->statement));
546
+ auto error_msg = duckdb_prepare_error(wrapper->statement);
547
+ return CheckResult(res, error, error_msg);
349
548
  }
350
549
 
351
550
  AdbcStatusCode StatementBindStream(struct AdbcStatement *statement, struct ArrowArrayStream *values,
352
551
  struct AdbcError *error) {
353
- CHECK_TRUE(statement, error, "Missing statement object");
354
- CHECK_TRUE(values, error, "Missing stream object");
552
+ auto status = SetErrorMaybe(statement, error, "Missing statement object");
553
+ if (status != ADBC_STATUS_OK) {
554
+ return status;
555
+ }
556
+ status = SetErrorMaybe(values, error, "Missing stream object");
557
+ if (status != ADBC_STATUS_OK) {
558
+ return status;
559
+ }
355
560
  auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
356
561
  wrapper->ingestion_stream = values;
357
562
  return ADBC_STATUS_OK;
@@ -359,8 +564,14 @@ AdbcStatusCode StatementBindStream(struct AdbcStatement *statement, struct Arrow
359
564
 
360
565
  AdbcStatusCode StatementSetOption(struct AdbcStatement *statement, const char *key, const char *value,
361
566
  struct AdbcError *error) {
362
- CHECK_TRUE(statement, error, "Missing statement object");
363
- CHECK_TRUE(key, error, "Missing key object");
567
+ auto status = SetErrorMaybe(statement, error, "Missing statement object");
568
+ if (status != ADBC_STATUS_OK) {
569
+ return status;
570
+ }
571
+ status = SetErrorMaybe(key, error, "Missing key object");
572
+ if (status != ADBC_STATUS_OK) {
573
+ return status;
574
+ }
364
575
  auto wrapper = (DuckDBAdbcStatementWrapper *)statement->private_data;
365
576
 
366
577
  if (strcmp(key, ADBC_INGEST_OPTION_TARGET_TABLE) == 0) {
@@ -372,17 +583,23 @@ AdbcStatusCode StatementSetOption(struct AdbcStatement *statement, const char *k
372
583
 
373
584
  static AdbcStatusCode QueryInternal(struct AdbcConnection *connection, struct ArrowArrayStream *out, const char *query,
374
585
  struct AdbcError *error) {
375
- AdbcStatusCode res;
376
586
  AdbcStatement statement;
377
587
 
378
- res = StatementNew(connection, &statement, error);
379
- CHECK_TRUE(!res, error, "unable to initialize statement");
380
-
381
- res = StatementSetSqlQuery(&statement, query, error);
382
- CHECK_TRUE(!res, error, "unable to initialize statement");
383
-
384
- res = StatementExecuteQuery(&statement, out, NULL, error);
385
- CHECK_TRUE(!res, error, "unable to execute statement");
588
+ auto status = StatementNew(connection, &statement, error);
589
+ if (status != ADBC_STATUS_OK) {
590
+ SetError(error, "unable to initialize statement");
591
+ return status;
592
+ }
593
+ status = StatementSetSqlQuery(&statement, query, error);
594
+ if (status != ADBC_STATUS_OK) {
595
+ SetError(error, "unable to initialize statement");
596
+ return status;
597
+ }
598
+ status = StatementExecuteQuery(&statement, out, nullptr, error);
599
+ if (status != ADBC_STATUS_OK) {
600
+ SetError(error, "unable to initialize statement");
601
+ return status;
602
+ }
386
603
 
387
604
  return ADBC_STATUS_OK;
388
605
  }
@@ -390,8 +607,17 @@ static AdbcStatusCode QueryInternal(struct AdbcConnection *connection, struct Ar
390
607
  AdbcStatusCode ConnectionGetObjects(struct AdbcConnection *connection, int depth, const char *catalog,
391
608
  const char *db_schema, const char *table_name, const char **table_type,
392
609
  const char *column_name, struct ArrowArrayStream *out, struct AdbcError *error) {
393
- CHECK_TRUE(catalog == nullptr || strcmp(catalog, "duckdb") == 0, error, "catalog must be NULL or 'duckdb'");
394
- CHECK_TRUE(table_type == nullptr, error, "table types parameter not yet supported");
610
+ if (catalog != nullptr) {
611
+ if (strcmp(catalog, "duckdb") == 0) {
612
+ SetError(error, "catalog must be NULL or 'duckdb'");
613
+ return ADBC_STATUS_INVALID_ARGUMENT;
614
+ }
615
+ }
616
+
617
+ if (table_type != nullptr) {
618
+ SetError(error, "Table types parameter not yet supported");
619
+ return ADBC_STATUS_NOT_IMPLEMENTED;
620
+ }
395
621
 
396
622
  auto q = duckdb::StringUtil::Format(R"(
397
623
  SELECT table_schema db_schema_name, LIST(table_schema_list) db_schema_tables FROM (
@@ -404,41 +630,10 @@ SELECT table_schema db_schema_name, LIST(table_schema_list) db_schema_tables FRO
404
630
  return QueryInternal(connection, out, q.c_str(), error);
405
631
  }
406
632
 
407
- //
408
- // AdbcStatusCode ConnectionGetCatalogs(struct AdbcConnection *connection, struct AdbcStatement *statement,
409
- // struct AdbcError *error) {
410
- // const char *q = "SELECT 'duckdb' catalog_name";
411
- //
412
- // return QueryInternal(connection, statement, q, error);
413
- //}
414
- //
415
- // AdbcStatusCode ConnectionGetDbSchemas(struct AdbcConnection *connection, struct AdbcStatement *statement,
416
- // struct AdbcError *error) {
417
- // const char *q = "SELECT 'duckdb' catalog_name, schema_name db_schema_name FROM information_schema.schemata ORDER "
418
- // "BY schema_name";
419
- // return QueryInternal(connection, statement, q, error);
420
- //}
421
633
  AdbcStatusCode ConnectionGetTableTypes(struct AdbcConnection *connection, struct ArrowArrayStream *out,
422
634
  struct AdbcError *error) {
423
635
  const char *q = "SELECT DISTINCT table_type FROM information_schema.tables ORDER BY table_type";
424
636
  return QueryInternal(connection, out, q, error);
425
637
  }
426
- //
427
- // AdbcStatusCode ConnectionGetTables(struct AdbcConnection *connection, const char *catalog, const char *db_schema,
428
- // const char *table_name, const char **table_types,
429
- // struct AdbcStatement *statement, struct AdbcError *error) {
430
- //
431
- // CHECK_TRUE(catalog == nullptr || strcmp(catalog, "duckdb") == 0, error, "catalog must be NULL or 'duckdb'");
432
- //
433
- // // let's wait for https://github.com/lidavidm/arrow/issues/6
434
- // CHECK_TRUE(table_types == nullptr, error, "table types parameter not yet supported");
435
- // auto q = duckdb::StringUtil::Format(
436
- // "SELECT 'duckdb' catalog_name, table_schema db_schema_name, table_name, table_type FROM "
437
- // "information_schema.tables WHERE table_schema LIKE '%s' AND table_name LIKE '%s' ORDER BY table_schema, "
438
- // "table_name",
439
- // db_schema ? db_schema : "%", table_name ? table_name : "%");
440
- //
441
- // return QueryInternal(connection, statement, q.c_str(), error);
442
- //}
443
638
 
444
639
  } // namespace duckdb_adbc
@@ -61,16 +61,18 @@ void GetWinError(std::string *buffer) {
61
61
 
62
62
  void ReleaseError(struct AdbcError *error) {
63
63
  if (error) {
64
- if (error->message)
64
+ if (error->message) {
65
65
  delete[] error->message;
66
+ }
66
67
  error->message = nullptr;
67
68
  error->release = nullptr;
68
69
  }
69
70
  }
70
71
 
71
72
  void SetError(struct AdbcError *error, const std::string &message) {
72
- if (!error)
73
+ if (!error) {
73
74
  return;
75
+ }
74
76
  if (error->message) {
75
77
  // Append
76
78
  std::string buffer = error->message;
@@ -131,10 +133,6 @@ static AdbcStatusCode ReleaseDriver(struct AdbcDriver *driver, struct AdbcError
131
133
 
132
134
  // Default stubs
133
135
 
134
- AdbcStatusCode ConnectionCommit(struct AdbcConnection *, struct AdbcError *error) {
135
- return ADBC_STATUS_NOT_IMPLEMENTED;
136
- }
137
-
138
136
  AdbcStatusCode ConnectionGetInfo(struct AdbcConnection *connection, uint32_t *info_codes, size_t info_codes_length,
139
137
  struct ArrowArrayStream *out, struct AdbcError *error) {
140
138
  return ADBC_STATUS_NOT_IMPLEMENTED;
@@ -145,27 +143,11 @@ AdbcStatusCode ConnectionGetTableSchema(struct AdbcConnection *, const char *, c
145
143
  return ADBC_STATUS_NOT_IMPLEMENTED;
146
144
  }
147
145
 
148
- AdbcStatusCode ConnectionReadPartition(struct AdbcConnection *connection, const uint8_t *serialized_partition,
149
- size_t serialized_length, struct ArrowArrayStream *out,
150
- struct AdbcError *error) {
151
- return ADBC_STATUS_NOT_IMPLEMENTED;
152
- }
153
-
154
- AdbcStatusCode ConnectionRollback(struct AdbcConnection *, struct AdbcError *error) {
155
- return ADBC_STATUS_NOT_IMPLEMENTED;
156
- }
157
-
158
146
  AdbcStatusCode StatementBind(struct AdbcStatement *, struct ArrowArray *, struct ArrowSchema *,
159
147
  struct AdbcError *error) {
160
148
  return ADBC_STATUS_NOT_IMPLEMENTED;
161
149
  }
162
150
 
163
- AdbcStatusCode StatementExecutePartitions(struct AdbcStatement *statement, struct ArrowSchema *schema,
164
- struct AdbcPartitions *partitions, int64_t *rows_affected,
165
- struct AdbcError *error) {
166
- return ADBC_STATUS_NOT_IMPLEMENTED;
167
- }
168
-
169
151
  AdbcStatusCode StatementGetParameterSchema(struct AdbcStatement *statement, struct ArrowSchema *schema,
170
152
  struct AdbcError *error) {
171
153
  return ADBC_STATUS_NOT_IMPLEMENTED;
@@ -466,6 +448,9 @@ AdbcStatusCode AdbcStatementExecutePartitions(struct AdbcStatement *statement, A
466
448
 
467
449
  AdbcStatusCode AdbcStatementExecuteQuery(struct AdbcStatement *statement, struct ArrowArrayStream *out,
468
450
  int64_t *rows_affected, struct AdbcError *error) {
451
+ if (!statement) {
452
+ return ADBC_STATUS_INVALID_ARGUMENT;
453
+ }
469
454
  if (!statement->private_driver) {
470
455
  return ADBC_STATUS_INVALID_STATE;
471
456
  }
@@ -482,6 +467,9 @@ AdbcStatusCode AdbcStatementGetParameterSchema(struct AdbcStatement *statement,
482
467
 
483
468
  AdbcStatusCode AdbcStatementNew(struct AdbcConnection *connection, struct AdbcStatement *statement,
484
469
  struct AdbcError *error) {
470
+ if (!connection) {
471
+ return ADBC_STATUS_INVALID_ARGUMENT;
472
+ }
485
473
  if (!connection->private_driver) {
486
474
  return ADBC_STATUS_INVALID_STATE;
487
475
  }