duckdb 0.7.2-dev0.0 → 0.7.2-dev1034.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 (590) hide show
  1. package/binding.gyp +12 -7
  2. package/lib/duckdb.d.ts +55 -2
  3. package/lib/duckdb.js +20 -1
  4. package/package.json +1 -1
  5. package/src/connection.cpp +1 -2
  6. package/src/database.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
  9. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  10. package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
  11. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  12. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  13. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  14. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  15. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  16. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  17. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  18. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  19. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  20. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  21. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  22. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  23. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  24. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  25. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  26. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  27. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  28. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  29. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  30. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  31. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  32. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  33. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  34. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  35. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  36. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  37. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  38. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  39. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  40. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  41. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  42. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  43. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  44. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  45. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  46. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  47. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  48. package/src/duckdb/src/common/exception.cpp +15 -1
  49. package/src/duckdb/src/common/field_writer.cpp +1 -0
  50. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  51. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  52. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  53. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  54. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  55. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  56. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  57. package/src/duckdb/src/common/string_util.cpp +4 -1
  58. package/src/duckdb/src/common/types/bit.cpp +166 -87
  59. package/src/duckdb/src/common/types/blob.cpp +1 -1
  60. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  61. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  62. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  63. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  64. package/src/duckdb/src/common/types/time.cpp +13 -0
  65. package/src/duckdb/src/common/types/value.cpp +320 -154
  66. package/src/duckdb/src/common/types/vector.cpp +155 -127
  67. package/src/duckdb/src/common/types.cpp +313 -153
  68. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  69. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  70. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  71. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  72. package/src/duckdb/src/execution/index/art/art.cpp +6 -5
  73. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  74. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  75. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  76. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  77. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  78. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  79. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +12 -4
  80. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  81. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  82. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +6 -3
  83. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +6 -14
  84. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  85. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  86. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  87. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  88. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  89. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +21 -16
  90. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  91. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  92. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  93. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  94. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  95. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  96. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  97. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  98. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  99. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  100. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  101. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  102. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  103. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  104. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  105. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  106. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  107. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  108. package/src/duckdb/src/function/aggregate/nested/list.cpp +8 -8
  109. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  110. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  111. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  112. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  113. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  114. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  115. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  116. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  117. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  118. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  119. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  120. package/src/duckdb/src/function/function_binder.cpp +1 -8
  121. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  122. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  123. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  124. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  125. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  126. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  127. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  128. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  129. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  130. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  131. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  132. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  133. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  134. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  135. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  136. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  137. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  138. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  139. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  140. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  141. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  142. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  143. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  144. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  145. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  146. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  147. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  148. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  149. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  150. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  151. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  152. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  153. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  154. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  155. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  156. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  157. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  158. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  159. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  160. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  161. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  162. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  163. package/src/duckdb/src/function/table/read_csv.cpp +55 -0
  164. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  165. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  166. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  167. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  168. package/src/duckdb/src/function/table_function.cpp +30 -11
  169. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  170. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  171. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  172. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  173. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  175. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  176. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  178. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  179. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  180. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  181. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  182. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  183. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  185. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  186. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  187. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  188. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  189. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  190. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  191. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  192. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  193. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  194. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  195. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  196. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  197. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  198. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  199. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  201. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  202. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  203. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  204. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  205. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  206. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +2 -2
  207. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  210. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +6 -0
  211. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  212. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  213. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  214. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  215. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  216. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  217. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  218. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  219. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  220. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  221. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  222. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  223. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  224. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  225. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  226. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  227. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  228. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  229. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  230. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  231. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  232. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  233. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  234. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  236. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  237. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  238. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  239. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  240. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  241. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  242. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  243. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  244. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  245. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  246. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  249. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  250. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  251. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  252. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  253. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  254. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  255. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  256. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  257. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  258. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  259. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  260. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  262. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  263. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  264. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  265. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  266. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  267. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  268. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  269. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  270. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  271. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  272. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  273. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  274. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  276. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  277. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  278. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  282. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  283. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  286. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  288. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  290. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  293. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  294. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  295. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  296. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  297. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  299. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  300. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  301. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  302. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  304. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  305. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  306. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  307. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  308. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  309. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  310. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +1 -1
  311. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  312. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +1 -1
  314. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +5 -2
  315. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +3 -3
  316. package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
  317. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  318. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  319. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  320. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  321. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  322. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  323. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  324. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  325. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  326. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  327. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  328. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  329. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  330. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
  331. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  332. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +7 -5
  333. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -2
  335. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +10 -6
  336. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +8 -5
  337. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
  338. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +10 -1
  339. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
  340. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
  341. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  342. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  343. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb.h +50 -2
  346. package/src/duckdb/src/include/duckdb.hpp +0 -1
  347. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  348. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  349. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  350. package/src/duckdb/src/main/client_context.cpp +38 -34
  351. package/src/duckdb/src/main/client_data.cpp +7 -6
  352. package/src/duckdb/src/main/config.cpp +70 -1
  353. package/src/duckdb/src/main/database.cpp +19 -2
  354. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  355. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  356. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  357. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  358. package/src/duckdb/src/main/relation.cpp +3 -2
  359. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  360. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  361. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  362. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  363. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  364. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +105 -71
  365. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +31 -12
  366. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  367. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  368. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  369. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  370. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  371. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  372. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  373. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  374. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  375. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  376. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  377. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  378. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  379. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  380. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  381. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  382. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  383. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  384. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  385. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  386. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  387. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  388. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  389. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  390. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  391. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  392. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  393. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -4
  394. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  395. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  396. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  397. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  398. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  399. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  400. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  401. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  402. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  403. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  404. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  405. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  406. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  407. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  408. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  409. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  410. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  411. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  412. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  413. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  414. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  415. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  416. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  417. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  418. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  419. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  420. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  421. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  422. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  423. package/src/duckdb/src/parser/query_node.cpp +51 -1
  424. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  425. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  426. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  427. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  428. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  429. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  430. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  431. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  432. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  433. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  434. package/src/duckdb/src/parser/tableref.cpp +49 -0
  435. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  436. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  437. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  438. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +63 -42
  439. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  440. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  441. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  442. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  443. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  444. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  445. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  446. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  447. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  448. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  449. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  450. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  451. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  452. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  453. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  454. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  455. package/src/duckdb/src/parser/transformer.cpp +15 -3
  456. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  457. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  458. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  459. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  460. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  461. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  462. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  463. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  464. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  465. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  466. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  467. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  468. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  469. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  470. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -1
  471. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  472. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  473. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  474. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  475. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  476. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  477. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  478. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  479. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  480. package/src/duckdb/src/planner/binder.cpp +19 -24
  481. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  482. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  483. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  484. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  485. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  486. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  487. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  488. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  489. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  490. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  491. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  492. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  493. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  494. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  495. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  496. package/src/duckdb/src/planner/planner.cpp +2 -1
  497. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  498. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  499. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  500. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  501. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  502. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  503. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  504. package/src/duckdb/src/storage/compression/bitpacking.cpp +28 -24
  505. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +43 -45
  506. package/src/duckdb/src/storage/compression/numeric_constant.cpp +9 -10
  507. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  508. package/src/duckdb/src/storage/compression/rle.cpp +19 -15
  509. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +5 -5
  510. package/src/duckdb/src/storage/data_table.cpp +20 -20
  511. package/src/duckdb/src/storage/index.cpp +12 -1
  512. package/src/duckdb/src/storage/local_storage.cpp +20 -23
  513. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  514. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  515. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  516. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  517. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  518. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  519. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  520. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  521. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  522. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  523. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  524. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  525. package/src/duckdb/src/storage/table/column_data.cpp +45 -46
  526. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +7 -8
  527. package/src/duckdb/src/storage/table/column_segment.cpp +13 -14
  528. package/src/duckdb/src/storage/table/list_column_data.cpp +41 -59
  529. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  530. package/src/duckdb/src/storage/table/row_group.cpp +38 -32
  531. package/src/duckdb/src/storage/table/row_group_collection.cpp +94 -78
  532. package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
  533. package/src/duckdb/src/storage/table/standard_column_data.cpp +7 -6
  534. package/src/duckdb/src/storage/table/struct_column_data.cpp +16 -16
  535. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  536. package/src/duckdb/src/storage/table/update_segment.cpp +20 -18
  537. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  538. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  539. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  540. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  541. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  542. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  543. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  544. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  545. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  546. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  547. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  548. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  549. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  550. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  551. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  552. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  553. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  554. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  555. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  556. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  557. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  558. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  559. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  560. package/src/duckdb/ub_src_parser.cpp +2 -0
  561. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  562. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  563. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  564. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  565. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  566. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  567. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  568. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  569. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  570. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  571. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  572. package/src/duckdb_node.hpp +2 -1
  573. package/src/statement.cpp +5 -5
  574. package/src/utils.cpp +27 -2
  575. package/test/extension.test.ts +44 -26
  576. package/test/syntax_error.test.ts +3 -1
  577. package/filelist.cache +0 -0
  578. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  579. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  580. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  581. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  582. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  583. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  584. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  585. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  586. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  587. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  588. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  589. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  590. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -12,6 +12,11 @@
12
12
 
13
13
  namespace duckdb {
14
14
 
15
+ using regexp_util::CreateStringPiece;
16
+ using regexp_util::Extract;
17
+ using regexp_util::ParseRegexOptions;
18
+ using regexp_util::TryParseConstantPattern;
19
+
15
20
  static bool RegexOptionsEquals(const duckdb_re2::RE2::Options &opt_a, const duckdb_re2::RE2::Options &opt_b) {
16
21
  return opt_a.case_sensitive() == opt_b.case_sensitive();
17
22
  }
@@ -32,10 +37,6 @@ bool RegexpBaseBindData::Equals(const FunctionData &other_p) const {
32
37
  RegexOptionsEquals(options, other.options);
33
38
  }
34
39
 
35
- static inline duckdb_re2::StringPiece CreateStringPiece(string_t &input) {
36
- return duckdb_re2::StringPiece(input.GetDataUnsafe(), input.GetSize());
37
- }
38
-
39
40
  unique_ptr<FunctionLocalState> RegexInitLocalState(ExpressionState &state, const BoundFunctionExpression &expr,
40
41
  FunctionData *bind_data) {
41
42
  auto &info = (RegexpBaseBindData &)*bind_data;
@@ -45,75 +46,6 @@ unique_ptr<FunctionLocalState> RegexInitLocalState(ExpressionState &state, const
45
46
  return nullptr;
46
47
  }
47
48
 
48
- static void ParseRegexOptions(const string &options, duckdb_re2::RE2::Options &result, bool *global_replace = nullptr) {
49
- for (idx_t i = 0; i < options.size(); i++) {
50
- switch (options[i]) {
51
- case 'c':
52
- // case-sensitive matching
53
- result.set_case_sensitive(true);
54
- break;
55
- case 'i':
56
- // case-insensitive matching
57
- result.set_case_sensitive(false);
58
- break;
59
- case 'l':
60
- // literal matching
61
- result.set_literal(true);
62
- break;
63
- case 'm':
64
- case 'n':
65
- case 'p':
66
- // newline-sensitive matching
67
- result.set_dot_nl(false);
68
- break;
69
- case 's':
70
- // non-newline-sensitive matching
71
- result.set_dot_nl(true);
72
- break;
73
- case 'g':
74
- // global replace, only available for regexp_replace
75
- if (global_replace) {
76
- *global_replace = true;
77
- } else {
78
- throw InvalidInputException("Option 'g' (global replace) is only valid for regexp_replace");
79
- }
80
- break;
81
- case ' ':
82
- case '\t':
83
- case '\n':
84
- // ignore whitespace
85
- break;
86
- default:
87
- throw InvalidInputException("Unrecognized Regex option %c", options[i]);
88
- }
89
- }
90
- }
91
-
92
- void ParseRegexOptions(ClientContext &context, Expression &expr, RE2::Options &target, bool *global_replace = nullptr) {
93
- if (expr.HasParameter()) {
94
- throw ParameterNotResolvedException();
95
- }
96
- if (!expr.IsFoldable()) {
97
- throw InvalidInputException("Regex options field must be a constant");
98
- }
99
- Value options_str = ExpressionExecutor::EvaluateScalar(context, expr);
100
- if (!options_str.IsNull() && options_str.type().id() == LogicalTypeId::VARCHAR) {
101
- ParseRegexOptions(StringValue::Get(options_str), target, global_replace);
102
- }
103
- }
104
-
105
- static bool TryParseConstantPattern(ClientContext &context, Expression &expr, string &constant_string) {
106
- if (!expr.IsFoldable()) {
107
- return false;
108
- }
109
- Value pattern_str = ExpressionExecutor::EvaluateScalar(context, expr);
110
- if (!pattern_str.IsNull() && pattern_str.type().id() == LogicalTypeId::VARCHAR) {
111
- constant_string = StringValue::Get(pattern_str);
112
- return true;
113
- }
114
- return false;
115
- }
116
-
117
49
  //===--------------------------------------------------------------------===//
118
50
  // Regexp Matches
119
51
  //===--------------------------------------------------------------------===//
@@ -321,13 +253,6 @@ static unique_ptr<FunctionData> RegexExtractBind(ClientContext &context, ScalarF
321
253
  std::move(group_string));
322
254
  }
323
255
 
324
- inline static string_t Extract(const string_t &input, Vector &result, const RE2 &re,
325
- const duckdb_re2::StringPiece &rewrite) {
326
- std::string extracted;
327
- RE2::Extract(input.GetString(), re, rewrite, &extracted);
328
- return StringVector::AddString(result, extracted.c_str(), extracted.size());
329
- }
330
-
331
256
  static void RegexExtractFunction(DataChunk &args, ExpressionState &state, Vector &result) {
332
257
  auto &func_expr = (BoundFunctionExpression &)state.expr;
333
258
  const auto &info = (RegexpExtractBindData &)*func_expr.bind_info;
@@ -391,10 +316,26 @@ void RegexpFun::RegisterFunction(BuiltinFunctions &set) {
391
316
  RegexExtractFunction, RegexExtractBind, nullptr, nullptr, RegexInitLocalState, LogicalType::INVALID,
392
317
  FunctionSideEffects::NO_SIDE_EFFECTS, FunctionNullHandling::SPECIAL_HANDLING));
393
318
 
319
+ ScalarFunctionSet regexp_extract_all("regexp_extract_all");
320
+ regexp_extract_all.AddFunction(ScalarFunction(
321
+ {LogicalType::VARCHAR, LogicalType::VARCHAR}, LogicalType::LIST(LogicalType::VARCHAR),
322
+ RegexpExtractAll::Execute, RegexpExtractAll::Bind, nullptr, nullptr, RegexpExtractAll::InitLocalState,
323
+ LogicalType::INVALID, FunctionSideEffects::NO_SIDE_EFFECTS, FunctionNullHandling::SPECIAL_HANDLING));
324
+ regexp_extract_all.AddFunction(ScalarFunction(
325
+ {LogicalType::VARCHAR, LogicalType::VARCHAR, LogicalType::INTEGER}, LogicalType::LIST(LogicalType::VARCHAR),
326
+ RegexpExtractAll::Execute, RegexpExtractAll::Bind, nullptr, nullptr, RegexpExtractAll::InitLocalState,
327
+ LogicalType::INVALID, FunctionSideEffects::NO_SIDE_EFFECTS, FunctionNullHandling::SPECIAL_HANDLING));
328
+ regexp_extract_all.AddFunction(
329
+ ScalarFunction({LogicalType::VARCHAR, LogicalType::VARCHAR, LogicalType::INTEGER, LogicalType::VARCHAR},
330
+ LogicalType::LIST(LogicalType::VARCHAR), RegexpExtractAll::Execute, RegexpExtractAll::Bind,
331
+ nullptr, nullptr, RegexpExtractAll::InitLocalState, LogicalType::INVALID,
332
+ FunctionSideEffects::NO_SIDE_EFFECTS, FunctionNullHandling::SPECIAL_HANDLING));
333
+
394
334
  set.AddFunction(regexp_full_match);
395
335
  set.AddFunction(regexp_partial_match);
396
336
  set.AddFunction(regexp_replace);
397
337
  set.AddFunction(regexp_extract);
338
+ set.AddFunction(regexp_extract_all);
398
339
  }
399
340
 
400
341
  } // namespace duckdb
@@ -4,7 +4,7 @@
4
4
  #include "duckdb/common/exception.hpp"
5
5
  #include "duckdb/common/vector_operations/vector_operations.hpp"
6
6
  #include "duckdb/common/vector_operations/ternary_executor.hpp"
7
- #include "duckdb/storage/statistics/string_statistics.hpp"
7
+
8
8
  #include "duckdb/planner/expression/bound_function_expression.hpp"
9
9
  #include "utf8proc.hpp"
10
10
  #include "duckdb/common/types/blob.hpp"
@@ -307,12 +307,8 @@ static unique_ptr<BaseStatistics> SubstringPropagateStats(ClientContext &context
307
307
  auto &child_stats = input.child_stats;
308
308
  auto &expr = input.expr;
309
309
  // can only propagate stats if the children have stats
310
- if (!child_stats[0]) {
311
- return nullptr;
312
- }
313
310
  // we only care about the stats of the first child (i.e. the string)
314
- auto &sstats = (StringStatistics &)*child_stats[0];
315
- if (!sstats.has_unicode) {
311
+ if (!StringStats::CanContainUnicode(child_stats[0])) {
316
312
  expr.function.function = SubstringFunctionASCII;
317
313
  }
318
314
  return nullptr;
@@ -45,11 +45,13 @@ void BuiltinFunctions::RegisterStringFunctions() {
45
45
  // blob functions
46
46
  Register<Base64Fun>();
47
47
  Register<EncodeFun>();
48
+ Register<HexFun>();
48
49
 
49
50
  // bit functions
50
51
  Register<GetBitFun>();
51
52
  Register<SetBitFun>();
52
53
  Register<BitPositionFun>();
54
+ Register<BitStringFun>();
53
55
 
54
56
  // uuid functions
55
57
  Register<UUIDFun>();
@@ -3,7 +3,7 @@
3
3
  #include "duckdb/function/scalar/nested_functions.hpp"
4
4
  #include "duckdb/planner/expression/bound_function_expression.hpp"
5
5
  #include "duckdb/planner/expression/bound_parameter_expression.hpp"
6
- #include "duckdb/storage/statistics/struct_statistics.hpp"
6
+ #include "duckdb/storage/statistics/struct_stats.hpp"
7
7
 
8
8
  namespace duckdb {
9
9
 
@@ -96,21 +96,16 @@ static unique_ptr<FunctionData> StructExtractBind(ClientContext &context, Scalar
96
96
  }
97
97
 
98
98
  bound_function.return_type = return_type;
99
- return make_unique<StructExtractBindData>(key, key_index, return_type);
99
+ return make_unique<StructExtractBindData>(std::move(key), key_index, std::move(return_type));
100
100
  }
101
101
 
102
102
  static unique_ptr<BaseStatistics> PropagateStructExtractStats(ClientContext &context, FunctionStatisticsInput &input) {
103
103
  auto &child_stats = input.child_stats;
104
104
  auto &bind_data = input.bind_data;
105
- if (!child_stats[0]) {
106
- return nullptr;
107
- }
108
- auto &struct_stats = (StructStatistics &)*child_stats[0];
105
+
109
106
  auto &info = (StructExtractBindData &)*bind_data;
110
- if (info.index >= struct_stats.child_stats.size() || !struct_stats.child_stats[info.index]) {
111
- return nullptr;
112
- }
113
- return struct_stats.child_stats[info.index]->Copy();
107
+ auto struct_child_stats = StructStats::GetChildStats(child_stats[0]);
108
+ return struct_child_stats[info.index].ToUnique();
114
109
  }
115
110
 
116
111
  ScalarFunction StructExtractFun::GetFunction() {
@@ -3,7 +3,7 @@
3
3
  #include "duckdb/parser/expression/bound_expression.hpp"
4
4
  #include "duckdb/function/scalar/nested_functions.hpp"
5
5
  #include "duckdb/common/case_insensitive_map.hpp"
6
- #include "duckdb/storage/statistics/struct_statistics.hpp"
6
+ #include "duckdb/storage/statistics/struct_stats.hpp"
7
7
  #include "duckdb/planner/expression_binder.hpp"
8
8
 
9
9
  namespace duckdb {
@@ -74,29 +74,26 @@ static unique_ptr<FunctionData> StructInsertBind(ClientContext &context, ScalarF
74
74
  }
75
75
 
76
76
  // this is more for completeness reasons
77
- bound_function.return_type = LogicalType::STRUCT(std::move(new_struct_children));
77
+ bound_function.return_type = LogicalType::STRUCT(new_struct_children);
78
78
  return make_unique<VariableReturnBindData>(bound_function.return_type);
79
79
  }
80
80
 
81
81
  unique_ptr<BaseStatistics> StructInsertStats(ClientContext &context, FunctionStatisticsInput &input) {
82
82
  auto &child_stats = input.child_stats;
83
83
  auto &expr = input.expr;
84
- if (child_stats.empty() || !child_stats[0]) {
85
- return nullptr;
86
- }
87
- auto &existing_struct_stats = (StructStatistics &)*child_stats[0];
88
- auto new_struct_stats = make_unique<StructStatistics>(expr.return_type);
84
+ auto new_struct_stats = StructStats::CreateUnknown(expr.return_type);
89
85
 
90
- for (idx_t i = 0; i < existing_struct_stats.child_stats.size(); i++) {
91
- new_struct_stats->child_stats[i] =
92
- existing_struct_stats.child_stats[i] ? existing_struct_stats.child_stats[i]->Copy() : nullptr;
86
+ auto existing_count = StructType::GetChildCount(child_stats[0].GetType());
87
+ auto existing_stats = StructStats::GetChildStats(child_stats[0]);
88
+ for (idx_t i = 0; i < existing_count; i++) {
89
+ StructStats::SetChildStats(new_struct_stats, i, existing_stats[i]);
93
90
  }
94
-
95
- auto offset = new_struct_stats->child_stats.size() - child_stats.size();
91
+ auto new_count = StructType::GetChildCount(expr.return_type);
92
+ auto offset = new_count - child_stats.size();
96
93
  for (idx_t i = 1; i < child_stats.size(); i++) {
97
- new_struct_stats->child_stats[offset + i] = child_stats[i] ? child_stats[i]->Copy() : nullptr;
94
+ StructStats::SetChildStats(new_struct_stats, offset + i, child_stats[i]);
98
95
  }
99
- return std::move(new_struct_stats);
96
+ return new_struct_stats.ToUnique();
100
97
  }
101
98
 
102
99
  void StructInsertFun::RegisterFunction(BuiltinFunctions &set) {
@@ -3,7 +3,7 @@
3
3
  #include "duckdb/parser/expression/bound_expression.hpp"
4
4
  #include "duckdb/function/scalar/nested_functions.hpp"
5
5
  #include "duckdb/common/case_insensitive_map.hpp"
6
- #include "duckdb/storage/statistics/struct_statistics.hpp"
6
+ #include "duckdb/storage/statistics/struct_stats.hpp"
7
7
  #include "duckdb/planner/expression_binder.hpp"
8
8
 
9
9
  namespace duckdb {
@@ -54,19 +54,18 @@ static unique_ptr<FunctionData> StructPackBind(ClientContext &context, ScalarFun
54
54
  }
55
55
 
56
56
  // this is more for completeness reasons
57
- bound_function.return_type = LogicalType::STRUCT(std::move(struct_children));
57
+ bound_function.return_type = LogicalType::STRUCT(struct_children);
58
58
  return make_unique<VariableReturnBindData>(bound_function.return_type);
59
59
  }
60
60
 
61
61
  unique_ptr<BaseStatistics> StructPackStats(ClientContext &context, FunctionStatisticsInput &input) {
62
62
  auto &child_stats = input.child_stats;
63
63
  auto &expr = input.expr;
64
- auto struct_stats = make_unique<StructStatistics>(expr.return_type);
65
- D_ASSERT(child_stats.size() == struct_stats->child_stats.size());
66
- for (idx_t i = 0; i < struct_stats->child_stats.size(); i++) {
67
- struct_stats->child_stats[i] = child_stats[i] ? child_stats[i]->Copy() : nullptr;
64
+ auto struct_stats = StructStats::CreateUnknown(expr.return_type);
65
+ for (idx_t i = 0; i < child_stats.size(); i++) {
66
+ StructStats::SetChildStats(struct_stats, i, child_stats[i]);
68
67
  }
69
- return std::move(struct_stats);
68
+ return struct_stats.ToUnique();
70
69
  }
71
70
 
72
71
  void StructPackFun::RegisterFunction(BuiltinFunctions &set) {
@@ -101,6 +101,9 @@ LogicalType ArrowTableFunction::GetArrowLogicalType(
101
101
  } else if (format == "tiM") {
102
102
  arrow_convert_data[col_idx]->date_time_precision.emplace_back(ArrowDateTimeType::MONTHS);
103
103
  return LogicalType::INTERVAL;
104
+ } else if (format == "tin") {
105
+ arrow_convert_data[col_idx]->date_time_precision.emplace_back(ArrowDateTimeType::MONTH_DAY_NANO);
106
+ return LogicalType::INTERVAL;
104
107
  } else if (format == "+l") {
105
108
  arrow_convert_data[col_idx]->variable_sz_type.emplace_back(ArrowVariableSizeType::NORMAL, 0);
106
109
  auto child_type = GetArrowLogicalType(*schema.children[0], arrow_convert_data, col_idx);
@@ -114,14 +117,14 @@ LogicalType ArrowTableFunction::GetArrowLogicalType(
114
117
  idx_t fixed_size = std::stoi(parameters);
115
118
  arrow_convert_data[col_idx]->variable_sz_type.emplace_back(ArrowVariableSizeType::FIXED_SIZE, fixed_size);
116
119
  auto child_type = GetArrowLogicalType(*schema.children[0], arrow_convert_data, col_idx);
117
- return LogicalType::LIST(std::move(child_type));
120
+ return LogicalType::LIST(child_type);
118
121
  } else if (format == "+s") {
119
122
  child_list_t<LogicalType> child_types;
120
123
  for (idx_t type_idx = 0; type_idx < (idx_t)schema.n_children; type_idx++) {
121
124
  auto child_type = GetArrowLogicalType(*schema.children[type_idx], arrow_convert_data, col_idx);
122
125
  child_types.push_back({schema.children[type_idx]->name, child_type});
123
126
  }
124
- return LogicalType::STRUCT(std::move(child_types));
127
+ return LogicalType::STRUCT(child_types);
125
128
 
126
129
  } else if (format == "+m") {
127
130
  arrow_convert_data[col_idx]->variable_sz_type.emplace_back(ArrowVariableSizeType::NORMAL, 0);
@@ -20,7 +20,13 @@ void ShiftRight(unsigned char *ar, int size, int shift) {
20
20
 
21
21
  void GetValidityMask(ValidityMask &mask, ArrowArray &array, ArrowScanLocalState &scan_state, idx_t size,
22
22
  int64_t nested_offset = -1, bool add_null = false) {
23
- if (array.null_count != 0 && array.buffers[0]) {
23
+ // In certains we don't need to or cannot copy arrow's validity mask to duckdb.
24
+ //
25
+ // The conditions where we do want to copy arrow's mask to duckdb are:
26
+ // 1. nulls exist
27
+ // 2. n_buffers > 0, meaning the array's arrow type is not `null`
28
+ // 3. the validity buffer (the first buffer) is not a nullptr
29
+ if (array.null_count != 0 && array.n_buffers > 0 && array.buffers[0]) {
24
30
  auto bit_offset = scan_state.chunk_offset + array.offset;
25
31
  if (nested_offset != -1) {
26
32
  bit_offset = nested_offset;
@@ -316,6 +322,20 @@ void IntervalConversionMonths(Vector &vector, ArrowArray &array, ArrowScanLocalS
316
322
  }
317
323
  }
318
324
 
325
+ void IntervalConversionMonthDayNanos(Vector &vector, ArrowArray &array, ArrowScanLocalState &scan_state,
326
+ int64_t nested_offset, idx_t size) {
327
+ auto tgt_ptr = (interval_t *)FlatVector::GetData(vector);
328
+ auto src_ptr = (ArrowInterval *)array.buffers[1] + scan_state.chunk_offset + array.offset;
329
+ if (nested_offset != -1) {
330
+ src_ptr = (ArrowInterval *)array.buffers[1] + nested_offset + array.offset;
331
+ }
332
+ for (idx_t row = 0; row < size; row++) {
333
+ tgt_ptr[row].days = src_ptr[row].days;
334
+ tgt_ptr[row].micros = src_ptr[row].nanoseconds / Interval::NANOS_PER_MICRO;
335
+ tgt_ptr[row].months = src_ptr[row].months;
336
+ }
337
+ }
338
+
319
339
  void ColumnArrowToDuckDB(Vector &vector, ArrowArray &array, ArrowScanLocalState &scan_state, idx_t size,
320
340
  std::unordered_map<idx_t, unique_ptr<ArrowConvertData>> &arrow_convert_data, idx_t col_idx,
321
341
  std::pair<idx_t, idx_t> &arrow_convert_idx, int64_t nested_offset, ValidityMask *parent_mask) {
@@ -509,6 +529,10 @@ void ColumnArrowToDuckDB(Vector &vector, ArrowArray &array, ArrowScanLocalState
509
529
  IntervalConversionMonths(vector, array, scan_state, nested_offset, size);
510
530
  break;
511
531
  }
532
+ case ArrowDateTimeType::MONTH_DAY_NANO: {
533
+ IntervalConversionMonthDayNanos(vector, array, scan_state, nested_offset, size);
534
+ break;
535
+ }
512
536
  default:
513
537
  throw std::runtime_error("Unsupported precision for Interval/Duration Type ");
514
538
  }
@@ -32,7 +32,11 @@ static unique_ptr<FunctionData> CheckpointBind(ClientContext &context, TableFunc
32
32
  AttachedDatabase *db;
33
33
  auto &db_manager = DatabaseManager::Get(context);
34
34
  if (!input.inputs.empty()) {
35
- db = db_manager.GetDatabase(context, StringValue::Get(input.inputs[0]));
35
+ auto &db_name = StringValue::Get(input.inputs[0]);
36
+ db = db_manager.GetDatabase(context, db_name);
37
+ if (!db) {
38
+ throw BinderException("Database \"%s\" not found", db_name);
39
+ }
36
40
  } else {
37
41
  db = db_manager.GetDatabase(context, DatabaseManager::GetDefaultDatabase(context));
38
42
  }
@@ -31,6 +31,9 @@ void ReadCSVData::InitializeFiles(ClientContext &context, const vector<string> &
31
31
  auto found_files = fs.GlobFiles(file_pattern, context);
32
32
  files.insert(files.end(), found_files.begin(), found_files.end());
33
33
  }
34
+ if (files.empty()) {
35
+ throw IOException("CSV reader needs at least one file to read");
36
+ }
34
37
  }
35
38
 
36
39
  void ReadCSVData::FinalizeRead(ClientContext &context) {
@@ -50,6 +53,25 @@ void ReadCSVData::FinalizeRead(ClientContext &context) {
50
53
  }
51
54
  }
52
55
 
56
+ uint8_t GetCandidateSpecificity(const LogicalType &candidate_type) {
57
+ //! Const ht with accepted auto_types and their weights in specificity
58
+ const duckdb::unordered_map<uint8_t, uint8_t> auto_type_candidates_specificity {
59
+ {(uint8_t)LogicalTypeId::VARCHAR, 0}, {(uint8_t)LogicalTypeId::TIMESTAMP, 1},
60
+ {(uint8_t)LogicalTypeId::DATE, 2}, {(uint8_t)LogicalTypeId::TIME, 3},
61
+ {(uint8_t)LogicalTypeId::DOUBLE, 4}, {(uint8_t)LogicalTypeId::FLOAT, 5},
62
+ {(uint8_t)LogicalTypeId::BIGINT, 6}, {(uint8_t)LogicalTypeId::INTEGER, 7},
63
+ {(uint8_t)LogicalTypeId::SMALLINT, 8}, {(uint8_t)LogicalTypeId::TINYINT, 9},
64
+ {(uint8_t)LogicalTypeId::BOOLEAN, 10}, {(uint8_t)LogicalTypeId::SQLNULL, 11}};
65
+
66
+ auto id = (uint8_t)candidate_type.id();
67
+ auto it = auto_type_candidates_specificity.find(id);
68
+ if (it == auto_type_candidates_specificity.end()) {
69
+ throw BinderException("Auto Type Candidate of type %s is not accepted as a valid input",
70
+ LogicalTypeIdToString(candidate_type.id()));
71
+ }
72
+ return it->second;
73
+ }
74
+
53
75
  static unique_ptr<FunctionData> ReadCSVBind(ClientContext &context, TableFunctionBindInput &input,
54
76
  vector<LogicalType> &return_types, vector<string> &names) {
55
77
  auto &config = DBConfig::GetConfig(context);
@@ -61,9 +83,15 @@ static unique_ptr<FunctionData> ReadCSVBind(ClientContext &context, TableFunctio
61
83
  auto &options = result->options;
62
84
 
63
85
  vector<string> patterns;
86
+ if (input.inputs[0].IsNull()) {
87
+ throw ParserException("CSV reader cannot take NULL as parameter");
88
+ }
64
89
  if (input.inputs[0].type().id() == LogicalTypeId::LIST) {
65
90
  // list of globs
66
91
  for (auto &val : ListValue::GetChildren(input.inputs[0])) {
92
+ if (val.IsNull()) {
93
+ throw ParserException("CSV reader cannot take NULL input as parameter");
94
+ }
67
95
  patterns.push_back(StringValue::Get(val));
68
96
  }
69
97
  } else {
@@ -96,6 +124,32 @@ static unique_ptr<FunctionData> ReadCSVBind(ClientContext &context, TableFunctio
96
124
  if (names.empty()) {
97
125
  throw BinderException("read_csv requires at least a single column as input!");
98
126
  }
127
+ } else if (loption == "auto_type_candidates") {
128
+ options.auto_type_candidates.clear();
129
+ map<uint8_t, LogicalType> candidate_types;
130
+ // We always have the extremes of Null and Varchar, so we can default to varchar if the
131
+ // sniffer is not able to confidently detect that column type
132
+ candidate_types[GetCandidateSpecificity(LogicalType::VARCHAR)] = LogicalType::VARCHAR;
133
+ candidate_types[GetCandidateSpecificity(LogicalType::SQLNULL)] = LogicalType::SQLNULL;
134
+
135
+ auto &child_type = kv.second.type();
136
+ if (child_type.id() != LogicalTypeId::LIST) {
137
+ throw BinderException("read_csv auto_types requires a list as input");
138
+ }
139
+ auto &list_children = ListValue::GetChildren(kv.second);
140
+ if (list_children.empty()) {
141
+ throw BinderException("auto_type_candidates requires at least one type");
142
+ }
143
+ for (auto &child : list_children) {
144
+ if (child.type().id() != LogicalTypeId::VARCHAR) {
145
+ throw BinderException("auto_type_candidates requires a type specification as string");
146
+ }
147
+ auto candidate_type = TransformStringToLogicalType(StringValue::Get(child), context);
148
+ candidate_types[GetCandidateSpecificity(candidate_type)] = candidate_type;
149
+ }
150
+ for (auto &candidate_type : candidate_types) {
151
+ options.auto_type_candidates.emplace_back(candidate_type.second);
152
+ }
99
153
  } else if (loption == "column_names" || loption == "names") {
100
154
  if (!options.name_list.empty()) {
101
155
  throw BinderException("read_csv_auto column_names/names can only be supplied once");
@@ -786,6 +840,7 @@ static void ReadCSVAddNamedParameters(TableFunction &table_function) {
786
840
  table_function.named_parameters["escape"] = LogicalType::VARCHAR;
787
841
  table_function.named_parameters["nullstr"] = LogicalType::VARCHAR;
788
842
  table_function.named_parameters["columns"] = LogicalType::ANY;
843
+ table_function.named_parameters["auto_type_candidates"] = LogicalType::ANY;
789
844
  table_function.named_parameters["header"] = LogicalType::BOOLEAN;
790
845
  table_function.named_parameters["auto_detect"] = LogicalType::BOOLEAN;
791
846
  table_function.named_parameters["sample_size"] = LogicalType::BIGINT;
@@ -204,8 +204,8 @@ void DuckDBConstraintsFunction(ClientContext &context, TableFunctionInput &data_
204
204
  const auto &bound_foreign_key = (const BoundForeignKeyConstraint &)bound_constraint;
205
205
  const auto &info = bound_foreign_key.info;
206
206
  // find the other table
207
- auto table_entry =
208
- Catalog::GetEntry<TableCatalogEntry>(context, INVALID_CATALOG, info.schema, info.table, true);
207
+ auto table_entry = Catalog::GetEntry<TableCatalogEntry>(context, table.catalog->GetName(),
208
+ info.schema, info.table, true);
209
209
  if (!table_entry) {
210
210
  throw InternalException("dukdb_constraints: entry %s.%s referenced in foreign key not found",
211
211
  info.schema, info.table);
@@ -138,7 +138,7 @@ vector<TestType> TestAllTypesFun::GetTestTypes() {
138
138
  child_list_t<LogicalType> struct_type_list;
139
139
  struct_type_list.push_back(make_pair("a", LogicalType::INTEGER));
140
140
  struct_type_list.push_back(make_pair("b", LogicalType::VARCHAR));
141
- auto struct_type = LogicalType::STRUCT(std::move(struct_type_list));
141
+ auto struct_type = LogicalType::STRUCT(struct_type_list);
142
142
 
143
143
  child_list_t<Value> min_struct_list;
144
144
  min_struct_list.push_back(make_pair("a", Value(LogicalType::INTEGER)));
@@ -156,7 +156,7 @@ vector<TestType> TestAllTypesFun::GetTestTypes() {
156
156
  child_list_t<LogicalType> struct_list_type_list;
157
157
  struct_list_type_list.push_back(make_pair("a", int_list_type));
158
158
  struct_list_type_list.push_back(make_pair("b", varchar_list_type));
159
- auto struct_list_type = LogicalType::STRUCT(std::move(struct_list_type_list));
159
+ auto struct_list_type = LogicalType::STRUCT(struct_list_type_list);
160
160
 
161
161
  child_list_t<Value> min_struct_vl_list;
162
162
  min_struct_vl_list.push_back(make_pair("a", Value(int_list_type)));
@@ -332,7 +332,7 @@ void TableScanPushdownComplexFilter(ClientContext &context, LogicalGet &get, Fun
332
332
  auto comparison_type = comparison->type;
333
333
  if (comparison->left->type == ExpressionType::VALUE_CONSTANT) {
334
334
  // the expression is on the right side, we flip them around
335
- comparison_type = FlipComparisionExpression(comparison_type);
335
+ comparison_type = FlipComparisonExpression(comparison_type);
336
336
  }
337
337
  if (comparison_type == ExpressionType::COMPARE_EQUAL) {
338
338
  // equality value
@@ -1,8 +1,8 @@
1
1
  #ifndef DUCKDB_VERSION
2
- #define DUCKDB_VERSION "0.7.1"
2
+ #define DUCKDB_VERSION "0.7.2-dev1034"
3
3
  #endif
4
4
  #ifndef DUCKDB_SOURCE_ID
5
- #define DUCKDB_SOURCE_ID "b00b93f0b1"
5
+ #define DUCKDB_SOURCE_ID "18142dcc4b"
6
6
  #endif
7
7
  #include "duckdb/function/table/system_functions.hpp"
8
8
  #include "duckdb/main/database.hpp"
@@ -14,12 +14,12 @@ TableFunctionInfo::~TableFunctionInfo() {
14
14
  TableFunction::TableFunction(string name, vector<LogicalType> arguments, table_function_t function,
15
15
  table_function_bind_t bind, table_function_init_global_t init_global,
16
16
  table_function_init_local_t init_local)
17
- : SimpleNamedParameterFunction(std::move(name), std::move(arguments)), bind(bind), init_global(init_global),
18
- init_local(init_local), function(function), in_out_function(nullptr), in_out_function_final(nullptr),
19
- statistics(nullptr), dependency(nullptr), cardinality(nullptr), pushdown_complex_filter(nullptr),
20
- to_string(nullptr), table_scan_progress(nullptr), get_batch_index(nullptr), get_batch_info(nullptr),
21
- serialize(nullptr), deserialize(nullptr), projection_pushdown(false), filter_pushdown(false),
22
- filter_prune(false) {
17
+ : SimpleNamedParameterFunction(std::move(name), std::move(arguments)), bind(bind), bind_replace(nullptr),
18
+ init_global(init_global), init_local(init_local), function(function), in_out_function(nullptr),
19
+ in_out_function_final(nullptr), statistics(nullptr), dependency(nullptr), cardinality(nullptr),
20
+ pushdown_complex_filter(nullptr), to_string(nullptr), table_scan_progress(nullptr), get_batch_index(nullptr),
21
+ get_batch_info(nullptr), serialize(nullptr), deserialize(nullptr), projection_pushdown(false),
22
+ filter_pushdown(false), filter_prune(false) {
23
23
  }
24
24
 
25
25
  TableFunction::TableFunction(const vector<LogicalType> &arguments, table_function_t function,
@@ -28,11 +28,30 @@ TableFunction::TableFunction(const vector<LogicalType> &arguments, table_functio
28
28
  : TableFunction(string(), arguments, function, bind, init_global, init_local) {
29
29
  }
30
30
  TableFunction::TableFunction()
31
- : SimpleNamedParameterFunction("", {}), bind(nullptr), init_global(nullptr), init_local(nullptr), function(nullptr),
32
- in_out_function(nullptr), statistics(nullptr), dependency(nullptr), cardinality(nullptr),
33
- pushdown_complex_filter(nullptr), to_string(nullptr), table_scan_progress(nullptr), get_batch_index(nullptr),
34
- get_batch_info(nullptr), serialize(nullptr), deserialize(nullptr), projection_pushdown(false),
35
- filter_pushdown(false), filter_prune(false) {
31
+ : SimpleNamedParameterFunction("", {}), bind(nullptr), bind_replace(nullptr), init_global(nullptr),
32
+ init_local(nullptr), function(nullptr), in_out_function(nullptr), statistics(nullptr), dependency(nullptr),
33
+ cardinality(nullptr), pushdown_complex_filter(nullptr), to_string(nullptr), table_scan_progress(nullptr),
34
+ get_batch_index(nullptr), get_batch_info(nullptr), serialize(nullptr), deserialize(nullptr),
35
+ projection_pushdown(false), filter_pushdown(false), filter_prune(false) {
36
+ }
37
+
38
+ bool TableFunction::Equal(const TableFunction &rhs) const {
39
+ // number of types
40
+ if (this->arguments.size() != rhs.arguments.size()) {
41
+ return false;
42
+ }
43
+ // argument types
44
+ for (idx_t i = 0; i < this->arguments.size(); ++i) {
45
+ if (this->arguments[i] != rhs.arguments[i]) {
46
+ return false;
47
+ }
48
+ }
49
+ // varargs
50
+ if (this->varargs != rhs.varargs) {
51
+ return false;
52
+ }
53
+
54
+ return true; // they are equal
36
55
  }
37
56
 
38
57
  } // namespace duckdb
@@ -14,6 +14,7 @@
14
14
  #include "duckdb/catalog/catalog_transaction.hpp"
15
15
  #include "duckdb/common/unordered_set.hpp"
16
16
  #include "duckdb/common/atomic.hpp"
17
+ #include "duckdb/common/optional_ptr.hpp"
17
18
 
18
19
  #include <functional>
19
20
 
@@ -80,6 +81,8 @@ public:
80
81
  DUCKDB_API static Catalog &GetCatalog(ClientContext &context, const string &catalog_name);
81
82
  //! Get the specified Catalog from the DatabaseInstance
82
83
  DUCKDB_API static Catalog &GetCatalog(DatabaseInstance &db, const string &catalog_name);
84
+ //! Gets the specified Catalog from the database if it exists
85
+ DUCKDB_API static optional_ptr<Catalog> GetCatalogEntry(ClientContext &context, const string &catalog_name);
83
86
  //! Get the specific Catalog from the AttachedDatabase
84
87
  DUCKDB_API static Catalog &GetCatalog(AttachedDatabase &db);
85
88
 
@@ -205,6 +208,9 @@ public:
205
208
  DUCKDB_API static LogicalType GetType(ClientContext &context, const string &catalog_name, const string &schema,
206
209
  const string &name);
207
210
 
211
+ static bool TypeExists(ClientContext &context, const string &catalog_name, const string &schema,
212
+ const string &name);
213
+
208
214
  template <class T>
209
215
  T *GetEntry(ClientContext &context, const string &schema_name, const string &name, bool if_exists = false,
210
216
  QueryErrorContext error_context = QueryErrorContext()) {
@@ -35,7 +35,7 @@ public:
35
35
 
36
36
  void SetAsRoot() override;
37
37
 
38
- void CommitAlter(AlterInfo &info);
38
+ void CommitAlter(string &column_name);
39
39
  void CommitDrop();
40
40
 
41
41
  TableFunction GetScanFunction(ClientContext &context, unique_ptr<FunctionData> &bind_data) override;
@@ -9,17 +9,12 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/catalog/standard_entry.hpp"
12
- #include "duckdb/function/table_function.hpp"
13
- #include "duckdb/common/vector.hpp"
14
- #include "duckdb/function/function_set.hpp"
12
+ #include "duckdb/catalog/catalog_set.hpp"
13
+ #include "duckdb/function/function.hpp"
14
+ #include "duckdb/parser/parsed_data/create_table_function_info.hpp"
15
15
 
16
16
  namespace duckdb {
17
17
 
18
- class Catalog;
19
- class Constraint;
20
-
21
- struct CreateTableFunctionInfo;
22
-
23
18
  //! A table function in the catalog
24
19
  class TableFunctionCatalogEntry : public StandardEntry {
25
20
  public:
@@ -31,5 +26,8 @@ public:
31
26
 
32
27
  //! The table function
33
28
  TableFunctionSet functions;
29
+
30
+ public:
31
+ unique_ptr<CatalogEntry> AlterEntry(ClientContext &context, AlterInfo *info) override;
34
32
  };
35
33
  } // namespace duckdb