duckdb 0.7.2-dev0.0 → 0.7.2-dev1138.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 (625) 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/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  13. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  14. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  15. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  17. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  18. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  19. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  20. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  21. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  22. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  23. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  24. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  25. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  26. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  27. package/src/duckdb/extension/parquet/parquet-extension.cpp +12 -2
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +1 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +26 -32
  30. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  31. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  32. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  33. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  34. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  35. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  36. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  37. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  38. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  39. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  40. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  41. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  42. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  43. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  44. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  45. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  46. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  47. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  48. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  49. package/src/duckdb/src/common/exception.cpp +15 -1
  50. package/src/duckdb/src/common/field_writer.cpp +1 -0
  51. package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
  52. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  53. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  54. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  55. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  56. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  57. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  58. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  59. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  60. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  61. package/src/duckdb/src/common/string_util.cpp +4 -1
  62. package/src/duckdb/src/common/types/bit.cpp +166 -87
  63. package/src/duckdb/src/common/types/blob.cpp +1 -1
  64. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  65. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  66. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +11 -6
  67. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  68. package/src/duckdb/src/common/types/interval.cpp +0 -41
  69. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  70. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  71. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  72. package/src/duckdb/src/common/types/time.cpp +13 -0
  73. package/src/duckdb/src/common/types/value.cpp +320 -154
  74. package/src/duckdb/src/common/types/vector.cpp +156 -128
  75. package/src/duckdb/src/common/types.cpp +313 -153
  76. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  77. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  78. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  79. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  80. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  81. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  82. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  83. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  84. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  85. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  86. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  87. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  88. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  89. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  90. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  91. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  92. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  93. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  94. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  95. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  96. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  97. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  98. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  99. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  100. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  101. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  102. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  103. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  104. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  105. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  106. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  107. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +0 -4
  108. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  109. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  110. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  111. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  112. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  113. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  114. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  115. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  116. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +1 -0
  117. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  118. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  119. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  120. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  121. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  122. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  123. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  124. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  126. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  128. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  129. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  130. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  131. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +58 -16
  132. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  133. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  134. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  135. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  136. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  137. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  138. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  139. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  140. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  141. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  142. package/src/duckdb/src/function/function_binder.cpp +1 -8
  143. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  144. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  145. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  146. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  147. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  148. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  149. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  150. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  151. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  152. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  153. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  154. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  155. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  156. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  157. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  158. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  159. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  160. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  161. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  162. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  163. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  164. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  165. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  166. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  167. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  168. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  169. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  170. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  171. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  172. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  173. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  174. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  175. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  176. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  177. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  178. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  180. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  181. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  182. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  183. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  184. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  185. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  186. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  187. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  188. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  189. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  190. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  191. package/src/duckdb/src/function/table_function.cpp +30 -11
  192. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  193. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  195. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  196. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  197. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  198. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  199. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  200. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  201. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  202. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  203. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  204. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  205. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  206. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  207. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  208. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  209. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  210. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  211. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  212. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  213. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  214. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  215. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  216. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  217. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  218. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  219. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  220. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  222. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  223. package/src/duckdb/src/include/duckdb/common/string_util.hpp +25 -0
  224. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  225. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  226. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  227. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  228. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  229. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  230. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  232. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  233. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  234. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  235. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  236. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  238. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  239. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  240. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  241. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  243. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  244. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  245. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  246. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  247. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  248. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  249. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  250. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  251. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  252. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  253. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  254. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  255. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  256. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  257. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  258. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  259. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  260. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  261. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  263. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  264. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  265. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  268. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  269. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  271. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  272. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  273. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  275. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  277. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  278. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  279. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  285. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  290. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  292. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  293. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  294. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  295. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  296. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  297. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  299. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  301. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  303. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  304. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  305. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  306. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  307. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  308. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  309. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  310. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  311. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  312. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  313. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  316. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  317. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  318. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  319. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  320. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  322. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  323. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  324. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  325. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  326. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  327. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  329. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  330. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  331. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  332. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  333. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  334. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  335. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  336. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  337. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  338. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  341. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  342. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  344. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  345. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  346. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  347. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  348. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  349. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  350. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  351. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  352. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  353. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  355. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  356. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  357. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  358. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  359. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  360. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  361. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  362. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  363. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  364. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  365. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  366. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  367. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  368. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  369. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  370. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  371. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  372. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  373. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  374. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  375. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  376. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  377. package/src/duckdb/src/include/duckdb.h +71 -2
  378. package/src/duckdb/src/include/duckdb.hpp +0 -1
  379. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  380. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  381. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  382. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  383. package/src/duckdb/src/main/client_context.cpp +38 -34
  384. package/src/duckdb/src/main/client_data.cpp +7 -6
  385. package/src/duckdb/src/main/config.cpp +70 -1
  386. package/src/duckdb/src/main/database.cpp +19 -2
  387. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  388. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  389. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  390. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  391. package/src/duckdb/src/main/relation.cpp +3 -2
  392. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  393. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  394. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  395. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  396. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  397. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  398. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  399. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  400. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  401. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  402. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  403. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  404. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  405. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  406. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  407. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  408. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  409. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  410. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  411. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  412. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  413. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  414. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  415. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  416. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  417. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  421. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  422. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  423. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  424. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  425. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  426. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  427. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  428. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  429. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  430. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  431. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  432. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  433. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  434. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  435. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  437. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  438. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  439. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  440. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  441. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  442. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  444. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  445. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  446. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  447. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  448. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  449. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  450. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  451. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  452. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  453. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  454. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  455. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  456. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  457. package/src/duckdb/src/parser/query_node.cpp +51 -1
  458. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  459. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  460. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  461. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  462. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  463. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  464. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  465. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  466. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  467. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  468. package/src/duckdb/src/parser/tableref.cpp +49 -0
  469. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  470. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  471. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  472. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  473. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  474. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  475. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  476. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  477. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  478. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  479. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  480. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  481. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  482. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  483. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  484. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  485. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  486. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  487. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  488. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  489. package/src/duckdb/src/parser/transformer.cpp +15 -3
  490. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  491. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  492. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  493. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  494. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  495. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  496. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  497. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  498. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  499. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  500. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  501. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  502. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  503. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  504. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  505. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  506. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  507. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  508. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  509. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  510. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  511. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  512. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  513. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  514. package/src/duckdb/src/planner/binder.cpp +19 -24
  515. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  516. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  517. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  518. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  519. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  520. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  521. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  522. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  523. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  524. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  525. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  526. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  527. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  528. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  529. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  530. package/src/duckdb/src/planner/planner.cpp +2 -1
  531. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  532. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  533. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  534. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  535. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  536. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  537. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  538. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  539. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  540. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  541. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  542. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  543. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  544. package/src/duckdb/src/storage/data_table.cpp +23 -23
  545. package/src/duckdb/src/storage/index.cpp +12 -1
  546. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  547. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  548. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  549. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  550. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  551. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  552. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  553. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  554. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  555. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  556. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  557. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  558. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  559. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  560. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  561. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  562. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  563. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  564. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  565. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  566. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  567. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  568. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  569. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  570. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  571. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  572. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  573. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  574. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  575. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  576. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  577. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  578. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  579. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  580. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  581. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  582. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  583. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  584. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  585. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  586. package/src/duckdb/ub_src_common_types.cpp +2 -0
  587. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  588. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  589. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  590. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  591. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  592. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  593. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  594. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  595. package/src/duckdb/ub_src_parser.cpp +2 -0
  596. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  597. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  598. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  599. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  600. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  601. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  602. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  603. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  604. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  605. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  606. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  607. package/src/duckdb_node.hpp +2 -1
  608. package/src/statement.cpp +5 -5
  609. package/src/utils.cpp +27 -2
  610. package/test/extension.test.ts +44 -26
  611. package/test/syntax_error.test.ts +3 -1
  612. package/filelist.cache +0 -0
  613. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  614. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  615. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  616. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  617. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  618. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  619. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  620. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  621. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  622. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  623. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  624. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  625. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -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;
@@ -806,6 +861,7 @@ static void ReadCSVAddNamedParameters(TableFunction &table_function) {
806
861
  table_function.named_parameters["buffer_size"] = LogicalType::UBIGINT;
807
862
  table_function.named_parameters["decimal_separator"] = LogicalType::VARCHAR;
808
863
  table_function.named_parameters["parallel"] = LogicalType::BOOLEAN;
864
+ table_function.named_parameters["null_padding"] = LogicalType::BOOLEAN;
809
865
  }
810
866
 
811
867
  double CSVReaderProgress(ClientContext &context, const FunctionData *bind_data_p,
@@ -873,6 +929,7 @@ void BufferedCSVReaderOptions::Serialize(FieldWriter &writer) const {
873
929
  // read options
874
930
  writer.WriteList<string>(names);
875
931
  writer.WriteField<idx_t>(skip_rows);
932
+ writer.WriteField<bool>(skip_rows_set);
876
933
  writer.WriteField<idx_t>(maximum_line_size);
877
934
  writer.WriteField<bool>(normalize_names);
878
935
  writer.WriteListNoReference<bool>(force_not_null);
@@ -884,6 +941,7 @@ void BufferedCSVReaderOptions::Serialize(FieldWriter &writer) const {
884
941
  writer.WriteField<bool>(include_file_name);
885
942
  writer.WriteField<bool>(include_parsed_hive_partitions);
886
943
  writer.WriteString(decimal_separator);
944
+ writer.WriteField<bool>(null_padding);
887
945
  // write options
888
946
  writer.WriteListNoReference<bool>(force_quote);
889
947
  }
@@ -906,6 +964,7 @@ void BufferedCSVReaderOptions::Deserialize(FieldReader &reader) {
906
964
  // read options
907
965
  names = reader.ReadRequiredList<string>();
908
966
  skip_rows = reader.ReadRequired<idx_t>();
967
+ skip_rows_set = reader.ReadRequired<bool>();
909
968
  maximum_line_size = reader.ReadRequired<idx_t>();
910
969
  normalize_names = reader.ReadRequired<bool>();
911
970
  force_not_null = reader.ReadRequiredList<bool>();
@@ -917,6 +976,7 @@ void BufferedCSVReaderOptions::Deserialize(FieldReader &reader) {
917
976
  include_file_name = reader.ReadRequired<bool>();
918
977
  include_parsed_hive_partitions = reader.ReadRequired<bool>();
919
978
  decimal_separator = reader.ReadRequired<string>();
979
+ null_padding = reader.ReadRequired<bool>();
920
980
  // write options
921
981
  force_quote = reader.ReadRequiredList<bool>();
922
982
  }
@@ -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)));
@@ -1,6 +1,5 @@
1
1
  #include "duckdb/function/table/table_scan.hpp"
2
2
 
3
- #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp"
4
3
  #include "duckdb/catalog/catalog_entry/duck_table_entry.hpp"
5
4
  #include "duckdb/common/field_writer.hpp"
6
5
  #include "duckdb/common/mutex.hpp"
@@ -15,6 +14,7 @@
15
14
  #include "duckdb/main/attached_database.hpp"
16
15
  #include "duckdb/catalog/dependency_list.hpp"
17
16
  #include "duckdb/function/function_set.hpp"
17
+ #include "duckdb/storage/table/scan_state.hpp"
18
18
 
19
19
  namespace duckdb {
20
20
 
@@ -40,17 +40,14 @@ static storage_t GetStorageIndex(TableCatalogEntry &table, column_t column_id) {
40
40
  }
41
41
 
42
42
  struct TableScanGlobalState : public GlobalTableFunctionState {
43
- TableScanGlobalState(ClientContext &context, const FunctionData *bind_data_p) : row_count(0) {
43
+ TableScanGlobalState(ClientContext &context, const FunctionData *bind_data_p) {
44
44
  D_ASSERT(bind_data_p);
45
45
  auto &bind_data = (const TableScanBindData &)*bind_data_p;
46
46
  max_threads = bind_data.table->GetStorage().MaxThreads(context);
47
47
  }
48
48
 
49
49
  ParallelTableScanState state;
50
- mutex lock;
51
50
  idx_t max_threads;
52
- //! How many rows we already scanned
53
- atomic<idx_t> row_count;
54
51
 
55
52
  vector<idx_t> projection_ids;
56
53
  vector<LogicalType> scanned_types;
@@ -131,7 +128,6 @@ static void TableScanFunc(ClientContext &context, TableFunctionInput &data_p, Da
131
128
  storage.Scan(transaction, output, state.scan_state);
132
129
  }
133
130
  if (output.size() > 0) {
134
- gstate.row_count += output.size();
135
131
  return;
136
132
  }
137
133
  if (!TableScanParallelStateNext(context, data_p.bind_data, data_p.local_state, data_p.global_state)) {
@@ -147,7 +143,6 @@ bool TableScanParallelStateNext(ClientContext &context, const FunctionData *bind
147
143
  auto &state = (TableScanLocalState &)*local_state;
148
144
  auto &storage = bind_data.table->GetStorage();
149
145
 
150
- lock_guard<mutex> parallel_lock(parallel_state.lock);
151
146
  return storage.NextParallelScan(context, parallel_state.state, state.scan_state);
152
147
  }
153
148
 
@@ -161,7 +156,9 @@ double TableScanProgress(ClientContext &context, const FunctionData *bind_data_p
161
156
  //! Table is either empty or smaller than a vector size, so it is finished
162
157
  return 100;
163
158
  }
164
- auto percentage = 100 * (double(gstate.row_count) / total_rows);
159
+ idx_t scanned_rows = gstate.state.scan_state.processed_rows;
160
+ scanned_rows += gstate.state.local_state.processed_rows;
161
+ auto percentage = 100 * (double(scanned_rows) / total_rows);
165
162
  if (percentage > 100) {
166
163
  //! In case the last chunk has less elements than STANDARD_VECTOR_SIZE, if our percentage is over 100
167
164
  //! It means we finished this table.
@@ -171,12 +168,12 @@ double TableScanProgress(ClientContext &context, const FunctionData *bind_data_p
171
168
  }
172
169
 
173
170
  idx_t TableScanGetBatchIndex(ClientContext &context, const FunctionData *bind_data_p,
174
- LocalTableFunctionState *local_state, GlobalTableFunctionState *global_state) {
171
+ LocalTableFunctionState *local_state, GlobalTableFunctionState *gstate_p) {
175
172
  auto &state = (TableScanLocalState &)*local_state;
176
- if (state.scan_state.table_state.row_group_state.row_group) {
173
+ if (state.scan_state.table_state.row_group) {
177
174
  return state.scan_state.table_state.batch_index;
178
175
  }
179
- if (state.scan_state.local_state.row_group_state.row_group) {
176
+ if (state.scan_state.local_state.row_group) {
180
177
  return state.scan_state.table_state.batch_index + state.scan_state.local_state.batch_index;
181
178
  }
182
179
  return 0;
@@ -332,7 +329,7 @@ void TableScanPushdownComplexFilter(ClientContext &context, LogicalGet &get, Fun
332
329
  auto comparison_type = comparison->type;
333
330
  if (comparison->left->type == ExpressionType::VALUE_CONSTANT) {
334
331
  // the expression is on the right side, we flip them around
335
- comparison_type = FlipComparisionExpression(comparison_type);
332
+ comparison_type = FlipComparisonExpression(comparison_type);
336
333
  }
337
334
  if (comparison_type == ExpressionType::COMPARE_EQUAL) {
338
335
  // 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-dev1138"
3
3
  #endif
4
4
  #ifndef DUCKDB_SOURCE_ID
5
- #define DUCKDB_SOURCE_ID "b00b93f0b1"
5
+ #define DUCKDB_SOURCE_ID "41104b611e"
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
@@ -12,6 +12,7 @@
12
12
  #include "duckdb/common/unordered_set.hpp"
13
13
 
14
14
  namespace duckdb {
15
+ class Catalog;
15
16
  class CatalogEntry;
16
17
 
17
18
  //! The DependencyList
@@ -21,6 +22,8 @@ class DependencyList {
21
22
  public:
22
23
  DUCKDB_API void AddDependency(CatalogEntry *entry);
23
24
 
25
+ DUCKDB_API void VerifyDependencies(Catalog *catalog, const string &name);
26
+
24
27
  private:
25
28
  unordered_set<CatalogEntry *> set;
26
29
  };
@@ -59,8 +59,9 @@ public:
59
59
  DUCKDB_API string GetDBPath() override;
60
60
 
61
61
  private:
62
+ DUCKDB_API void DropSchema(CatalogTransaction transaction, DropInfo *info);
62
63
  DUCKDB_API void DropSchema(ClientContext &context, DropInfo *info) override;
63
-
64
+ CatalogEntry *CreateSchemaInternal(CatalogTransaction transaction, CreateSchemaInfo *info);
64
65
  void Verify() override;
65
66
 
66
67
  private:
@@ -18,6 +18,7 @@ class ColumnDataCollection;
18
18
  class ColumnDataRowCollection;
19
19
 
20
20
  enum class ValueRenderAlignment { LEFT, MIDDLE, RIGHT };
21
+ enum class RenderMode { ROWS, COLUMNS };
21
22
 
22
23
  struct BoxRendererConfig {
23
24
  // a max_width of 0 means we default to the terminal width
@@ -30,7 +31,10 @@ struct BoxRendererConfig {
30
31
  // the max col width determines the maximum size of a single column
31
32
  // note that the max col width is only used if the result does not fit on the screen
32
33
  idx_t max_col_width = 20;
34
+ //! how to render NULL values
33
35
  string null_value = "NULL";
36
+ //! Whether or not to render row-wise or column-wise
37
+ RenderMode render_mode = RenderMode::ROWS;
34
38
 
35
39
  #ifndef DUCKDB_ASCII_TREE_RENDERER
36
40
  const char *LTCORNER = "\342\224\214"; // "┌";
@@ -94,10 +98,12 @@ private:
94
98
  string RenderType(const LogicalType &type);
95
99
  ValueRenderAlignment TypeAlignment(const LogicalType &type);
96
100
  string GetRenderValue(ColumnDataRowCollection &rows, idx_t c, idx_t r);
97
-
98
101
  list<ColumnDataCollection> FetchRenderCollections(ClientContext &context, const ColumnDataCollection &result,
99
102
  idx_t top_rows, idx_t bottom_rows);
100
- vector<idx_t> ComputeRenderWidths(const vector<string> &names, const ColumnDataCollection &result,
103
+ list<ColumnDataCollection> PivotCollections(ClientContext &context, list<ColumnDataCollection> input,
104
+ vector<string> &column_names, vector<LogicalType> &result_types,
105
+ idx_t row_count);
106
+ vector<idx_t> ComputeRenderWidths(const vector<string> &names, const vector<LogicalType> &result_types,
101
107
  list<ColumnDataCollection> &collections, idx_t min_width, idx_t max_width,
102
108
  vector<idx_t> &column_map, idx_t &total_length);
103
109
  void RenderHeader(const vector<string> &names, const vector<LogicalType> &result_types,
@@ -15,25 +15,6 @@
15
15
 
16
16
  namespace duckdb {
17
17
 
18
- // API versions
19
- // if no explicit API version is defined, the latest API version is used
20
- // Note that using older API versions (i.e. not using DUCKDB_API_LATEST) is deprecated.
21
- // These will not be supported long-term, and will be removed in future versions.
22
-
23
- #ifndef DUCKDB_API_0_3_1
24
- #define DUCKDB_API_0_3_1 1
25
- #endif
26
- #ifndef DUCKDB_API_0_3_2
27
- #define DUCKDB_API_0_3_2 2
28
- #endif
29
- #ifndef DUCKDB_API_LATEST
30
- #define DUCKDB_API_LATEST DUCKDB_API_0_3_2
31
- #endif
32
-
33
- #ifndef DUCKDB_API_VERSION
34
- #define DUCKDB_API_VERSION DUCKDB_API_LATEST
35
- #endif
36
-
37
18
  //! inline std directives that we use frequently
38
19
  #ifndef DUCKDB_DEBUG_MOVE
39
20
  using std::move;
@@ -19,4 +19,6 @@ enum class AggregateHandling : uint8_t {
19
19
  FORCE_AGGREGATES // force aggregates: any non-aggregate select list entry will become a GROUP
20
20
  };
21
21
 
22
+ const char *ToString(AggregateHandling value);
23
+
22
24
  } // namespace duckdb
@@ -205,11 +205,10 @@ string ExpressionTypeToOperator(ExpressionType type);
205
205
 
206
206
  // Operator String to ExpressionType (e.g. + => OPERATOR_ADD)
207
207
  ExpressionType OperatorToExpressionType(const string &op);
208
-
209
208
  //! Negate a comparison expression, turning e.g. = into !=, or < into >=
210
- ExpressionType NegateComparisionExpression(ExpressionType type);
209
+ ExpressionType NegateComparisonExpression(ExpressionType type);
211
210
  //! Flip a comparison expression, turning e.g. < into >, or = into =
212
- ExpressionType FlipComparisionExpression(ExpressionType type);
211
+ ExpressionType FlipComparisonExpression(ExpressionType type);
213
212
 
214
213
  DUCKDB_API string ExpressionClassToString(ExpressionClass type);
215
214
 
@@ -16,10 +16,13 @@ namespace duckdb {
16
16
  // Join Reference Types
17
17
  //===--------------------------------------------------------------------===//
18
18
  enum class JoinRefType : uint8_t {
19
- REGULAR, // Explicit conditions
20
- NATURAL, // Implied conditions
21
- CROSS, // No condition
22
- POSITIONAL // Positional condition
19
+ REGULAR, // Explicit conditions
20
+ NATURAL, // Implied conditions
21
+ CROSS, // No condition
22
+ POSITIONAL, // Positional condition
23
+ ASOF // AsOf conditions
23
24
  };
24
25
 
26
+ const char *ToString(JoinRefType value);
27
+
25
28
  } // namespace duckdb
@@ -49,6 +49,7 @@ enum class LogicalOperatorType : uint8_t {
49
49
  LOGICAL_ANY_JOIN = 53,
50
50
  LOGICAL_CROSS_PRODUCT = 54,
51
51
  LOGICAL_POSITIONAL_JOIN = 55,
52
+ LOGICAL_ASOF_JOIN = 56,
52
53
  // -----------------------------
53
54
  // SetOps
54
55
  // -----------------------------
@@ -9,10 +9,12 @@
9
9
  #pragma once
10
10
 
11
11
  #include "duckdb/common/constants.hpp"
12
+ #include "duckdb/common/exception.hpp"
12
13
 
13
14
  namespace duckdb {
14
15
 
15
16
  enum class OrderType : uint8_t { INVALID = 0, ORDER_DEFAULT = 1, ASCENDING = 2, DESCENDING = 3 };
17
+
16
18
  enum class OrderByNullType : uint8_t { INVALID = 0, ORDER_DEFAULT = 1, NULLS_FIRST = 2, NULLS_LAST = 3 };
17
19
 
18
20
  } // namespace duckdb
@@ -13,4 +13,5 @@
13
13
  namespace duckdb {
14
14
 
15
15
  enum class SetOperationType : uint8_t { NONE = 0, UNION = 1, EXCEPT = 2, INTERSECT = 3, UNION_BY_NAME = 4 };
16
- }
16
+
17
+ } // namespace duckdb
@@ -44,7 +44,8 @@ enum class StatementType : uint8_t {
44
44
  EXTENSION_STATEMENT,
45
45
  LOGICAL_PLAN_STATEMENT,
46
46
  ATTACH_STATEMENT,
47
- DETACH_STATEMENT
47
+ DETACH_STATEMENT,
48
+ MULTI_STATEMENT
48
49
 
49
50
  };
50
51
 
@@ -23,7 +23,8 @@ enum class TableReferenceType : uint8_t {
23
23
  TABLE_FUNCTION = 5, // table producing function
24
24
  EXPRESSION_LIST = 6, // expression list
25
25
  CTE = 7, // Recursive CTE
26
- EMPTY = 8 // placeholder for empty FROM
26
+ EMPTY = 8, // placeholder for empty FROM
27
+ PIVOT = 9 // pivot statement
27
28
  };
28
29
 
29
30
  } // namespace duckdb