duckdb 0.7.1 → 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
@@ -18,8 +18,7 @@
18
18
 
19
19
  #include "duckdb.hpp"
20
20
  #ifndef DUCKDB_AMALGAMATION
21
- #include "duckdb/storage/statistics/string_statistics.hpp"
22
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
21
+
23
22
  #include "duckdb/common/types/vector.hpp"
24
23
  #include "duckdb/common/types/string_type.hpp"
25
24
  #include "duckdb/common/types/chunk_collection.hpp"
@@ -11,7 +11,7 @@ public:
11
11
  return (n >> 1) ^ -(n & 1);
12
12
  }
13
13
 
14
- static const uint32_t BITPACK_MASKS[];
14
+ static const uint64_t BITPACK_MASKS[];
15
15
  static const uint8_t BITPACK_DLEN;
16
16
 
17
17
  template <typename T>
@@ -23,7 +23,7 @@ public:
23
23
  bitpack_pos += width;
24
24
  while (bitpack_pos > BITPACK_DLEN) {
25
25
  buffer.inc(1);
26
- val |= (buffer.get<uint8_t>() << (BITPACK_DLEN - (bitpack_pos - width))) & mask;
26
+ val |= (T(buffer.get<uint8_t>()) << T(BITPACK_DLEN - (bitpack_pos - width))) & mask;
27
27
  bitpack_pos -= BITPACK_DLEN;
28
28
  }
29
29
  dest[i] = val;
@@ -37,9 +37,10 @@ public:
37
37
  uint8_t shift = 0;
38
38
  while (true) {
39
39
  auto byte = buf.read<uint8_t>();
40
- result |= (byte & 127) << shift;
41
- if ((byte & 128) == 0)
40
+ result |= T(byte & 127) << shift;
41
+ if ((byte & 128) == 0) {
42
42
  break;
43
+ }
43
44
  shift += 7;
44
45
  if (shift > sizeof(T) * 8) {
45
46
  throw std::runtime_error("Varint-decoding found too large number");
@@ -29,17 +29,7 @@ public:
29
29
  Vector &result) override;
30
30
 
31
31
  unique_ptr<BaseStatistics> Stats(idx_t row_group_idx_p, const std::vector<ColumnChunk> &columns) override {
32
- switch (type.id()) {
33
- case LogicalTypeId::VARCHAR: {
34
- auto string_stats = make_unique<StringStatistics>(type, StatisticsType::LOCAL_STATS);
35
- string string = constant.ToString();
36
- string_stats->Update(string);
37
- string_stats->max_string_length = string.length();
38
- return std::move(string_stats);
39
- }
40
- default:
41
- return nullptr;
42
- }
32
+ return BaseStatistics::FromConstant(constant).ToUnique();
43
33
  };
44
34
 
45
35
  void InitializeRead(idx_t row_group_idx_p, const std::vector<ColumnChunk> &columns,
@@ -16,13 +16,14 @@ struct Int96 {
16
16
  uint32_t value[3];
17
17
  };
18
18
 
19
- int64_t ImpalaTimestampToNanoseconds(const Int96 &impala_timestamp);
20
19
  timestamp_t ImpalaTimestampToTimestamp(const Int96 &raw_ts);
21
20
  Int96 TimestampToImpalaTimestamp(timestamp_t &ts);
22
21
  timestamp_t ParquetTimestampMicrosToTimestamp(const int64_t &raw_ts);
23
22
  timestamp_t ParquetTimestampMsToTimestamp(const int64_t &raw_ts);
24
23
  timestamp_t ParquetTimestampNsToTimestamp(const int64_t &raw_ts);
25
24
  date_t ParquetIntToDate(const int32_t &raw_date);
25
+ dtime_t ParquetIntToTimeMs(const int64_t &raw_time);
26
26
  dtime_t ParquetIntToTime(const int64_t &raw_time);
27
+ dtime_t ParquetIntToTimeNs(const int64_t &raw_time);
27
28
 
28
29
  } // namespace duckdb
@@ -354,6 +354,7 @@ public:
354
354
  return_types.assign(union_col_types.begin(), union_col_types.end());
355
355
  result->SetInitialReader(result->union_readers[0]);
356
356
  D_ASSERT(names.size() == return_types.size());
357
+ result->types = union_col_types;
357
358
 
358
359
  return std::move(result);
359
360
  }
@@ -368,7 +369,10 @@ public:
368
369
  if (!config.options.enable_external_access) {
369
370
  throw PermissionException("Scanning Parquet files is disabled through configuration");
370
371
  }
371
- auto file_name = input.inputs[0].GetValue<string>();
372
+ if (input.inputs[0].IsNull()) {
373
+ throw ParserException("Parquet reader cannot take NULL list as parameter");
374
+ }
375
+ auto file_name = StringValue::Get(input.inputs[0]);
372
376
  ParquetOptions parquet_options(context);
373
377
  for (auto &kv : input.named_parameters) {
374
378
  auto loption = StringUtil::Lower(kv.first);
@@ -395,10 +399,16 @@ public:
395
399
  if (!config.options.enable_external_access) {
396
400
  throw PermissionException("Scanning Parquet files is disabled through configuration");
397
401
  }
402
+ if (input.inputs[0].IsNull()) {
403
+ throw ParserException("Parquet reader cannot take NULL list as parameter");
404
+ }
398
405
  FileSystem &fs = FileSystem::GetFileSystem(context);
399
406
  vector<string> files;
400
407
  for (auto &val : ListValue::GetChildren(input.inputs[0])) {
401
- auto glob_files = ParquetGlob(fs, val.ToString(), context);
408
+ if (val.IsNull()) {
409
+ throw ParserException("Parquet reader cannot take NULL input as parameter");
410
+ }
411
+ auto glob_files = ParquetGlob(fs, StringValue::Get(val), context);
402
412
  files.insert(files.end(), glob_files.begin(), glob_files.end());
403
413
  }
404
414
  if (files.empty()) {
@@ -320,7 +320,7 @@ unique_ptr<ColumnReader> ParquetReader::CreateReaderRecursive(const FileMetaData
320
320
  std::move(struct_reader));
321
321
  }
322
322
  if (child_types.size() > 1 || (!is_list && !is_map && !is_repeated)) {
323
- result_type = LogicalType::STRUCT(std::move(child_types));
323
+ result_type = LogicalType::STRUCT(child_types);
324
324
  result = make_unique<StructColumnReader>(*this, result_type, s_ele, this_idx, max_define, max_repeat,
325
325
  std::move(child_readers));
326
326
  } else {
@@ -6,8 +6,7 @@
6
6
  #ifndef DUCKDB_AMALGAMATION
7
7
  #include "duckdb/common/types/blob.hpp"
8
8
  #include "duckdb/common/types/value.hpp"
9
- #include "duckdb/storage/statistics/numeric_statistics.hpp"
10
- #include "duckdb/storage/statistics/string_statistics.hpp"
9
+
11
10
  #endif
12
11
 
13
12
  namespace duckdb {
@@ -18,27 +17,29 @@ using duckdb_parquet::format::Type;
18
17
  static unique_ptr<BaseStatistics> CreateNumericStats(const LogicalType &type,
19
18
  const duckdb_parquet::format::SchemaElement &schema_ele,
20
19
  const duckdb_parquet::format::Statistics &parquet_stats) {
21
- auto stats = make_unique<NumericStatistics>(type, StatisticsType::LOCAL_STATS);
20
+ auto stats = NumericStats::CreateUnknown(type);
22
21
 
23
22
  // for reasons unknown to science, Parquet defines *both* `min` and `min_value` as well as `max` and
24
23
  // `max_value`. All are optional. such elegance.
24
+ Value min;
25
+ Value max;
25
26
  if (parquet_stats.__isset.min) {
26
- stats->min = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min).DefaultCastAs(type);
27
+ min = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min).DefaultCastAs(type);
27
28
  } else if (parquet_stats.__isset.min_value) {
28
- stats->min =
29
- ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min_value).DefaultCastAs(type);
29
+ min = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.min_value).DefaultCastAs(type);
30
30
  } else {
31
- stats->min = Value(type);
31
+ min = Value(type);
32
32
  }
33
33
  if (parquet_stats.__isset.max) {
34
- stats->max = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max).DefaultCastAs(type);
34
+ max = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max).DefaultCastAs(type);
35
35
  } else if (parquet_stats.__isset.max_value) {
36
- stats->max =
37
- ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max_value).DefaultCastAs(type);
36
+ max = ParquetStatisticsUtils::ConvertValue(type, schema_ele, parquet_stats.max_value).DefaultCastAs(type);
38
37
  } else {
39
- stats->max = Value(type);
38
+ max = Value(type);
40
39
  }
41
- return std::move(stats);
40
+ NumericStats::SetMin(stats, min);
41
+ NumericStats::SetMax(stats, max);
42
+ return stats.ToUnique();
42
43
  }
43
44
 
44
45
  Value ParquetStatisticsUtils::ConvertValue(const LogicalType &type,
@@ -228,24 +229,24 @@ unique_ptr<BaseStatistics> ParquetStatisticsUtils::TransformColumnStatistics(con
228
229
  row_group_stats = CreateNumericStats(type, s_ele, parquet_stats);
229
230
  break;
230
231
  case LogicalTypeId::VARCHAR: {
231
- auto string_stats = make_unique<StringStatistics>(type, StatisticsType::LOCAL_STATS);
232
+ auto string_stats = StringStats::CreateEmpty(type);
232
233
  if (parquet_stats.__isset.min) {
233
- string_stats->Update(parquet_stats.min);
234
+ StringStats::Update(string_stats, parquet_stats.min);
234
235
  } else if (parquet_stats.__isset.min_value) {
235
- string_stats->Update(parquet_stats.min_value);
236
+ StringStats::Update(string_stats, parquet_stats.min_value);
236
237
  } else {
237
238
  return nullptr;
238
239
  }
239
240
  if (parquet_stats.__isset.max) {
240
- string_stats->Update(parquet_stats.max);
241
+ StringStats::Update(string_stats, parquet_stats.max);
241
242
  } else if (parquet_stats.__isset.max_value) {
242
- string_stats->Update(parquet_stats.max_value);
243
+ StringStats::Update(string_stats, parquet_stats.max_value);
243
244
  } else {
244
245
  return nullptr;
245
246
  }
246
- string_stats->has_unicode = true; // we dont know better
247
- string_stats->max_string_length = NumericLimits<uint32_t>::Maximum();
248
- row_group_stats = std::move(string_stats);
247
+ StringStats::SetContainsUnicode(string_stats);
248
+ StringStats::ResetMaxStringLength(string_stats);
249
+ row_group_stats = string_stats.ToUnique();
249
250
  break;
250
251
  }
251
252
  default:
@@ -254,21 +255,14 @@ unique_ptr<BaseStatistics> ParquetStatisticsUtils::TransformColumnStatistics(con
254
255
  } // end of type switch
255
256
 
256
257
  // null count is generic
257
- if (row_group_stats) {
258
- if (column_chunk.meta_data.type == duckdb_parquet::format::Type::FLOAT ||
259
- column_chunk.meta_data.type == duckdb_parquet::format::Type::DOUBLE) {
260
- // floats/doubles can have infinity, which can become NULL
261
- row_group_stats->validity_stats = make_unique<ValidityStatistics>(true);
262
- } else if (parquet_stats.__isset.null_count) {
263
- row_group_stats->validity_stats = make_unique<ValidityStatistics>(parquet_stats.null_count != 0);
264
- } else {
265
- row_group_stats->validity_stats = make_unique<ValidityStatistics>(true);
266
- }
267
- } else {
258
+ if (!row_group_stats) {
268
259
  // if stats are missing from any row group we know squat
269
260
  return nullptr;
270
261
  }
271
-
262
+ row_group_stats->Set(StatsInfo::CAN_HAVE_NULL_AND_VALID_VALUES);
263
+ if (parquet_stats.__isset.null_count && parquet_stats.null_count == 0) {
264
+ row_group_stats->Set(StatsInfo::CANNOT_HAVE_NULL_VALUES);
265
+ }
272
266
  return row_group_stats;
273
267
  }
274
268
 
@@ -12,24 +12,26 @@ namespace duckdb {
12
12
  // surely they are joking
13
13
  static constexpr int64_t JULIAN_TO_UNIX_EPOCH_DAYS = 2440588LL;
14
14
  static constexpr int64_t MILLISECONDS_PER_DAY = 86400000LL;
15
- static constexpr int64_t NANOSECONDS_PER_DAY = MILLISECONDS_PER_DAY * 1000LL * 1000LL;
15
+ static constexpr int64_t MICROSECONDS_PER_DAY = MILLISECONDS_PER_DAY * 1000LL;
16
+ static constexpr int64_t NANOSECONDS_PER_MICRO = 1000LL;
16
17
 
17
- int64_t ImpalaTimestampToNanoseconds(const Int96 &impala_timestamp) {
18
+ static int64_t ImpalaTimestampToMicroseconds(const Int96 &impala_timestamp) {
18
19
  int64_t days_since_epoch = impala_timestamp.value[2] - JULIAN_TO_UNIX_EPOCH_DAYS;
19
20
  auto nanoseconds = Load<int64_t>((data_ptr_t)impala_timestamp.value);
20
- return days_since_epoch * NANOSECONDS_PER_DAY + nanoseconds;
21
+ auto microseconds = nanoseconds / NANOSECONDS_PER_MICRO;
22
+ return days_since_epoch * MICROSECONDS_PER_DAY + microseconds;
21
23
  }
22
24
 
23
25
  timestamp_t ImpalaTimestampToTimestamp(const Int96 &raw_ts) {
24
- auto impala_ns = ImpalaTimestampToNanoseconds(raw_ts);
25
- return Timestamp::FromEpochNanoSeconds(impala_ns);
26
+ auto impala_us = ImpalaTimestampToMicroseconds(raw_ts);
27
+ return Timestamp::FromEpochMicroSeconds(impala_us);
26
28
  }
27
29
 
28
30
  Int96 TimestampToImpalaTimestamp(timestamp_t &ts) {
29
31
  int32_t hour, min, sec, msec;
30
32
  Time::Convert(Timestamp::GetTime(ts), hour, min, sec, msec);
31
33
  uint64_t ms_since_midnight = hour * 60 * 60 * 1000 + min * 60 * 1000 + sec * 1000 + msec;
32
- auto days_since_epoch = Date::Epoch(Timestamp::GetDate(ts)) / (24 * 60 * 60);
34
+ auto days_since_epoch = Date::Epoch(Timestamp::GetDate(ts)) / int64_t(24 * 60 * 60);
33
35
  // first two uint32 in Int96 are nanoseconds since midnights
34
36
  // last uint32 is number of days since year 4713 BC ("Julian date")
35
37
  Int96 impala_ts;
@@ -52,8 +54,16 @@ date_t ParquetIntToDate(const int32_t &raw_date) {
52
54
  return date_t(raw_date);
53
55
  }
54
56
 
57
+ dtime_t ParquetIntToTimeMs(const int64_t &raw_time) {
58
+ return Time::FromTimeMs(raw_time);
59
+ }
60
+
55
61
  dtime_t ParquetIntToTime(const int64_t &raw_time) {
56
62
  return dtime_t(raw_time);
57
63
  }
58
64
 
65
+ dtime_t ParquetIntToTimeNs(const int64_t &raw_time) {
66
+ return Time::FromTimeNs(raw_time);
67
+ }
68
+
59
69
  } // namespace duckdb
@@ -63,20 +63,28 @@ Catalog &Catalog::GetSystemCatalog(ClientContext &context) {
63
63
  return Catalog::GetSystemCatalog(*context.db);
64
64
  }
65
65
 
66
- Catalog &Catalog::GetCatalog(ClientContext &context, const string &catalog_name) {
66
+ optional_ptr<Catalog> Catalog::GetCatalogEntry(ClientContext &context, const string &catalog_name) {
67
67
  auto &db_manager = DatabaseManager::Get(context);
68
68
  if (catalog_name == TEMP_CATALOG) {
69
- return ClientData::Get(context).temporary_objects->GetCatalog();
69
+ return &ClientData::Get(context).temporary_objects->GetCatalog();
70
70
  }
71
71
  if (catalog_name == SYSTEM_CATALOG) {
72
- return GetSystemCatalog(context);
72
+ return &GetSystemCatalog(context);
73
73
  }
74
74
  auto entry = db_manager.GetDatabase(
75
75
  context, IsInvalidCatalog(catalog_name) ? DatabaseManager::GetDefaultDatabase(context) : catalog_name);
76
76
  if (!entry) {
77
+ return nullptr;
78
+ }
79
+ return &entry->GetCatalog();
80
+ }
81
+
82
+ Catalog &Catalog::GetCatalog(ClientContext &context, const string &catalog_name) {
83
+ auto catalog = Catalog::GetCatalogEntry(context, catalog_name);
84
+ if (!catalog) {
77
85
  throw BinderException("Catalog \"%s\" does not exist!", catalog_name);
78
86
  }
79
- return entry->GetCatalog();
87
+ return *catalog;
80
88
  }
81
89
 
82
90
  //===--------------------------------------------------------------------===//
@@ -576,7 +584,15 @@ CatalogEntry *Catalog::GetEntry(ClientContext &context, CatalogType type, const
576
584
  vector<CatalogLookup> lookups;
577
585
  lookups.reserve(entries.size());
578
586
  for (auto &entry : entries) {
579
- lookups.emplace_back(Catalog::GetCatalog(context, entry.catalog), entry.schema);
587
+ if (if_exists_p) {
588
+ auto catalog_entry = Catalog::GetCatalogEntry(context, entry.catalog);
589
+ if (!catalog_entry) {
590
+ return nullptr;
591
+ }
592
+ lookups.emplace_back(*catalog_entry, entry.schema);
593
+ } else {
594
+ lookups.emplace_back(Catalog::GetCatalog(context, entry.catalog), entry.schema);
595
+ }
580
596
  }
581
597
  auto result = LookupEntry(context, lookups, type, name, if_exists_p, error_context);
582
598
  if (!result.Found()) {
@@ -625,6 +641,19 @@ vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context) {
625
641
  return schemas;
626
642
  }
627
643
 
644
+ bool Catalog::TypeExists(ClientContext &context, const string &catalog_name, const string &schema, const string &name) {
645
+ CatalogEntry *entry;
646
+ entry = GetEntry(context, CatalogType::TYPE_ENTRY, catalog_name, schema, name, true);
647
+ if (!entry) {
648
+ // look in the system catalog
649
+ entry = GetEntry(context, CatalogType::TYPE_ENTRY, SYSTEM_CATALOG, schema, name, true);
650
+ if (!entry) {
651
+ return false;
652
+ }
653
+ }
654
+ return true;
655
+ }
656
+
628
657
  vector<SchemaCatalogEntry *> Catalog::GetSchemas(ClientContext &context, const string &catalog_name) {
629
658
  vector<Catalog *> catalogs;
630
659
  if (IsInvalidCatalog(catalog_name)) {
@@ -145,6 +145,10 @@ CatalogEntry *DuckSchemaEntry::CreateFunction(CatalogTransaction transaction, Cr
145
145
  function = make_unique_base<StandardEntry, ScalarFunctionCatalogEntry>(catalog, this,
146
146
  (CreateScalarFunctionInfo *)info);
147
147
  break;
148
+ case CatalogType::TABLE_FUNCTION_ENTRY:
149
+ function =
150
+ make_unique_base<StandardEntry, TableFunctionCatalogEntry>(catalog, this, (CreateTableFunctionInfo *)info);
151
+ break;
148
152
  case CatalogType::MACRO_ENTRY:
149
153
  // create a macro function
150
154
  function = make_unique_base<StandardEntry, ScalarMacroCatalogEntry>(catalog, this, (CreateMacroInfo *)info);
@@ -682,27 +682,8 @@ void DuckTableEntry::SetAsRoot() {
682
682
  storage->info->table = name;
683
683
  }
684
684
 
685
- void DuckTableEntry::CommitAlter(AlterInfo &info) {
686
- D_ASSERT(info.type == AlterType::ALTER_TABLE);
687
- auto &alter_table = (AlterTableInfo &)info;
688
- string column_name;
689
- switch (alter_table.alter_table_type) {
690
- case AlterTableType::REMOVE_COLUMN: {
691
- auto &remove_info = (RemoveColumnInfo &)alter_table;
692
- column_name = remove_info.removed_column;
693
- break;
694
- }
695
- case AlterTableType::ALTER_COLUMN_TYPE: {
696
- auto &change_info = (ChangeColumnTypeInfo &)alter_table;
697
- column_name = change_info.column_name;
698
- break;
699
- }
700
- default:
701
- break;
702
- }
703
- if (column_name.empty()) {
704
- return;
705
- }
685
+ void DuckTableEntry::CommitAlter(string &column_name) {
686
+ D_ASSERT(!column_name.empty());
706
687
  idx_t removed_index = DConstants::INVALID_INDEX;
707
688
  for (auto &col : columns.Logical()) {
708
689
  if (col.Name() == column_name) {
@@ -1,5 +1,5 @@
1
1
  #include "duckdb/catalog/catalog_entry/scalar_function_catalog_entry.hpp"
2
- #include "duckdb/parser/parsed_data/alter_function_info.hpp"
2
+ #include "duckdb/parser/parsed_data/alter_scalar_function_info.hpp"
3
3
 
4
4
  namespace duckdb {
5
5
 
@@ -9,14 +9,15 @@ ScalarFunctionCatalogEntry::ScalarFunctionCatalogEntry(Catalog *catalog, SchemaC
9
9
  }
10
10
 
11
11
  unique_ptr<CatalogEntry> ScalarFunctionCatalogEntry::AlterEntry(ClientContext &context, AlterInfo *info) {
12
- if (info->type != AlterType::ALTER_FUNCTION) {
12
+ if (info->type != AlterType::ALTER_SCALAR_FUNCTION) {
13
13
  throw InternalException("Attempting to alter ScalarFunctionCatalogEntry with unsupported alter type");
14
14
  }
15
- auto &function_info = (AlterFunctionInfo &)*info;
16
- if (function_info.alter_function_type != AlterFunctionType::ADD_FUNCTION_OVERLOADS) {
17
- throw InternalException("Attempting to alter ScalarFunctionCatalogEntry with unsupported alter function type");
15
+ auto &function_info = (AlterScalarFunctionInfo &)*info;
16
+ if (function_info.alter_scalar_function_type != AlterScalarFunctionType::ADD_FUNCTION_OVERLOADS) {
17
+ throw InternalException(
18
+ "Attempting to alter ScalarFunctionCatalogEntry with unsupported alter scalar function type");
18
19
  }
19
- auto &add_overloads = (AddFunctionOverloadInfo &)function_info;
20
+ auto &add_overloads = (AddScalarFunctionOverloadInfo &)function_info;
20
21
 
21
22
  ScalarFunctionSet new_set = functions;
22
23
  if (!new_set.MergeFunctionSet(add_overloads.new_overloads)) {
@@ -193,14 +193,14 @@ const vector<unique_ptr<Constraint>> &TableCatalogEntry::GetConstraints() {
193
193
  }
194
194
 
195
195
  DataTable &TableCatalogEntry::GetStorage() {
196
- throw InternalException("Calling GetStorage on a TableCatalogEntry that is not a DTableCatalogEntry");
196
+ throw InternalException("Calling GetStorage on a TableCatalogEntry that is not a DuckTableEntry");
197
197
  }
198
198
 
199
199
  DataTable *TableCatalogEntry::GetStoragePtr() {
200
- throw InternalException("Calling GetStoragePtr on a TableCatalogEntry that is not a DTableCatalogEntry");
200
+ throw InternalException("Calling GetStoragePtr on a TableCatalogEntry that is not a DuckTableEntry");
201
201
  }
202
202
 
203
203
  const vector<unique_ptr<BoundConstraint>> &TableCatalogEntry::GetBoundConstraints() {
204
- throw InternalException("Calling GetBoundConstraints on a TableCatalogEntry that is not a DTableCatalogEntry");
204
+ throw InternalException("Calling GetBoundConstraints on a TableCatalogEntry that is not a DuckTableEntry");
205
205
  }
206
206
  } // namespace duckdb
@@ -1,5 +1,5 @@
1
1
  #include "duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp"
2
- #include "duckdb/parser/parsed_data/create_table_function_info.hpp"
2
+ #include "duckdb/parser/parsed_data/alter_table_function_info.hpp"
3
3
 
4
4
  namespace duckdb {
5
5
 
@@ -10,4 +10,23 @@ TableFunctionCatalogEntry::TableFunctionCatalogEntry(Catalog *catalog, SchemaCat
10
10
  D_ASSERT(this->functions.Size() > 0);
11
11
  }
12
12
 
13
+ unique_ptr<CatalogEntry> TableFunctionCatalogEntry::AlterEntry(ClientContext &context, AlterInfo *info) {
14
+ if (info->type != AlterType::ALTER_TABLE_FUNCTION) {
15
+ throw InternalException("Attempting to alter TableFunctionCatalogEntry with unsupported alter type");
16
+ }
17
+ auto &function_info = (AlterTableFunctionInfo &)*info;
18
+ if (function_info.alter_table_function_type != AlterTableFunctionType::ADD_FUNCTION_OVERLOADS) {
19
+ throw InternalException(
20
+ "Attempting to alter TableFunctionCatalogEntry with unsupported alter table function type");
21
+ }
22
+ auto &add_overloads = (AddTableFunctionOverloadInfo &)function_info;
23
+
24
+ TableFunctionSet new_set = functions;
25
+ if (!new_set.MergeFunctionSet(add_overloads.new_overloads)) {
26
+ throw BinderException("Failed to add new function overloads to function \"%s\": function already exists", name);
27
+ }
28
+ CreateTableFunctionInfo new_info(std::move(new_set));
29
+ return make_unique<TableFunctionCatalogEntry>(catalog, schema, &new_info);
30
+ }
31
+
13
32
  } // namespace duckdb
@@ -23,7 +23,13 @@ void TypeCatalogEntry::Serialize(Serializer &serializer) {
23
23
  FieldWriter writer(serializer);
24
24
  writer.WriteString(schema->name);
25
25
  writer.WriteString(name);
26
- writer.WriteSerializable(user_type);
26
+ if (user_type.id() == LogicalTypeId::ENUM) {
27
+ // We have to serialize Enum Values
28
+ writer.AddField();
29
+ user_type.SerializeEnumType(writer.GetSerializer());
30
+ } else {
31
+ writer.WriteSerializable(user_type);
32
+ }
27
33
  writer.Finalize();
28
34
  }
29
35
 
@@ -43,7 +49,7 @@ string TypeCatalogEntry::ToSQL() {
43
49
  std::stringstream ss;
44
50
  switch (user_type.id()) {
45
51
  case (LogicalTypeId::ENUM): {
46
- Vector values_insert_order(EnumType::GetValuesInsertOrder(user_type));
52
+ auto &values_insert_order = EnumType::GetValuesInsertOrder(user_type);
47
53
  idx_t size = EnumType::GetSize(user_type);
48
54
  ss << "CREATE TYPE ";
49
55
  ss << KeywordHelper::WriteOptionallyQuoted(name);
@@ -258,6 +258,7 @@ bool CatalogSet::AlterEntry(CatalogTransaction transaction, const string &name,
258
258
 
259
259
  // serialize the AlterInfo into a temporary buffer
260
260
  BufferedSerializer serializer;
261
+ serializer.WriteString(alter_info->GetColumnName());
261
262
  alter_info->Serialize(serializer);
262
263
  BinaryData serialized_alter = serializer.GetData();
263
264
 
@@ -131,6 +131,9 @@ static DefaultMacro internal_macros[] = {
131
131
  // nested list aggregates
132
132
  {DEFAULT_SCHEMA, "list_histogram", {"l", nullptr}, "list_aggr(l, 'histogram')"},
133
133
 
134
+ // date functions
135
+ {DEFAULT_SCHEMA, "date_add", {"date", "interval", nullptr}, "date + interval"},
136
+
134
137
  {nullptr, nullptr, {nullptr}, nullptr}
135
138
  };
136
139
 
@@ -1,5 +1,6 @@
1
1
  #include "duckdb/catalog/dependency_list.hpp"
2
2
  #include "duckdb/catalog/catalog_entry.hpp"
3
+ #include "duckdb/catalog/catalog.hpp"
3
4
 
4
5
  namespace duckdb {
5
6
 
@@ -10,4 +11,15 @@ void DependencyList::AddDependency(CatalogEntry *entry) {
10
11
  set.insert(entry);
11
12
  }
12
13
 
14
+ void DependencyList::VerifyDependencies(Catalog *catalog, const string &name) {
15
+ for (auto &dep : set) {
16
+ if (dep->catalog != catalog) {
17
+ throw DependencyException(
18
+ "Error adding dependency for object \"%s\" - dependency \"%s\" is in catalog "
19
+ "\"%s\", which does not match the catalog \"%s\".\nCross catalog dependencies are not supported.",
20
+ name, dep->name, dep->catalog->GetName(), catalog->GetName());
21
+ }
22
+ }
23
+ }
24
+
13
25
  } // namespace duckdb
@@ -46,32 +46,59 @@ bool DuckCatalog::IsDuckCatalog() {
46
46
  //===--------------------------------------------------------------------===//
47
47
  // Schema
48
48
  //===--------------------------------------------------------------------===//
49
- CatalogEntry *DuckCatalog::CreateSchema(CatalogTransaction transaction, CreateSchemaInfo *info) {
50
- D_ASSERT(!info->schema.empty());
49
+ CatalogEntry *DuckCatalog::CreateSchemaInternal(CatalogTransaction transaction, CreateSchemaInfo *info) {
51
50
  DependencyList dependencies;
52
51
  auto entry = make_unique<DuckSchemaEntry>(this, info->schema, info->internal);
53
52
  auto result = entry.get();
54
53
  if (!schemas->CreateEntry(transaction, info->schema, std::move(entry), dependencies)) {
55
- if (info->on_conflict == OnCreateConflict::ERROR_ON_CONFLICT) {
54
+ return nullptr;
55
+ }
56
+ return (CatalogEntry *)result;
57
+ }
58
+
59
+ CatalogEntry *DuckCatalog::CreateSchema(CatalogTransaction transaction, CreateSchemaInfo *info) {
60
+ D_ASSERT(!info->schema.empty());
61
+ auto result = CreateSchemaInternal(transaction, info);
62
+ if (!result) {
63
+ switch (info->on_conflict) {
64
+ case OnCreateConflict::ERROR_ON_CONFLICT:
56
65
  throw CatalogException("Schema with name %s already exists!", info->schema);
57
- } else {
58
- D_ASSERT(info->on_conflict == OnCreateConflict::IGNORE_ON_CONFLICT);
66
+ case OnCreateConflict::REPLACE_ON_CONFLICT: {
67
+ DropInfo drop_info;
68
+ drop_info.type = CatalogType::SCHEMA_ENTRY;
69
+ drop_info.catalog = info->catalog;
70
+ drop_info.name = info->schema;
71
+ DropSchema(transaction, &drop_info);
72
+ result = CreateSchemaInternal(transaction, info);
73
+ if (!result) {
74
+ throw InternalException("Failed to create schema entry in CREATE_OR_REPLACE");
75
+ }
76
+ break;
77
+ }
78
+ case OnCreateConflict::IGNORE_ON_CONFLICT:
79
+ break;
80
+ default:
81
+ throw InternalException("Unsupported OnCreateConflict for CreateSchema");
59
82
  }
60
83
  return nullptr;
61
84
  }
62
85
  return result;
63
86
  }
64
87
 
65
- void DuckCatalog::DropSchema(ClientContext &context, DropInfo *info) {
88
+ void DuckCatalog::DropSchema(CatalogTransaction transaction, DropInfo *info) {
66
89
  D_ASSERT(!info->name.empty());
67
90
  ModifyCatalog();
68
- if (!schemas->DropEntry(GetCatalogTransaction(context), info->name, info->cascade)) {
91
+ if (!schemas->DropEntry(transaction, info->name, info->cascade)) {
69
92
  if (!info->if_exists) {
70
93
  throw CatalogException("Schema with name \"%s\" does not exist!", info->name);
71
94
  }
72
95
  }
73
96
  }
74
97
 
98
+ void DuckCatalog::DropSchema(ClientContext &context, DropInfo *info) {
99
+ DropSchema(GetCatalogTransaction(context), info);
100
+ }
101
+
75
102
  void DuckCatalog::ScanSchemas(ClientContext &context, std::function<void(CatalogEntry *)> callback) {
76
103
  schemas->Scan(GetCatalogTransaction(context), [&](CatalogEntry *entry) { callback(entry); });
77
104
  }