duckdb 0.7.2-dev1457.0 → 0.7.2-dev1533.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 (593) hide show
  1. package/binding.gyp +8 -8
  2. package/package.json +1 -1
  3. package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
  4. package/src/duckdb/extension/icu/icu-datepart.cpp +3 -3
  5. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  6. package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +3 -3
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
  9. package/src/duckdb/extension/icu/icu-makedate.cpp +1 -1
  10. package/src/duckdb/extension/icu/icu-strptime.cpp +7 -7
  11. package/src/duckdb/extension/icu/icu-timebucket.cpp +6 -6
  12. package/src/duckdb/extension/icu/icu-timezone.cpp +4 -4
  13. package/src/duckdb/extension/json/include/json_executors.hpp +2 -2
  14. package/src/duckdb/extension/json/json_functions/copy_json.cpp +4 -4
  15. package/src/duckdb/extension/json/json_functions/json_create.cpp +3 -3
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +3 -3
  17. package/src/duckdb/extension/json/json_functions.cpp +2 -2
  18. package/src/duckdb/extension/parquet/parquet-extension.cpp +28 -28
  19. package/src/duckdb/extension/parquet/parquet_metadata.cpp +3 -3
  20. package/src/duckdb/src/catalog/catalog_entry/duck_index_entry.cpp +2 -2
  21. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +9 -9
  22. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +17 -17
  23. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -3
  24. package/src/duckdb/src/catalog/catalog_entry/scalar_macro_catalog_entry.cpp +2 -2
  25. package/src/duckdb/src/catalog/catalog_entry/schema_catalog_entry.cpp +2 -2
  26. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +2 -2
  27. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +5 -5
  28. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +2 -2
  29. package/src/duckdb/src/catalog/catalog_entry/view_catalog_entry.cpp +3 -3
  30. package/src/duckdb/src/catalog/catalog_entry.cpp +2 -2
  31. package/src/duckdb/src/catalog/catalog_set.cpp +28 -28
  32. package/src/duckdb/src/catalog/default/default_functions.cpp +2 -1
  33. package/src/duckdb/src/catalog/dependency_manager.cpp +4 -4
  34. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  35. package/src/duckdb/src/common/enums/physical_operator_type.cpp +2 -0
  36. package/src/duckdb/src/common/hive_partitioning.cpp +1 -1
  37. package/src/duckdb/src/common/multi_file_reader.cpp +1 -1
  38. package/src/duckdb/src/common/row_operations/row_aggregate.cpp +3 -0
  39. package/src/duckdb/src/common/string_util.cpp +24 -2
  40. package/src/duckdb/src/common/tree_renderer.cpp +2 -4
  41. package/src/duckdb/src/common/types.cpp +3 -1
  42. package/src/duckdb/src/execution/column_binding_resolver.cpp +5 -5
  43. package/src/duckdb/src/execution/expression_executor.cpp +4 -3
  44. package/src/duckdb/src/execution/expression_executor_state.cpp +1 -1
  45. package/src/duckdb/src/execution/index/art/art.cpp +6 -8
  46. package/src/duckdb/src/execution/operator/aggregate/distinct_aggregate_data.cpp +7 -7
  47. package/src/duckdb/src/execution/operator/aggregate/grouped_aggregate_data.cpp +2 -2
  48. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +33 -33
  49. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +13 -13
  50. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +3 -3
  51. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +20 -20
  52. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +12 -12
  53. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +5 -5
  54. package/src/duckdb/src/execution/operator/helper/physical_explain_analyze.cpp +2 -2
  55. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  56. package/src/duckdb/src/execution/operator/helper/physical_limit_percent.cpp +4 -4
  57. package/src/duckdb/src/execution/operator/helper/physical_materialized_collector.cpp +4 -4
  58. package/src/duckdb/src/execution/operator/helper/physical_reservoir_sample.cpp +2 -2
  59. package/src/duckdb/src/execution/operator/helper/physical_streaming_limit.cpp +2 -2
  60. package/src/duckdb/src/execution/operator/helper/physical_streaming_sample.cpp +2 -2
  61. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +4 -4
  62. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +8 -8
  63. package/src/duckdb/src/execution/operator/join/physical_cross_product.cpp +3 -3
  64. package/src/duckdb/src/execution/operator/join/physical_delim_join.cpp +3 -3
  65. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +12 -12
  66. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +12 -12
  67. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +6 -5
  68. package/src/duckdb/src/execution/operator/join/physical_join.cpp +2 -2
  69. package/src/duckdb/src/execution/operator/join/physical_nested_loop_join.cpp +13 -13
  70. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +10 -10
  71. package/src/duckdb/src/execution/operator/join/physical_positional_join.cpp +3 -3
  72. package/src/duckdb/src/execution/operator/order/physical_order.cpp +11 -11
  73. package/src/duckdb/src/execution/operator/order/physical_top_n.cpp +6 -6
  74. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +7 -7
  75. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +8 -8
  76. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +5 -5
  77. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +1 -1
  78. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +8 -8
  79. package/src/duckdb/src/execution/operator/persistent/physical_update.cpp +7 -7
  80. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +81 -0
  81. package/src/duckdb/src/execution/operator/projection/physical_tableinout_function.cpp +5 -5
  82. package/src/duckdb/src/execution/operator/projection/physical_unnest.cpp +4 -5
  83. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +1 -1
  84. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +4 -4
  85. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -7
  86. package/src/duckdb/src/execution/operator/schema/physical_alter.cpp +1 -1
  87. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
  88. package/src/duckdb/src/execution/operator/schema/physical_create_function.cpp +1 -1
  89. package/src/duckdb/src/execution/operator/schema/physical_create_index.cpp +8 -7
  90. package/src/duckdb/src/execution/operator/schema/physical_create_schema.cpp +1 -1
  91. package/src/duckdb/src/execution/operator/schema/physical_create_sequence.cpp +1 -1
  92. package/src/duckdb/src/execution/operator/schema/physical_create_table.cpp +1 -1
  93. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +3 -3
  94. package/src/duckdb/src/execution/operator/schema/physical_create_view.cpp +1 -1
  95. package/src/duckdb/src/execution/operator/schema/physical_detach.cpp +1 -1
  96. package/src/duckdb/src/execution/operator/schema/physical_drop.cpp +1 -1
  97. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -2
  98. package/src/duckdb/src/execution/physical_operator.cpp +2 -2
  99. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +4 -4
  100. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +2 -2
  101. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +1 -1
  102. package/src/duckdb/src/execution/physical_plan/plan_delete.cpp +1 -1
  103. package/src/duckdb/src/execution/physical_plan/plan_delim_join.cpp +2 -2
  104. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +4 -1
  105. package/src/duckdb/src/execution/physical_plan/plan_pivot.cpp +14 -0
  106. package/src/duckdb/src/execution/physical_plan/plan_projection.cpp +1 -1
  107. package/src/duckdb/src/execution/physical_plan/plan_window.cpp +8 -8
  108. package/src/duckdb/src/execution/physical_plan_generator.cpp +49 -42
  109. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +14 -14
  110. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +2 -2
  111. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +1 -1
  112. package/src/duckdb/src/function/aggregate/distributive/string_agg.cpp +2 -2
  113. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +1 -1
  114. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +1 -1
  115. package/src/duckdb/src/function/aggregate/holistic/reservoir_quantile.cpp +1 -1
  116. package/src/duckdb/src/function/aggregate/nested/list.cpp +3 -3
  117. package/src/duckdb/src/function/cast/enum_casts.cpp +3 -3
  118. package/src/duckdb/src/function/cast/list_casts.cpp +2 -2
  119. package/src/duckdb/src/function/cast/string_cast.cpp +6 -6
  120. package/src/duckdb/src/function/cast/struct_cast.cpp +4 -4
  121. package/src/duckdb/src/function/cast/union_casts.cpp +6 -6
  122. package/src/duckdb/src/function/function.cpp +4 -4
  123. package/src/duckdb/src/function/function_binder.cpp +2 -1
  124. package/src/duckdb/src/function/macro_function.cpp +3 -3
  125. package/src/duckdb/src/function/pragma/pragma_queries.cpp +1 -1
  126. package/src/duckdb/src/function/pragma_function.cpp +1 -1
  127. package/src/duckdb/src/function/scalar/date/date_part.cpp +1 -1
  128. package/src/duckdb/src/function/scalar/date/strftime.cpp +6 -6
  129. package/src/duckdb/src/function/scalar/generic/alias.cpp +1 -1
  130. package/src/duckdb/src/function/scalar/generic/constant_or_null.cpp +3 -3
  131. package/src/duckdb/src/function/scalar/generic/current_setting.cpp +2 -2
  132. package/src/duckdb/src/function/scalar/generic/stats.cpp +3 -3
  133. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +5 -5
  134. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +3 -3
  135. package/src/duckdb/src/function/scalar/list/list_sort.cpp +3 -3
  136. package/src/duckdb/src/function/scalar/math/numeric.cpp +3 -3
  137. package/src/duckdb/src/function/scalar/math/random.cpp +2 -2
  138. package/src/duckdb/src/function/scalar/math/setseed.cpp +2 -2
  139. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +2 -2
  140. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +4 -4
  141. package/src/duckdb/src/function/scalar/string/like.cpp +1 -1
  142. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +5 -5
  143. package/src/duckdb/src/function/scalar/string/regexp.cpp +11 -11
  144. package/src/duckdb/src/function/scalar/string/string_split.cpp +3 -3
  145. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +3 -3
  146. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +2 -2
  147. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +2 -2
  148. package/src/duckdb/src/function/scalar/union/union_extract.cpp +2 -2
  149. package/src/duckdb/src/function/scalar_macro_function.cpp +3 -3
  150. package/src/duckdb/src/function/table/arrow.cpp +5 -5
  151. package/src/duckdb/src/function/table/checkpoint.cpp +1 -1
  152. package/src/duckdb/src/function/table/glob.cpp +1 -1
  153. package/src/duckdb/src/function/table/pragma_detailed_profiling_output.cpp +1 -1
  154. package/src/duckdb/src/function/table/pragma_last_profiling_output.cpp +1 -1
  155. package/src/duckdb/src/function/table/range.cpp +5 -5
  156. package/src/duckdb/src/function/table/read_csv.cpp +10 -10
  157. package/src/duckdb/src/function/table/repeat.cpp +1 -1
  158. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +12 -12
  159. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +1 -1
  160. package/src/duckdb/src/function/table/system/duckdb_functions.cpp +2 -2
  161. package/src/duckdb/src/function/table/system/duckdb_indexes.cpp +1 -1
  162. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +1 -1
  163. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +2 -2
  164. package/src/duckdb/src/function/table/system/duckdb_views.cpp +1 -1
  165. package/src/duckdb/src/function/table/system/pragma_storage_info.cpp +1 -1
  166. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +3 -3
  167. package/src/duckdb/src/function/table/system/test_vector_types.cpp +1 -1
  168. package/src/duckdb/src/function/table/table_scan.cpp +31 -31
  169. package/src/duckdb/src/function/table/unnest.cpp +4 -4
  170. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  171. package/src/duckdb/src/function/table_macro_function.cpp +2 -2
  172. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +13 -0
  173. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +2 -2
  174. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  175. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/index_catalog_entry.hpp +4 -4
  176. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/macro_catalog_entry.hpp +3 -2
  177. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/scalar_macro_catalog_entry.hpp +1 -1
  178. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/schema_catalog_entry.hpp +2 -2
  179. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +2 -2
  180. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_catalog_entry.hpp +2 -2
  181. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_macro_catalog_entry.hpp +1 -1
  182. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/type_catalog_entry.hpp +2 -2
  183. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/view_catalog_entry.hpp +3 -3
  184. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +14 -3
  185. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +5 -5
  186. package/src/duckdb/src/include/duckdb/common/case_insensitive_map.hpp +2 -3
  187. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  188. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  189. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +1 -1
  190. package/src/duckdb/src/include/duckdb/common/string_util.hpp +3 -0
  191. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +1 -1
  192. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_hash_aggregate.hpp +3 -0
  193. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +3 -0
  194. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_streaming_window.hpp +3 -0
  195. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_ungrouped_aggregate.hpp +3 -0
  196. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_window.hpp +3 -0
  197. package/src/duckdb/src/include/duckdb/execution/operator/filter/physical_filter.hpp +3 -0
  198. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_execute.hpp +3 -0
  199. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +3 -0
  200. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit.hpp +3 -0
  201. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_limit_percent.hpp +3 -0
  202. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_load.hpp +3 -0
  203. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_pragma.hpp +3 -0
  204. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_prepare.hpp +3 -0
  205. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_reset.hpp +3 -0
  206. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_set.hpp +3 -0
  207. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_streaming_limit.hpp +3 -0
  208. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_streaming_sample.hpp +3 -0
  209. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_transaction.hpp +3 -0
  210. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +3 -0
  211. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_blockwise_nl_join.hpp +3 -0
  212. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +3 -0
  213. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_delim_join.hpp +3 -0
  214. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_hash_join.hpp +3 -0
  215. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +3 -0
  216. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_index_join.hpp +3 -0
  217. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_join.hpp +3 -0
  218. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_nested_loop_join.hpp +3 -4
  219. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +3 -0
  220. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_positional_join.hpp +3 -0
  221. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_order.hpp +3 -0
  222. package/src/duckdb/src/include/duckdb/execution/operator/order/physical_top_n.hpp +3 -0
  223. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_batch_insert.hpp +3 -0
  224. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_copy_to_file.hpp +3 -0
  225. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_delete.hpp +3 -0
  226. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_export.hpp +3 -0
  227. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_insert.hpp +3 -0
  228. package/src/duckdb/src/include/duckdb/execution/operator/persistent/physical_update.hpp +3 -0
  229. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_pivot.hpp +38 -0
  230. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +3 -0
  231. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_tableinout_function.hpp +4 -2
  232. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_unnest.hpp +3 -1
  233. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +3 -0
  234. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_dummy_scan.hpp +3 -0
  235. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_empty_result.hpp +3 -0
  236. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_expression_scan.hpp +3 -0
  237. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_positional_scan.hpp +3 -0
  238. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +3 -0
  239. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_alter.hpp +3 -0
  240. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_attach.hpp +3 -0
  241. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_function.hpp +3 -0
  242. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_index.hpp +3 -0
  243. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_schema.hpp +3 -0
  244. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_sequence.hpp +3 -0
  245. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_table.hpp +3 -0
  246. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_type.hpp +3 -0
  247. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_create_view.hpp +3 -0
  248. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_detach.hpp +3 -0
  249. package/src/duckdb/src/include/duckdb/execution/operator/schema/physical_drop.hpp +3 -0
  250. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +3 -0
  251. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_union.hpp +4 -0
  252. package/src/duckdb/src/include/duckdb/execution/physical_operator.hpp +18 -57
  253. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +150 -0
  254. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -0
  255. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +11 -0
  256. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +22 -0
  257. package/src/duckdb/src/include/duckdb/function/function.hpp +20 -4
  258. package/src/duckdb/src/include/duckdb/function/macro_function.hpp +3 -3
  259. package/src/duckdb/src/include/duckdb/function/pragma_function.hpp +1 -1
  260. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +1 -1
  261. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +11 -0
  262. package/src/duckdb/src/include/duckdb/function/scalar_macro_function.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/function/table_function.hpp +22 -0
  264. package/src/duckdb/src/include/duckdb/function/table_macro_function.hpp +3 -3
  265. package/src/duckdb/src/include/duckdb/main/client_config.hpp +3 -2
  266. package/src/duckdb/src/include/duckdb/main/settings.hpp +10 -0
  267. package/src/duckdb/src/include/duckdb/optimizer/rule/like_optimizations.hpp +1 -1
  268. package/src/duckdb/src/include/duckdb/parser/base_expression.hpp +18 -0
  269. package/src/duckdb/src/include/duckdb/parser/constraint.hpp +18 -0
  270. package/src/duckdb/src/include/duckdb/parser/constraints/check_constraint.hpp +3 -0
  271. package/src/duckdb/src/include/duckdb/parser/constraints/foreign_key_constraint.hpp +3 -0
  272. package/src/duckdb/src/include/duckdb/parser/constraints/not_null_constraint.hpp +3 -0
  273. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +3 -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 +3 -0
  276. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +3 -0
  277. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  278. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  279. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +3 -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 +3 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  285. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +3 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +3 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +3 -0
  293. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  294. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +3 -0
  295. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  296. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +18 -0
  297. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +18 -0
  298. package/src/duckdb/src/include/duckdb/parser/statement/alter_statement.hpp +3 -0
  299. package/src/duckdb/src/include/duckdb/parser/statement/attach_statement.hpp +3 -0
  300. package/src/duckdb/src/include/duckdb/parser/statement/call_statement.hpp +3 -0
  301. package/src/duckdb/src/include/duckdb/parser/statement/copy_statement.hpp +3 -0
  302. package/src/duckdb/src/include/duckdb/parser/statement/create_statement.hpp +3 -0
  303. package/src/duckdb/src/include/duckdb/parser/statement/delete_statement.hpp +3 -0
  304. package/src/duckdb/src/include/duckdb/parser/statement/detach_statement.hpp +3 -0
  305. package/src/duckdb/src/include/duckdb/parser/statement/drop_statement.hpp +3 -0
  306. package/src/duckdb/src/include/duckdb/parser/statement/execute_statement.hpp +3 -0
  307. package/src/duckdb/src/include/duckdb/parser/statement/explain_statement.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/parser/statement/export_statement.hpp +3 -0
  309. package/src/duckdb/src/include/duckdb/parser/statement/extension_statement.hpp +3 -0
  310. package/src/duckdb/src/include/duckdb/parser/statement/insert_statement.hpp +3 -0
  311. package/src/duckdb/src/include/duckdb/parser/statement/list.hpp +1 -0
  312. package/src/duckdb/src/include/duckdb/parser/statement/load_statement.hpp +3 -0
  313. package/src/duckdb/src/include/duckdb/parser/statement/logical_plan_statement.hpp +3 -0
  314. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +3 -0
  315. package/src/duckdb/src/include/duckdb/parser/statement/pragma_statement.hpp +3 -0
  316. package/src/duckdb/src/include/duckdb/parser/statement/prepare_statement.hpp +3 -0
  317. package/src/duckdb/src/include/duckdb/parser/statement/relation_statement.hpp +3 -0
  318. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +3 -0
  319. package/src/duckdb/src/include/duckdb/parser/statement/set_statement.hpp +3 -0
  320. package/src/duckdb/src/include/duckdb/parser/statement/show_statement.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/parser/statement/transaction_statement.hpp +3 -0
  322. package/src/duckdb/src/include/duckdb/parser/statement/update_statement.hpp +3 -0
  323. package/src/duckdb/src/include/duckdb/parser/statement/vacuum_statement.hpp +3 -0
  324. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +3 -0
  325. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +3 -0
  326. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  327. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  328. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +14 -0
  329. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  330. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  331. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +17 -0
  332. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  333. package/src/duckdb/src/include/duckdb/planner/binder.hpp +2 -0
  334. package/src/duckdb/src/include/duckdb/planner/bound_constraint.hpp +18 -0
  335. package/src/duckdb/src/include/duckdb/planner/bound_query_node.hpp +17 -0
  336. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +5 -1
  337. package/src/duckdb/src/include/duckdb/planner/bound_tableref.hpp +17 -0
  338. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  339. package/src/duckdb/src/include/duckdb/planner/constraints/bound_check_constraint.hpp +3 -0
  340. package/src/duckdb/src/include/duckdb/planner/constraints/bound_foreign_key_constraint.hpp +3 -0
  341. package/src/duckdb/src/include/duckdb/planner/constraints/bound_not_null_constraint.hpp +3 -0
  342. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -0
  343. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +4 -0
  344. package/src/duckdb/src/include/duckdb/planner/expression/bound_between_expression.hpp +3 -0
  345. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +3 -0
  346. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +3 -0
  347. package/src/duckdb/src/include/duckdb/planner/expression/bound_columnref_expression.hpp +3 -0
  348. package/src/duckdb/src/include/duckdb/planner/expression/bound_comparison_expression.hpp +3 -0
  349. package/src/duckdb/src/include/duckdb/planner/expression/bound_conjunction_expression.hpp +3 -0
  350. package/src/duckdb/src/include/duckdb/planner/expression/bound_constant_expression.hpp +3 -0
  351. package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +3 -0
  352. package/src/duckdb/src/include/duckdb/planner/expression/bound_function_expression.hpp +3 -0
  353. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambda_expression.hpp +3 -0
  354. package/src/duckdb/src/include/duckdb/planner/expression/bound_lambdaref_expression.hpp +3 -0
  355. package/src/duckdb/src/include/duckdb/planner/expression/bound_operator_expression.hpp +3 -0
  356. package/src/duckdb/src/include/duckdb/planner/expression/bound_parameter_expression.hpp +3 -0
  357. package/src/duckdb/src/include/duckdb/planner/expression/bound_reference_expression.hpp +3 -0
  358. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +3 -0
  359. package/src/duckdb/src/include/duckdb/planner/expression/bound_unnest_expression.hpp +3 -0
  360. package/src/duckdb/src/include/duckdb/planner/expression/bound_window_expression.hpp +4 -1
  361. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +1 -1
  362. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +2 -0
  363. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +17 -0
  364. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  365. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  366. package/src/duckdb/src/include/duckdb/planner/operator/logical_aggregate.hpp +3 -0
  367. package/src/duckdb/src/include/duckdb/planner/operator/logical_any_join.hpp +3 -0
  368. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +3 -0
  369. package/src/duckdb/src/include/duckdb/planner/operator/logical_column_data_get.hpp +3 -0
  370. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +3 -0
  371. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_to_file.hpp +3 -0
  372. package/src/duckdb/src/include/duckdb/planner/operator/logical_create.hpp +3 -0
  373. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_index.hpp +3 -0
  374. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_table.hpp +3 -0
  375. package/src/duckdb/src/include/duckdb/planner/operator/logical_cross_product.hpp +3 -0
  376. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +3 -0
  377. package/src/duckdb/src/include/duckdb/planner/operator/logical_delete.hpp +3 -0
  378. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +3 -0
  379. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_join.hpp +3 -0
  380. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +12 -4
  381. package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +3 -0
  382. package/src/duckdb/src/include/duckdb/planner/operator/logical_empty_result.hpp +3 -0
  383. package/src/duckdb/src/include/duckdb/planner/operator/logical_execute.hpp +3 -0
  384. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +3 -0
  385. package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +3 -0
  386. package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +3 -0
  387. package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +4 -0
  388. package/src/duckdb/src/include/duckdb/planner/operator/logical_filter.hpp +3 -0
  389. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +3 -0
  390. package/src/duckdb/src/include/duckdb/planner/operator/logical_insert.hpp +3 -0
  391. package/src/duckdb/src/include/duckdb/planner/operator/logical_join.hpp +3 -0
  392. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit.hpp +3 -0
  393. package/src/duckdb/src/include/duckdb/planner/operator/logical_limit_percent.hpp +3 -0
  394. package/src/duckdb/src/include/duckdb/planner/operator/logical_order.hpp +3 -0
  395. package/src/duckdb/src/include/duckdb/planner/operator/logical_pivot.hpp +36 -0
  396. package/src/duckdb/src/include/duckdb/planner/operator/logical_positional_join.hpp +3 -0
  397. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +3 -0
  398. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +3 -0
  399. package/src/duckdb/src/include/duckdb/planner/operator/logical_projection.hpp +3 -0
  400. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +9 -5
  401. package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +3 -0
  402. package/src/duckdb/src/include/duckdb/planner/operator/logical_sample.hpp +3 -0
  403. package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +3 -0
  404. package/src/duckdb/src/include/duckdb/planner/operator/logical_set_operation.hpp +3 -0
  405. package/src/duckdb/src/include/duckdb/planner/operator/logical_show.hpp +3 -0
  406. package/src/duckdb/src/include/duckdb/planner/operator/logical_simple.hpp +3 -0
  407. package/src/duckdb/src/include/duckdb/planner/operator/logical_top_n.hpp +3 -0
  408. package/src/duckdb/src/include/duckdb/planner/operator/logical_unconditional_join.hpp +3 -0
  409. package/src/duckdb/src/include/duckdb/planner/operator/logical_unnest.hpp +3 -0
  410. package/src/duckdb/src/include/duckdb/planner/operator/logical_update.hpp +3 -0
  411. package/src/duckdb/src/include/duckdb/planner/operator/logical_window.hpp +3 -0
  412. package/src/duckdb/src/include/duckdb/planner/query_node/bound_recursive_cte_node.hpp +3 -0
  413. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +3 -0
  414. package/src/duckdb/src/include/duckdb/planner/query_node/bound_set_operation_node.hpp +3 -0
  415. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +3 -0
  416. package/src/duckdb/src/include/duckdb/planner/tableref/bound_basetableref.hpp +3 -0
  417. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +3 -0
  418. package/src/duckdb/src/include/duckdb/planner/tableref/bound_dummytableref.hpp +3 -0
  419. package/src/duckdb/src/include/duckdb/planner/tableref/bound_expressionlistref.hpp +3 -0
  420. package/src/duckdb/src/include/duckdb/planner/tableref/bound_joinref.hpp +3 -0
  421. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pivotref.hpp +43 -0
  422. package/src/duckdb/src/include/duckdb/planner/tableref/bound_pos_join_ref.hpp +3 -0
  423. package/src/duckdb/src/include/duckdb/planner/tableref/bound_subqueryref.hpp +3 -0
  424. package/src/duckdb/src/include/duckdb/planner/tableref/bound_table_function.hpp +3 -0
  425. package/src/duckdb/src/include/duckdb/planner/tableref/list.hpp +1 -0
  426. package/src/duckdb/src/include/duckdb/storage/index.hpp +15 -2
  427. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +17 -17
  428. package/src/duckdb/src/include/duckdb/transaction/commit_state.hpp +1 -1
  429. package/src/duckdb/src/main/capi/table_function-c.cpp +9 -9
  430. package/src/duckdb/src/main/client_context.cpp +1 -1
  431. package/src/duckdb/src/main/config.cpp +1 -0
  432. package/src/duckdb/src/main/query_profiler.cpp +2 -2
  433. package/src/duckdb/src/main/relation/aggregate_relation.cpp +1 -1
  434. package/src/duckdb/src/main/relation/filter_relation.cpp +1 -1
  435. package/src/duckdb/src/main/relation/projection_relation.cpp +1 -1
  436. package/src/duckdb/src/main/relation.cpp +1 -1
  437. package/src/duckdb/src/main/settings/settings.cpp +17 -1
  438. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +3 -3
  439. package/src/duckdb/src/optimizer/common_aggregate_optimizer.cpp +1 -1
  440. package/src/duckdb/src/optimizer/cse_optimizer.cpp +1 -1
  441. package/src/duckdb/src/optimizer/deliminator.cpp +11 -11
  442. package/src/duckdb/src/optimizer/expression_heuristics.cpp +11 -11
  443. package/src/duckdb/src/optimizer/expression_rewriter.cpp +1 -1
  444. package/src/duckdb/src/optimizer/filter_combiner.cpp +40 -38
  445. package/src/duckdb/src/optimizer/filter_pullup.cpp +2 -2
  446. package/src/duckdb/src/optimizer/filter_pushdown.cpp +1 -1
  447. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +8 -8
  448. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +24 -24
  449. package/src/duckdb/src/optimizer/matcher/expression_matcher.cpp +12 -12
  450. package/src/duckdb/src/optimizer/pullup/pullup_filter.cpp +1 -1
  451. package/src/duckdb/src/optimizer/pullup/pullup_projection.cpp +2 -2
  452. package/src/duckdb/src/optimizer/pullup/pullup_set_operation.cpp +3 -3
  453. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +3 -3
  454. package/src/duckdb/src/optimizer/pushdown/pushdown_filter.cpp +1 -1
  455. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +1 -1
  456. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -3
  457. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +3 -3
  458. package/src/duckdb/src/optimizer/pushdown/pushdown_limit.cpp +1 -1
  459. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +3 -3
  460. package/src/duckdb/src/optimizer/pushdown/pushdown_projection.cpp +2 -2
  461. package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +4 -4
  462. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  463. package/src/duckdb/src/optimizer/regex_range_filter.cpp +2 -2
  464. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +13 -9
  465. package/src/duckdb/src/optimizer/rule/arithmetic_simplification.cpp +20 -20
  466. package/src/duckdb/src/optimizer/rule/case_simplification.cpp +8 -8
  467. package/src/duckdb/src/optimizer/rule/comparison_simplification.cpp +14 -14
  468. package/src/duckdb/src/optimizer/rule/conjunction_simplification.cpp +5 -5
  469. package/src/duckdb/src/optimizer/rule/date_part_simplification.cpp +2 -2
  470. package/src/duckdb/src/optimizer/rule/distributivity.cpp +16 -16
  471. package/src/duckdb/src/optimizer/rule/empty_needle_removal.cpp +4 -5
  472. package/src/duckdb/src/optimizer/rule/enum_comparison.cpp +8 -9
  473. package/src/duckdb/src/optimizer/rule/in_clause_simplification_rule.cpp +13 -13
  474. package/src/duckdb/src/optimizer/rule/like_optimizations.cpp +12 -12
  475. package/src/duckdb/src/optimizer/rule/move_constants.cpp +31 -31
  476. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +4 -4
  477. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +10 -10
  478. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +9 -8
  479. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +2 -2
  480. package/src/duckdb/src/optimizer/statistics_propagator.cpp +31 -20
  481. package/src/duckdb/src/optimizer/topn_optimizer.cpp +2 -2
  482. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +13 -13
  483. package/src/duckdb/src/parser/column_definition.cpp +3 -3
  484. package/src/duckdb/src/parser/expression/columnref_expression.cpp +2 -5
  485. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +1 -1
  486. package/src/duckdb/src/parser/expression/constant_expression.cpp +1 -1
  487. package/src/duckdb/src/parser/parsed_data/create_view_info.cpp +1 -1
  488. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +20 -20
  489. package/src/duckdb/src/parser/parser.cpp +10 -10
  490. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +4 -4
  491. package/src/duckdb/src/parser/query_node/select_node.cpp +10 -10
  492. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +4 -4
  493. package/src/duckdb/src/parser/statement/insert_statement.cpp +1 -1
  494. package/src/duckdb/src/parser/statement/select_statement.cpp +2 -2
  495. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +1 -1
  496. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +3 -3
  497. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +2 -42
  498. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  499. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +1 -1
  500. package/src/duckdb/src/parser/transform/statement/transform_create_type.cpp +0 -1
  501. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +5 -2
  502. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +5 -5
  503. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +20 -20
  504. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +3 -3
  505. package/src/duckdb/src/planner/bind_context.cpp +11 -0
  506. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +47 -4
  507. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +5 -6
  508. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +2 -2
  509. package/src/duckdb/src/planner/binder/expression/bind_macro_expression.cpp +3 -3
  510. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +8 -8
  511. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +23 -29
  512. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +2 -2
  513. package/src/duckdb/src/planner/binder/query_node/bind_table_macro_node.cpp +1 -1
  514. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +3 -3
  515. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +2 -3
  516. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +0 -2
  517. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +1 -1
  518. package/src/duckdb/src/planner/binder/statement/bind_call.cpp +3 -2
  519. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +1 -1
  520. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +17 -16
  521. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +7 -6
  522. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +3 -2
  523. package/src/duckdb/src/planner/binder/statement/bind_export.cpp +1 -1
  524. package/src/duckdb/src/planner/binder/statement/bind_extension.cpp +1 -1
  525. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +4 -4
  526. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +2 -2
  527. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +2 -1
  528. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +2 -2
  529. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +4 -3
  530. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +303 -78
  531. package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +4 -4
  532. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +10 -10
  533. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +6 -6
  534. package/src/duckdb/src/planner/binder/tableref/plan_pivotref.cpp +13 -0
  535. package/src/duckdb/src/planner/binder.cpp +52 -48
  536. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +8 -8
  537. package/src/duckdb/src/planner/expression/bound_between_expression.cpp +5 -5
  538. package/src/duckdb/src/planner/expression/bound_case_expression.cpp +1 -1
  539. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +5 -5
  540. package/src/duckdb/src/planner/expression/bound_columnref_expression.cpp +2 -2
  541. package/src/duckdb/src/planner/expression/bound_comparison_expression.cpp +3 -4
  542. package/src/duckdb/src/planner/expression/bound_conjunction_expression.cpp +2 -2
  543. package/src/duckdb/src/planner/expression/bound_constant_expression.cpp +2 -2
  544. package/src/duckdb/src/planner/expression/bound_function_expression.cpp +4 -4
  545. package/src/duckdb/src/planner/expression/bound_lambda_expression.cpp +4 -4
  546. package/src/duckdb/src/planner/expression/bound_lambdaref_expression.cpp +2 -2
  547. package/src/duckdb/src/planner/expression/bound_operator_expression.cpp +2 -2
  548. package/src/duckdb/src/planner/expression/bound_parameter_expression.cpp +3 -3
  549. package/src/duckdb/src/planner/expression/bound_reference_expression.cpp +2 -2
  550. package/src/duckdb/src/planner/expression/bound_unnest_expression.cpp +2 -2
  551. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +16 -16
  552. package/src/duckdb/src/planner/expression_binder/alter_binder.cpp +1 -1
  553. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +3 -3
  554. package/src/duckdb/src/planner/expression_binder/check_binder.cpp +1 -1
  555. package/src/duckdb/src/planner/expression_binder/constant_binder.cpp +11 -1
  556. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +2 -2
  557. package/src/duckdb/src/planner/expression_binder/index_binder.cpp +1 -1
  558. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +3 -3
  559. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +3 -3
  560. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +2 -1
  561. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +7 -3
  562. package/src/duckdb/src/planner/expression_binder.cpp +24 -32
  563. package/src/duckdb/src/planner/expression_iterator.cpp +17 -17
  564. package/src/duckdb/src/planner/joinside.cpp +2 -2
  565. package/src/duckdb/src/planner/logical_operator.cpp +3 -0
  566. package/src/duckdb/src/planner/logical_operator_visitor.cpp +26 -26
  567. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -1
  568. package/src/duckdb/src/planner/operator/logical_filter.cpp +1 -1
  569. package/src/duckdb/src/planner/operator/logical_join.cpp +1 -1
  570. package/src/duckdb/src/planner/operator/logical_pivot.cpp +35 -0
  571. package/src/duckdb/src/planner/operator/logical_recursive_cte.cpp +1 -1
  572. package/src/duckdb/src/planner/pragma_handler.cpp +2 -2
  573. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +25 -23
  574. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +2 -2
  575. package/src/duckdb/src/planner/table_binding.cpp +8 -8
  576. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +1 -1
  577. package/src/duckdb/src/storage/data_table.cpp +2 -1
  578. package/src/duckdb/src/storage/index.cpp +4 -5
  579. package/src/duckdb/src/storage/local_storage.cpp +2 -1
  580. package/src/duckdb/src/storage/table/row_group_collection.cpp +1 -1
  581. package/src/duckdb/src/storage/write_ahead_log.cpp +42 -42
  582. package/src/duckdb/src/transaction/commit_state.cpp +35 -35
  583. package/src/duckdb/src/transaction/duck_transaction.cpp +1 -1
  584. package/src/duckdb/src/transaction/rollback_state.cpp +1 -1
  585. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +1 -1
  586. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +773 -793
  587. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +1 -11
  588. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +17408 -17751
  589. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +5 -5
  590. package/src/duckdb/ub_src_execution_operator_projection.cpp +2 -0
  591. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  592. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  593. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
@@ -113,43 +113,43 @@ bool SelectNode::Equals(const QueryNode *other_p) const {
113
113
  if (this == other_p) {
114
114
  return true;
115
115
  }
116
- auto other = (SelectNode *)other_p;
116
+ auto &other = other_p->Cast<SelectNode>();
117
117
 
118
118
  // SELECT
119
- if (!ExpressionUtil::ListEquals(select_list, other->select_list)) {
119
+ if (!ExpressionUtil::ListEquals(select_list, other.select_list)) {
120
120
  return false;
121
121
  }
122
122
  // FROM
123
123
  if (from_table) {
124
124
  // we have a FROM clause, compare to the other one
125
- if (!from_table->Equals(other->from_table.get())) {
125
+ if (!from_table->Equals(other.from_table.get())) {
126
126
  return false;
127
127
  }
128
- } else if (other->from_table) {
128
+ } else if (other.from_table) {
129
129
  // we don't have a FROM clause, if the other statement has one they are
130
130
  // not equal
131
131
  return false;
132
132
  }
133
133
  // WHERE
134
- if (!BaseExpression::Equals(where_clause.get(), other->where_clause.get())) {
134
+ if (!BaseExpression::Equals(where_clause.get(), other.where_clause.get())) {
135
135
  return false;
136
136
  }
137
137
  // GROUP BY
138
- if (!ExpressionUtil::ListEquals(groups.group_expressions, other->groups.group_expressions)) {
138
+ if (!ExpressionUtil::ListEquals(groups.group_expressions, other.groups.group_expressions)) {
139
139
  return false;
140
140
  }
141
- if (groups.grouping_sets != other->groups.grouping_sets) {
141
+ if (groups.grouping_sets != other.groups.grouping_sets) {
142
142
  return false;
143
143
  }
144
- if (!SampleOptions::Equals(sample.get(), other->sample.get())) {
144
+ if (!SampleOptions::Equals(sample.get(), other.sample.get())) {
145
145
  return false;
146
146
  }
147
147
  // HAVING
148
- if (!BaseExpression::Equals(having.get(), other->having.get())) {
148
+ if (!BaseExpression::Equals(having.get(), other.having.get())) {
149
149
  return false;
150
150
  }
151
151
  // QUALIFY
152
- if (!BaseExpression::Equals(qualify.get(), other->qualify.get())) {
152
+ if (!BaseExpression::Equals(qualify.get(), other.qualify.get())) {
153
153
  return false;
154
154
  }
155
155
  return true;
@@ -47,14 +47,14 @@ bool SetOperationNode::Equals(const QueryNode *other_p) const {
47
47
  if (this == other_p) {
48
48
  return true;
49
49
  }
50
- auto other = (SetOperationNode *)other_p;
51
- if (setop_type != other->setop_type) {
50
+ auto &other = other_p->Cast<SetOperationNode>();
51
+ if (setop_type != other.setop_type) {
52
52
  return false;
53
53
  }
54
- if (!left->Equals(other->left.get())) {
54
+ if (!left->Equals(other.left.get())) {
55
55
  return false;
56
56
  }
57
- if (!right->Equals(other->right.get())) {
57
+ if (!right->Equals(other.right.get())) {
58
58
  return false;
59
59
  }
60
60
  return true;
@@ -159,7 +159,7 @@ ExpressionListRef *InsertStatement::GetValuesList() const {
159
159
  if (select_statement->node->type != QueryNodeType::SELECT_NODE) {
160
160
  return nullptr;
161
161
  }
162
- auto &node = (SelectNode &)*select_statement->node;
162
+ auto &node = select_statement->node->Cast<SelectNode>();
163
163
  if (node.where_clause || node.qualify || node.having) {
164
164
  return nullptr;
165
165
  }
@@ -37,8 +37,8 @@ bool SelectStatement::Equals(const SQLStatement *other_p) const {
37
37
  if (type != other_p->type) {
38
38
  return false;
39
39
  }
40
- auto other = (SelectStatement *)other_p;
41
- return node->Equals(other->node.get());
40
+ auto &other = other_p->Cast<SelectStatement>();
41
+ return node->Equals(other.node.get());
42
42
  }
43
43
 
44
44
  string SelectStatement::ToString() const {
@@ -55,7 +55,7 @@ unique_ptr<ParsedExpression> Transformer::TransformArrayAccess(duckdb_libpgquery
55
55
  if (function->type != ExpressionType::FUNCTION) {
56
56
  throw ParserException("%s.%s() call must be a function", result->ToString(), function->ToString());
57
57
  }
58
- auto &f = (FunctionExpression &)*function;
58
+ auto &f = function->Cast<FunctionExpression>();
59
59
  f.children.insert(f.children.begin(), std::move(result));
60
60
  result = std::move(function);
61
61
  break;
@@ -44,9 +44,9 @@ unique_ptr<ParsedExpression> Transformer::TransformStarExpression(duckdb_libpgqu
44
44
  D_ASSERT(result->replace_list.empty());
45
45
  result->expr = TransformExpression(star->expr);
46
46
  if (result->expr->type == ExpressionType::STAR) {
47
- auto child_star = (StarExpression *)result->expr.get();
48
- result->exclude_list = std::move(child_star->exclude_list);
49
- result->replace_list = std::move(child_star->replace_list);
47
+ auto &child_star = result->expr->Cast<StarExpression>();
48
+ result->exclude_list = std::move(child_star.exclude_list);
49
+ result->replace_list = std::move(child_star.replace_list);
50
50
  result->expr.reset();
51
51
  } else if (result->expr->type == ExpressionType::LAMBDA) {
52
52
  vector<unique_ptr<ParsedExpression>> children;
@@ -72,7 +72,7 @@ bool Transformer::ExpressionIsEmptyStar(ParsedExpression &expr) {
72
72
  if (expr.expression_class != ExpressionClass::STAR) {
73
73
  return false;
74
74
  }
75
- auto &star = (StarExpression &)expr;
75
+ auto &star = expr.Cast<StarExpression>();
76
76
  if (!star.columns && star.exclude_list.empty() && star.replace_list.empty()) {
77
77
  return true;
78
78
  }
@@ -316,48 +316,8 @@ unique_ptr<ParsedExpression> Transformer::TransformFuncCall(duckdb_libpgquery::P
316
316
  return std::move(function);
317
317
  }
318
318
 
319
- static string SQLValueOpToString(duckdb_libpgquery::PGSQLValueFunctionOp op) {
320
- switch (op) {
321
- case duckdb_libpgquery::PG_SVFOP_CURRENT_DATE:
322
- return "current_date";
323
- case duckdb_libpgquery::PG_SVFOP_CURRENT_TIME:
324
- return "get_current_time";
325
- case duckdb_libpgquery::PG_SVFOP_CURRENT_TIME_N:
326
- return "current_time_n";
327
- case duckdb_libpgquery::PG_SVFOP_CURRENT_TIMESTAMP:
328
- return "get_current_timestamp";
329
- case duckdb_libpgquery::PG_SVFOP_CURRENT_TIMESTAMP_N:
330
- return "current_timestamp_n";
331
- case duckdb_libpgquery::PG_SVFOP_LOCALTIME:
332
- return "current_localtime";
333
- case duckdb_libpgquery::PG_SVFOP_LOCALTIME_N:
334
- return "current_localtime_n";
335
- case duckdb_libpgquery::PG_SVFOP_LOCALTIMESTAMP:
336
- return "current_localtimestamp";
337
- case duckdb_libpgquery::PG_SVFOP_LOCALTIMESTAMP_N:
338
- return "current_localtimestamp_n";
339
- case duckdb_libpgquery::PG_SVFOP_CURRENT_ROLE:
340
- return "current_role";
341
- case duckdb_libpgquery::PG_SVFOP_CURRENT_USER:
342
- return "current_user";
343
- case duckdb_libpgquery::PG_SVFOP_USER:
344
- return "user";
345
- case duckdb_libpgquery::PG_SVFOP_SESSION_USER:
346
- return "session_user";
347
- case duckdb_libpgquery::PG_SVFOP_CURRENT_CATALOG:
348
- return "current_catalog";
349
- case duckdb_libpgquery::PG_SVFOP_CURRENT_SCHEMA:
350
- return "current_schema";
351
- default:
352
- throw InternalException("Could not find named SQL value function specification " + to_string((int)op));
353
- }
354
- }
355
-
356
319
  unique_ptr<ParsedExpression> Transformer::TransformSQLValueFunction(duckdb_libpgquery::PGSQLValueFunction *node) {
357
- D_ASSERT(node);
358
- vector<unique_ptr<ParsedExpression>> children;
359
- auto fname = SQLValueOpToString(node->op);
360
- return make_uniq<FunctionExpression>(fname, std::move(children));
320
+ throw InternalException("SQL value functions should not be emitted by the parser");
361
321
  }
362
322
 
363
323
  } // namespace duckdb
@@ -149,7 +149,7 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
149
149
  if (similar_func.children[1]->type != ExpressionType::VALUE_CONSTANT) {
150
150
  throw NotImplementedException("Custom escape in SIMILAR TO");
151
151
  }
152
- auto &constant = (ConstantExpression &)*similar_func.children[1];
152
+ auto &constant = similar_func.children[1]->Cast<ConstantExpression>();
153
153
  if (!constant.value.IsNull()) {
154
154
  throw NotImplementedException("Custom escape in SIMILAR TO");
155
155
  }
@@ -41,7 +41,7 @@ static void MergeGroupingSet(GroupingSet &result, GroupingSet &other) {
41
41
  void Transformer::AddGroupByExpression(unique_ptr<ParsedExpression> expression, GroupingExpressionMap &map,
42
42
  GroupByNode &result, vector<idx_t> &result_set) {
43
43
  if (expression->type == ExpressionType::FUNCTION) {
44
- auto &func = (FunctionExpression &)*expression;
44
+ auto &func = expression->Cast<FunctionExpression>();
45
45
  if (func.function_name == "row") {
46
46
  for (auto &child : func.children) {
47
47
  AddGroupByExpression(std::move(child), map, result, result_set);
@@ -64,7 +64,6 @@ unique_ptr<CreateStatement> Transformer::TransformCreateType(duckdb_libpgquery::
64
64
 
65
65
  case duckdb_libpgquery::PG_NEWTYPE_ALIAS: {
66
66
  LogicalType target_type = TransformTypeName(stmt->ofType);
67
- target_type.SetAlias(info->name);
68
67
  info->type = target_type;
69
68
  } break;
70
69
 
@@ -10,6 +10,7 @@
10
10
  #include "duckdb/parser/statement/drop_statement.hpp"
11
11
  #include "duckdb/parser/parsed_data/drop_info.hpp"
12
12
  #include "duckdb/parser/expression/cast_expression.hpp"
13
+ #include "duckdb/parser/expression/constant_expression.hpp"
13
14
  #include "duckdb/parser/expression/operator_expression.hpp"
14
15
  #include "duckdb/parser/expression/function_expression.hpp"
15
16
  #include "duckdb/parser/result_modifier.hpp"
@@ -58,15 +59,17 @@ unique_ptr<SQLStatement> Transformer::GenerateCreateEnumStmt(unique_ptr<CreatePi
58
59
  // generate the query that will result in the enum creation
59
60
  auto select_node = std::move(entry->base);
60
61
  auto columnref = entry->column->Copy();
61
- auto cast = make_uniq<CastExpression>(LogicalType::VARCHAR, columnref->Copy());
62
+ auto cast = make_uniq<CastExpression>(LogicalType::VARCHAR, std::move(columnref));
62
63
  select_node->select_list.push_back(std::move(cast));
63
64
 
64
65
  auto is_not_null = make_uniq<OperatorExpression>(ExpressionType::OPERATOR_IS_NOT_NULL, std::move(entry->column));
65
66
  select_node->where_clause = std::move(is_not_null);
66
67
 
67
68
  // order by the column
69
+ select_node->modifiers.push_back(make_uniq<DistinctModifier>());
68
70
  auto modifier = make_uniq<OrderModifier>();
69
- modifier->orders.emplace_back(OrderType::ASCENDING, OrderByNullType::ORDER_DEFAULT, std::move(columnref));
71
+ modifier->orders.emplace_back(OrderType::ASCENDING, OrderByNullType::ORDER_DEFAULT,
72
+ make_uniq<ConstantExpression>(Value::INTEGER(1)));
70
73
  select_node->modifiers.push_back(std::move(modifier));
71
74
 
72
75
  auto select = make_uniq<SelectStatement>();
@@ -23,21 +23,21 @@ unique_ptr<SQLStatement> Transformer::TransformPragma(duckdb_libpgquery::PGNode
23
23
  auto expr = TransformExpression(node);
24
24
 
25
25
  if (expr->type == ExpressionType::COMPARE_EQUAL) {
26
- auto &comp = (ComparisonExpression &)*expr;
26
+ auto &comp = expr->Cast<ComparisonExpression>();
27
27
  if (comp.right->type != ExpressionType::VALUE_CONSTANT) {
28
28
  throw ParserException("Named parameter requires a constant on the RHS");
29
29
  }
30
30
  if (comp.left->type != ExpressionType::COLUMN_REF) {
31
31
  throw ParserException("Named parameter requires a column reference on the LHS");
32
32
  }
33
- auto &columnref = (ColumnRefExpression &)*comp.left;
34
- auto &constant = (ConstantExpression &)*comp.right;
33
+ auto &columnref = comp.left->Cast<ColumnRefExpression>();
34
+ auto &constant = comp.right->Cast<ConstantExpression>();
35
35
  info.named_parameters[columnref.GetName()] = constant.value;
36
36
  } else if (node->type == duckdb_libpgquery::T_PGAConst) {
37
37
  auto constant = TransformConstant((duckdb_libpgquery::PGAConst *)node);
38
- info.parameters.push_back(((ConstantExpression &)*constant).value);
38
+ info.parameters.push_back((constant->Cast<ConstantExpression>()).value);
39
39
  } else if (expr->type == ExpressionType::COLUMN_REF) {
40
- auto &colref = (ColumnRefExpression &)*expr;
40
+ auto &colref = expr->Cast<ColumnRefExpression>();
41
41
  if (!colref.IsQualified()) {
42
42
  info.parameters.emplace_back(colref.GetColumnName());
43
43
  } else {
@@ -17,7 +17,7 @@ unique_ptr<QueryNode> Transformer::TransformSelectInternal(duckdb_libpgquery::PG
17
17
  switch (stmt->op) {
18
18
  case duckdb_libpgquery::PG_SETOP_NONE: {
19
19
  node = make_uniq<SelectNode>();
20
- auto result = (SelectNode *)node.get();
20
+ auto &result = node->Cast<SelectNode>();
21
21
  if (stmt->withClause) {
22
22
  TransformCTE(reinterpret_cast<duckdb_libpgquery::PGWithClause *>(stmt->withClause), node->cte_map);
23
23
  }
@@ -44,34 +44,34 @@ unique_ptr<QueryNode> Transformer::TransformSelectInternal(duckdb_libpgquery::PG
44
44
  // add the columns defined in the ON clause to the select list
45
45
  TransformExpressionList(*stmt->distinctClause, modifier->distinct_on_targets);
46
46
  }
47
- result->modifiers.push_back(std::move(modifier));
47
+ result.modifiers.push_back(std::move(modifier));
48
48
  }
49
49
 
50
50
  // do this early so the value lists also have a `FROM`
51
51
  if (stmt->valuesLists) {
52
52
  // VALUES list, create an ExpressionList
53
53
  D_ASSERT(!stmt->fromClause);
54
- result->from_table = TransformValuesList(stmt->valuesLists);
55
- result->select_list.push_back(make_uniq<StarExpression>());
54
+ result.from_table = TransformValuesList(stmt->valuesLists);
55
+ result.select_list.push_back(make_uniq<StarExpression>());
56
56
  } else {
57
57
  if (!stmt->targetList) {
58
58
  throw ParserException("SELECT clause without selection list");
59
59
  }
60
60
  // select list
61
- TransformExpressionList(*stmt->targetList, result->select_list);
62
- result->from_table = TransformFrom(stmt->fromClause);
61
+ TransformExpressionList(*stmt->targetList, result.select_list);
62
+ result.from_table = TransformFrom(stmt->fromClause);
63
63
  }
64
64
 
65
65
  // where
66
- result->where_clause = TransformExpression(stmt->whereClause);
66
+ result.where_clause = TransformExpression(stmt->whereClause);
67
67
  // group by
68
- TransformGroupBy(stmt->groupClause, *result);
68
+ TransformGroupBy(stmt->groupClause, result);
69
69
  // having
70
- result->having = TransformExpression(stmt->havingClause);
70
+ result.having = TransformExpression(stmt->havingClause);
71
71
  // qualify
72
- result->qualify = TransformExpression(stmt->qualifyClause);
72
+ result.qualify = TransformExpression(stmt->qualifyClause);
73
73
  // sample
74
- result->sample = TransformSampleOptions(stmt->sampleOptions);
74
+ result.sample = TransformSampleOptions(stmt->sampleOptions);
75
75
  break;
76
76
  }
77
77
  case duckdb_libpgquery::PG_SETOP_UNION:
@@ -79,13 +79,13 @@ unique_ptr<QueryNode> Transformer::TransformSelectInternal(duckdb_libpgquery::PG
79
79
  case duckdb_libpgquery::PG_SETOP_INTERSECT:
80
80
  case duckdb_libpgquery::PG_SETOP_UNION_BY_NAME: {
81
81
  node = make_uniq<SetOperationNode>();
82
- auto result = (SetOperationNode *)node.get();
82
+ auto &result = node->Cast<SetOperationNode>();
83
83
  if (stmt->withClause) {
84
84
  TransformCTE(reinterpret_cast<duckdb_libpgquery::PGWithClause *>(stmt->withClause), node->cte_map);
85
85
  }
86
- result->left = TransformSelectNode(stmt->larg);
87
- result->right = TransformSelectNode(stmt->rarg);
88
- if (!result->left || !result->right) {
86
+ result.left = TransformSelectNode(stmt->larg);
87
+ result.right = TransformSelectNode(stmt->rarg);
88
+ if (!result.left || !result.right) {
89
89
  throw Exception("Failed to transform setop children.");
90
90
  }
91
91
 
@@ -93,23 +93,23 @@ unique_ptr<QueryNode> Transformer::TransformSelectInternal(duckdb_libpgquery::PG
93
93
  switch (stmt->op) {
94
94
  case duckdb_libpgquery::PG_SETOP_UNION:
95
95
  select_distinct = !stmt->all;
96
- result->setop_type = SetOperationType::UNION;
96
+ result.setop_type = SetOperationType::UNION;
97
97
  break;
98
98
  case duckdb_libpgquery::PG_SETOP_EXCEPT:
99
- result->setop_type = SetOperationType::EXCEPT;
99
+ result.setop_type = SetOperationType::EXCEPT;
100
100
  break;
101
101
  case duckdb_libpgquery::PG_SETOP_INTERSECT:
102
- result->setop_type = SetOperationType::INTERSECT;
102
+ result.setop_type = SetOperationType::INTERSECT;
103
103
  break;
104
104
  case duckdb_libpgquery::PG_SETOP_UNION_BY_NAME:
105
105
  select_distinct = !stmt->all;
106
- result->setop_type = SetOperationType::UNION_BY_NAME;
106
+ result.setop_type = SetOperationType::UNION_BY_NAME;
107
107
  break;
108
108
  default:
109
109
  throw Exception("Unexpected setop type");
110
110
  }
111
111
  if (select_distinct) {
112
- result->modifiers.push_back(make_uniq<DistinctModifier>());
112
+ result.modifiers.push_back(make_uniq<DistinctModifier>());
113
113
  }
114
114
  if (stmt->sampleOptions) {
115
115
  throw ParserException("SAMPLE clause is only allowed in regular SELECT statements");
@@ -9,16 +9,16 @@ namespace duckdb {
9
9
 
10
10
  static void TransformPivotInList(unique_ptr<ParsedExpression> &expr, PivotColumnEntry &entry, bool root_entry = true) {
11
11
  if (expr->type == ExpressionType::COLUMN_REF) {
12
- auto &colref = (ColumnRefExpression &)*expr;
12
+ auto &colref = expr->Cast<ColumnRefExpression>();
13
13
  if (colref.IsQualified()) {
14
14
  throw ParserException("PIVOT IN list cannot contain qualified column references");
15
15
  }
16
16
  entry.values.emplace_back(colref.GetColumnName());
17
17
  } else if (expr->type == ExpressionType::VALUE_CONSTANT) {
18
- auto &constant_expr = (ConstantExpression &)*expr;
18
+ auto &constant_expr = expr->Cast<ConstantExpression>();
19
19
  entry.values.push_back(std::move(constant_expr.value));
20
20
  } else if (root_entry && expr->type == ExpressionType::FUNCTION) {
21
- auto &function = (FunctionExpression &)*expr;
21
+ auto &function = expr->Cast<FunctionExpression>();
22
22
  if (function.function_name != "row") {
23
23
  throw ParserException("PIVOT IN list must contain columns or lists of columns");
24
24
  }
@@ -421,6 +421,17 @@ void BindContext::GenerateAllColumnExpressions(StarExpression &expr,
421
421
  }
422
422
  }
423
423
 
424
+ void BindContext::GetTypesAndNames(vector<string> &result_names, vector<LogicalType> &result_types) {
425
+ for (auto &binding_entry : bindings_list) {
426
+ auto &binding = *binding_entry.second;
427
+ D_ASSERT(binding.names.size() == binding.types.size());
428
+ for (idx_t i = 0; i < binding.names.size(); i++) {
429
+ result_names.push_back(binding.names[i]);
430
+ result_types.push_back(binding.types[i]);
431
+ }
432
+ }
433
+ }
434
+
424
435
  void BindContext::AddBinding(const string &alias, unique_ptr<Binding> binding) {
425
436
  if (bindings.find(alias) != bindings.end()) {
426
437
  throw BinderException("Duplicate alias \"%s\" in query!", alias);
@@ -17,6 +17,44 @@
17
17
 
18
18
  namespace duckdb {
19
19
 
20
+ string GetSQLValueFunctionName(const string &column_name) {
21
+ auto lcase = StringUtil::Lower(column_name);
22
+ if (lcase == "current_catalog") {
23
+ return "current_catalog";
24
+ } else if (lcase == "current_date") {
25
+ return "current_date";
26
+ } else if (lcase == "current_schema") {
27
+ return "current_schema";
28
+ } else if (lcase == "current_role") {
29
+ return "current_role";
30
+ } else if (lcase == "current_time") {
31
+ return "get_current_time";
32
+ } else if (lcase == "current_timestamp") {
33
+ return "get_current_timestamp";
34
+ } else if (lcase == "current_user") {
35
+ return "current_user";
36
+ } else if (lcase == "localtime") {
37
+ return "current_localtime";
38
+ } else if (lcase == "localtimestamp") {
39
+ return "current_localtimestamp";
40
+ } else if (lcase == "session_user") {
41
+ return "session_user";
42
+ } else if (lcase == "user") {
43
+ return "user";
44
+ }
45
+ return string();
46
+ }
47
+
48
+ unique_ptr<ParsedExpression> ExpressionBinder::GetSQLValueFunction(const string &column_name) {
49
+ auto value_function = GetSQLValueFunctionName(column_name);
50
+ if (value_function.empty()) {
51
+ return nullptr;
52
+ }
53
+
54
+ vector<unique_ptr<ParsedExpression>> children;
55
+ return make_uniq<FunctionExpression>(value_function, std::move(children));
56
+ }
57
+
20
58
  unique_ptr<ParsedExpression> ExpressionBinder::QualifyColumnName(const string &column_name, string &error_message) {
21
59
  auto using_binding = binder.bind_context.GetUsingBinding(column_name);
22
60
  if (using_binding) {
@@ -70,6 +108,11 @@ unique_ptr<ParsedExpression> ExpressionBinder::QualifyColumnName(const string &c
70
108
  }
71
109
  // see if it's a column
72
110
  if (table_name.empty()) {
111
+ // column was not found - check if it is a SQL value function
112
+ auto value_function = GetSQLValueFunction(column_name);
113
+ if (value_function) {
114
+ return value_function;
115
+ }
73
116
  // it's not, find candidates and error
74
117
  auto similar_bindings = binder.bind_context.GetSimilarBindings(column_name);
75
118
  string candidate_str = StringUtil::CandidatesMessage(similar_bindings, "Candidate bindings");
@@ -83,7 +126,7 @@ unique_ptr<ParsedExpression> ExpressionBinder::QualifyColumnName(const string &c
83
126
  void ExpressionBinder::QualifyColumnNames(unique_ptr<ParsedExpression> &expr) {
84
127
  switch (expr->type) {
85
128
  case ExpressionType::COLUMN_REF: {
86
- auto &colref = (ColumnRefExpression &)*expr;
129
+ auto &colref = expr->Cast<ColumnRefExpression>();
87
130
  string error_message;
88
131
  auto new_expr = QualifyColumnName(colref, error_message);
89
132
  if (new_expr) {
@@ -96,7 +139,7 @@ void ExpressionBinder::QualifyColumnNames(unique_ptr<ParsedExpression> &expr) {
96
139
  break;
97
140
  }
98
141
  case ExpressionType::POSITIONAL_REFERENCE: {
99
- auto &ref = (PositionalReferenceExpression &)*expr;
142
+ auto &ref = expr->Cast<PositionalReferenceExpression>();
100
143
  if (ref.alias.empty()) {
101
144
  string table_name, column_name;
102
145
  auto error = binder.bind_context.BindColumn(ref, table_name, column_name);
@@ -124,7 +167,7 @@ unique_ptr<ParsedExpression> ExpressionBinder::CreateStructExtract(unique_ptr<Pa
124
167
  // we need to transform the struct extract if it is inside a lambda expression
125
168
  // because we cannot bind to an existing table, so we remove the dummy table also
126
169
  if (lambda_bindings && base->type == ExpressionType::COLUMN_REF) {
127
- auto &lambda_column_ref = (ColumnRefExpression &)*base;
170
+ auto &lambda_column_ref = base->Cast<ColumnRefExpression>();
128
171
  D_ASSERT(!lambda_column_ref.column_names.empty());
129
172
 
130
173
  if (lambda_column_ref.column_names[0].find(DummyBinding::DUMMY_NAME) != string::npos) {
@@ -304,7 +347,7 @@ BindResult ExpressionBinder::BindExpression(ColumnRefExpression &colref_p, idx_t
304
347
  return result;
305
348
  }
306
349
 
307
- auto &colref = (ColumnRefExpression &)*expr;
350
+ auto &colref = expr->Cast<ColumnRefExpression>();
308
351
  D_ASSERT(colref.IsQualified());
309
352
  auto &table_name = colref.GetTableName();
310
353
 
@@ -155,7 +155,7 @@ BindResult ExpressionBinder::BindLambdaFunction(FunctionExpression &function, Sc
155
155
  }
156
156
 
157
157
  // bind the lambda parameter
158
- auto &lambda_expr = (LambdaExpression &)*function.children[1];
158
+ auto &lambda_expr = function.children[1]->Cast<LambdaExpression>();
159
159
  BindResult bind_lambda_result = BindExpression(lambda_expr, depth, true, list_child_type);
160
160
 
161
161
  if (bind_lambda_result.HasError()) {
@@ -164,11 +164,10 @@ BindResult ExpressionBinder::BindLambdaFunction(FunctionExpression &function, Sc
164
164
  // successfully bound: replace the node with a BoundExpression
165
165
  auto alias = function.children[1]->alias;
166
166
  function.children[1] = make_uniq<BoundExpression>(std::move(bind_lambda_result.expression));
167
- auto be = (BoundExpression *)function.children[1].get();
168
- D_ASSERT(be);
169
- be->alias = alias;
167
+ auto &be = function.children[1]->Cast<BoundExpression>();
168
+ be.alias = alias;
170
169
  if (!alias.empty()) {
171
- be->expr->alias = alias;
170
+ be.expr->alias = alias;
172
171
  }
173
172
  }
174
173
 
@@ -199,7 +198,7 @@ BindResult ExpressionBinder::BindLambdaFunction(FunctionExpression &function, Sc
199
198
  throw BinderException(binder.FormatError(function, error));
200
199
  }
201
200
 
202
- auto &bound_function_expr = (BoundFunctionExpression &)*result;
201
+ auto &bound_function_expr = result->Cast<BoundFunctionExpression>();
203
202
  D_ASSERT(bound_function_expr.children.size() == 2);
204
203
 
205
204
  // remove the lambda expression from the children
@@ -34,7 +34,7 @@ BindResult ExpressionBinder::BindExpression(LambdaExpression &expr, idx_t depth,
34
34
  if (expr.lhs->expression_class == ExpressionClass::COLUMN_REF) {
35
35
  expr.params.push_back(std::move(expr.lhs));
36
36
  } else {
37
- auto &func_expr = (FunctionExpression &)*expr.lhs;
37
+ auto &func_expr = expr.lhs->Cast<FunctionExpression>();
38
38
  for (idx_t i = 0; i < func_expr.children.size(); i++) {
39
39
  expr.params.push_back(std::move(func_expr.children[i]));
40
40
  }
@@ -52,7 +52,7 @@ BindResult ExpressionBinder::BindExpression(LambdaExpression &expr, idx_t depth,
52
52
  throw BinderException("Parameter must be a column name.");
53
53
  }
54
54
 
55
- auto column_ref = (ColumnRefExpression &)*expr.params[i];
55
+ auto column_ref = expr.params[i]->Cast<ColumnRefExpression>();
56
56
  if (column_ref.IsQualified()) {
57
57
  throw BinderException("Invalid parameter name '%s': must be unqualified", column_ref.ToString());
58
58
  }
@@ -13,7 +13,7 @@ void ExpressionBinder::ReplaceMacroParametersRecursive(unique_ptr<ParsedExpressi
13
13
  switch (expr->GetExpressionClass()) {
14
14
  case ExpressionClass::COLUMN_REF: {
15
15
  // if expr is a parameter, replace it with its argument
16
- auto &colref = (ColumnRefExpression &)*expr;
16
+ auto &colref = expr->Cast<ColumnRefExpression>();
17
17
  bool bind_macro_parameter = false;
18
18
  if (colref.IsQualified()) {
19
19
  bind_macro_parameter = false;
@@ -31,7 +31,7 @@ void ExpressionBinder::ReplaceMacroParametersRecursive(unique_ptr<ParsedExpressi
31
31
  }
32
32
  case ExpressionClass::SUBQUERY: {
33
33
  // replacing parameters within a subquery is slightly different
34
- auto &sq = ((SubqueryExpression &)*expr).subquery;
34
+ auto &sq = (expr->Cast<SubqueryExpression>()).subquery;
35
35
  ParsedExpressionIterator::EnumerateQueryNodeChildren(
36
36
  *sq->node, [&](unique_ptr<ParsedExpression> &child) { ReplaceMacroParametersRecursive(child); });
37
37
  break;
@@ -65,7 +65,7 @@ BindResult ExpressionBinder::BindMacro(FunctionExpression &function, ScalarMacro
65
65
  // positional parameters
66
66
  for (idx_t i = 0; i < macro_def.parameters.size(); i++) {
67
67
  types.emplace_back(LogicalType::SQLNULL);
68
- auto &param = (ColumnRefExpression &)*macro_def.parameters[i];
68
+ auto &param = macro_def.parameters[i]->Cast<ColumnRefExpression>();
69
69
  names.push_back(param.GetColumnName());
70
70
  }
71
71
  // default parameters
@@ -12,10 +12,10 @@ bool Binder::FindStarExpression(unique_ptr<ParsedExpression> &expr, StarExpressi
12
12
  bool in_columns) {
13
13
  bool has_star = false;
14
14
  if (expr->GetExpressionClass() == ExpressionClass::STAR) {
15
- auto current_star = (StarExpression *)expr.get();
16
- if (!current_star->columns) {
15
+ auto &current_star = expr->Cast<StarExpression>();
16
+ if (!current_star.columns) {
17
17
  if (is_root) {
18
- *star = current_star;
18
+ *star = &current_star;
19
19
  return true;
20
20
  }
21
21
  if (!in_columns) {
@@ -23,12 +23,12 @@ bool Binder::FindStarExpression(unique_ptr<ParsedExpression> &expr, StarExpressi
23
23
  "STAR expression is only allowed as the root element of an expression. Use COLUMNS(*) instead.");
24
24
  }
25
25
  // star expression inside a COLUMNS - convert to a constant list
26
- if (!current_star->replace_list.empty()) {
26
+ if (!current_star.replace_list.empty()) {
27
27
  throw BinderException(
28
28
  "STAR expression with REPLACE list is only allowed as the root element of COLUMNS");
29
29
  }
30
30
  vector<unique_ptr<ParsedExpression>> star_list;
31
- bind_context.GenerateAllColumnExpressions(*current_star, star_list);
31
+ bind_context.GenerateAllColumnExpressions(current_star, star_list);
32
32
 
33
33
  vector<Value> values;
34
34
  values.reserve(star_list.size());
@@ -46,13 +46,13 @@ bool Binder::FindStarExpression(unique_ptr<ParsedExpression> &expr, StarExpressi
46
46
  in_columns = true;
47
47
  if (*star) {
48
48
  // we can have multiple
49
- if (!StarExpression::Equal(*star, current_star)) {
49
+ if (!StarExpression::Equal(*star, &current_star)) {
50
50
  throw BinderException(
51
51
  FormatError(*expr, "Multiple different STAR/COLUMNS in the same expression are not supported"));
52
52
  }
53
53
  return true;
54
54
  }
55
- *star = current_star;
55
+ *star = &current_star;
56
56
  has_star = true;
57
57
  }
58
58
  ParsedExpressionIterator::EnumerateChildren(*expr, [&](unique_ptr<ParsedExpression> &child_expr) {
@@ -118,7 +118,7 @@ void Binder::ExpandStarExpression(unique_ptr<ParsedExpression> expr,
118
118
  }
119
119
  vector<unique_ptr<ParsedExpression>> new_list;
120
120
  for (idx_t i = 0; i < star_list.size(); i++) {
121
- auto &colref = (ColumnRefExpression &)*star_list[i];
121
+ auto &colref = star_list[i]->Cast<ColumnRefExpression>();
122
122
  if (!RE2::PartialMatch(colref.GetColumnName(), regex)) {
123
123
  continue;
124
124
  }