duckdb 0.8.2-dev145.0 → 0.8.2-dev1493.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 (476) hide show
  1. package/binding.gyp +15 -12
  2. package/binding.gyp.in +1 -1
  3. package/configure.py +1 -1
  4. package/duckdb_extension_config.cmake +10 -0
  5. package/package.json +1 -1
  6. package/src/duckdb/extension/icu/icu-dateadd.cpp +2 -2
  7. package/src/duckdb/extension/icu/icu-datefunc.cpp +1 -1
  8. package/src/duckdb/extension/icu/icu-datepart.cpp +2 -2
  9. package/src/duckdb/extension/icu/icu-datesub.cpp +2 -2
  10. package/src/duckdb/extension/icu/icu-datetrunc.cpp +1 -1
  11. package/src/duckdb/extension/icu/icu-list-range.cpp +1 -1
  12. package/src/duckdb/extension/icu/icu-makedate.cpp +7 -0
  13. package/src/duckdb/extension/icu/icu-strptime.cpp +4 -4
  14. package/src/duckdb/extension/icu/icu-table-range.cpp +5 -5
  15. package/src/duckdb/extension/icu/icu-timebucket.cpp +16 -16
  16. package/src/duckdb/extension/icu/icu-timezone.cpp +8 -8
  17. package/src/duckdb/extension/icu/icu_extension.cpp +3 -3
  18. package/src/duckdb/extension/json/include/json_common.hpp +47 -231
  19. package/src/duckdb/extension/json/include/json_executors.hpp +49 -13
  20. package/src/duckdb/extension/json/include/json_functions.hpp +2 -1
  21. package/src/duckdb/extension/json/json_common.cpp +272 -40
  22. package/src/duckdb/extension/json/json_functions/json_structure.cpp +1 -1
  23. package/src/duckdb/extension/json/json_functions/json_transform.cpp +17 -37
  24. package/src/duckdb/extension/json/json_functions/json_type.cpp +1 -1
  25. package/src/duckdb/extension/json/json_functions.cpp +24 -24
  26. package/src/duckdb/extension/json/json_scan.cpp +3 -6
  27. package/src/duckdb/extension/parquet/column_reader.cpp +19 -21
  28. package/src/duckdb/extension/parquet/column_writer.cpp +77 -61
  29. package/src/duckdb/extension/parquet/include/cast_column_reader.hpp +2 -2
  30. package/src/duckdb/extension/parquet/include/column_reader.hpp +14 -16
  31. package/src/duckdb/extension/parquet/include/column_writer.hpp +9 -7
  32. package/src/duckdb/extension/parquet/include/list_column_reader.hpp +2 -2
  33. package/src/duckdb/extension/parquet/include/parquet_dbp_decoder.hpp +3 -3
  34. package/src/duckdb/extension/parquet/include/parquet_decimal_utils.hpp +3 -3
  35. package/src/duckdb/extension/parquet/include/parquet_file_metadata_cache.hpp +2 -2
  36. package/src/duckdb/extension/parquet/include/parquet_statistics.hpp +2 -2
  37. package/src/duckdb/extension/parquet/include/parquet_support.hpp +9 -11
  38. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +24 -5
  39. package/src/duckdb/extension/parquet/include/string_column_reader.hpp +1 -1
  40. package/src/duckdb/extension/parquet/include/struct_column_reader.hpp +2 -3
  41. package/src/duckdb/extension/parquet/include/zstd_file_system.hpp +2 -2
  42. package/src/duckdb/extension/parquet/parquet_extension.cpp +192 -20
  43. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -6
  44. package/src/duckdb/extension/parquet/parquet_statistics.cpp +7 -6
  45. package/src/duckdb/extension/parquet/parquet_writer.cpp +79 -16
  46. package/src/duckdb/extension/parquet/zstd_file_system.cpp +2 -2
  47. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +1 -1
  48. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -4
  49. package/src/duckdb/src/catalog/default/default_functions.cpp +16 -0
  50. package/src/duckdb/src/common/adbc/adbc.cpp +75 -10
  51. package/src/duckdb/src/common/adbc/driver_manager.cpp +6 -11
  52. package/src/duckdb/src/common/allocator.cpp +14 -2
  53. package/src/duckdb/src/common/arrow/arrow_appender.cpp +5 -11
  54. package/src/duckdb/src/common/assert.cpp +3 -0
  55. package/src/duckdb/src/common/enum_util.cpp +42 -5
  56. package/src/duckdb/src/common/enums/logical_operator_type.cpp +4 -0
  57. package/src/duckdb/src/common/enums/optimizer_type.cpp +2 -0
  58. package/src/duckdb/src/common/enums/physical_operator_type.cpp +4 -0
  59. package/src/duckdb/src/common/exception.cpp +2 -2
  60. package/src/duckdb/src/common/file_system.cpp +19 -0
  61. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  62. package/src/duckdb/src/common/local_file_system.cpp +2 -2
  63. package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
  64. package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
  65. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  66. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  67. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  68. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  69. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  70. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  71. package/src/duckdb/src/common/types/bit.cpp +51 -0
  72. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  73. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  74. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  75. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  76. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  77. package/src/duckdb/src/common/types/date.cpp +9 -0
  78. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  79. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  80. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  81. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  82. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  83. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  84. package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
  85. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
  86. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  87. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  88. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  89. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  90. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  91. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  92. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  93. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  94. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  95. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  96. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  97. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  98. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  99. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  100. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  101. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  102. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  103. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  104. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  105. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  106. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  107. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  108. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  109. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  110. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  111. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  112. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  113. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  114. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  115. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  116. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +414 -283
  117. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  118. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  119. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  120. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +22 -3
  121. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +2 -2
  122. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  123. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  124. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  125. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  126. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  127. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  128. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  129. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  130. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  131. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  132. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
  133. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  134. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  135. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  136. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  137. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  138. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  139. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  140. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  141. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  142. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  143. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  144. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  145. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  146. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  147. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  148. package/src/duckdb/src/function/function.cpp +3 -1
  149. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  150. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  151. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  152. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  153. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  154. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  155. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  156. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  157. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  158. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  159. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  160. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  161. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  162. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  163. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +8 -0
  164. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  165. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  166. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  167. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  168. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  169. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  170. package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
  171. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  172. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  173. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  174. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  175. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
  176. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  177. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  178. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  179. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  180. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  181. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  182. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  183. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  184. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  185. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  186. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  187. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  188. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  189. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  190. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  191. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  192. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  193. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  194. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
  195. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  196. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  197. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  198. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
  199. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  200. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  201. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  202. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  203. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  204. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  205. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  206. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
  207. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  208. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  209. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
  210. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  211. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
  212. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
  213. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  214. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
  215. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  216. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  217. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  218. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  219. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  220. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  221. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  222. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  223. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  224. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  225. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  226. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  227. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  228. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +2 -10
  229. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  230. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  231. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  232. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  233. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  234. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  235. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
  236. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  237. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  238. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  239. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  240. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  241. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  242. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  244. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  245. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  246. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  247. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  248. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  249. package/src/duckdb/src/include/duckdb/main/client_config.hpp +3 -0
  250. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  251. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  252. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  253. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  254. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  255. package/src/duckdb/src/include/duckdb/main/settings.hpp +30 -1
  256. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  257. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  258. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  259. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  260. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
  261. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  262. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  263. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  264. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  265. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  266. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  267. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  268. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  269. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  271. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  272. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  273. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  274. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  275. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  276. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  277. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  278. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  279. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  284. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  285. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  286. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  287. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  288. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  289. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  291. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  292. package/src/duckdb/src/include/duckdb/planner/binder.hpp +8 -5
  293. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  294. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  295. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  296. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  297. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  298. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  299. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  300. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  301. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  302. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
  303. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  304. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  305. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  306. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  307. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  308. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  309. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  310. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  311. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  312. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  313. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  314. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  316. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  317. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  318. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  319. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  320. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  321. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  322. package/src/duckdb/src/include/duckdb.h +28 -0
  323. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  324. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  325. package/src/duckdb/src/main/config.cpp +3 -0
  326. package/src/duckdb/src/main/database.cpp +1 -1
  327. package/src/duckdb/src/main/extension/extension_helper.cpp +96 -89
  328. package/src/duckdb/src/main/extension/extension_install.cpp +6 -0
  329. package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
  330. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  331. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  332. package/src/duckdb/src/main/relation.cpp +6 -5
  333. package/src/duckdb/src/main/settings/settings.cpp +64 -18
  334. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  335. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  336. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  337. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  338. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  339. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  340. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  341. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  342. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  343. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  344. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  345. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  346. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  347. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  348. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  349. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  350. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  351. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  352. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  353. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  354. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  355. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  356. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  357. package/src/duckdb/src/parallel/executor.cpp +15 -0
  358. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  359. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  360. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  361. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
  362. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  363. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  364. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  365. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  366. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  367. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  368. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  369. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  370. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  371. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  372. package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
  373. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  374. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  375. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  376. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  377. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  378. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  379. package/src/duckdb/src/parser/parser.cpp +8 -2
  380. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  381. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  382. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  383. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  384. package/src/duckdb/src/parser/query_node.cpp +15 -37
  385. package/src/duckdb/src/parser/result_modifier.cpp +0 -74
  386. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  387. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  388. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  389. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  390. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
  391. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  392. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  393. package/src/duckdb/src/parser/tableref.cpp +0 -44
  394. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  395. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  396. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  397. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  398. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  399. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  400. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  401. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  402. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  403. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  404. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  405. package/src/duckdb/src/parser/transformer.cpp +15 -0
  406. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  407. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  408. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  409. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  410. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  411. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
  412. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  413. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  414. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
  415. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  416. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -26
  417. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  418. package/src/duckdb/src/planner/binder.cpp +5 -0
  419. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  420. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  421. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  422. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  423. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  424. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  425. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  426. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  427. package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
  428. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  429. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  430. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  431. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  432. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  433. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  434. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  435. package/src/duckdb/src/storage/compression/rle.cpp +0 -1
  436. package/src/duckdb/src/storage/data_table.cpp +1 -1
  437. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  438. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
  439. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  440. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
  441. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
  442. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  443. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  444. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  445. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  446. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  447. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  448. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  449. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  450. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  451. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  452. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  453. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  454. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  455. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
  456. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  457. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  458. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  459. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  460. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  461. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  462. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  463. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  464. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  465. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  466. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  467. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  468. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  469. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  470. package/src/duckdb/ub_src_storage_serialization.cpp +8 -0
  471. package/src/statement.cpp +10 -3
  472. package/test/test_all_types.test.ts +233 -0
  473. package/tsconfig.json +1 -0
  474. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  475. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  476. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -37,6 +37,9 @@ public:
37
37
 
38
38
  void FormatSerialize(FormatSerializer &serializer) const override;
39
39
  static unique_ptr<ParsedExpression> FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer);
40
+
41
+ private:
42
+ ConstantExpression();
40
43
  };
41
44
 
42
45
  } // namespace duckdb
@@ -31,5 +31,6 @@ public:
31
31
  void Serialize(FieldWriter &writer) const override;
32
32
  static unique_ptr<ParsedExpression> Deserialize(ExpressionType type, FieldReader &source);
33
33
  void FormatSerialize(FormatSerializer &serializer) const override;
34
+ static unique_ptr<ParsedExpression> FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer);
34
35
  };
35
36
  } // namespace duckdb
@@ -120,5 +120,8 @@ public:
120
120
 
121
121
  return result;
122
122
  }
123
+
124
+ private:
125
+ FunctionExpression();
123
126
  };
124
127
  } // namespace duckdb
@@ -42,6 +42,9 @@ public:
42
42
  static unique_ptr<ParsedExpression> Deserialize(ExpressionType type, FieldReader &source);
43
43
  void FormatSerialize(FormatSerializer &serializer) const override;
44
44
  static unique_ptr<ParsedExpression> FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer);
45
+
46
+ private:
47
+ LambdaExpression();
45
48
  };
46
49
 
47
50
  } // namespace duckdb
@@ -35,5 +35,8 @@ public:
35
35
  static unique_ptr<ParsedExpression> Deserialize(ExpressionType type, FieldReader &source);
36
36
  void FormatSerialize(FormatSerializer &serializer) const override;
37
37
  static unique_ptr<ParsedExpression> FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer);
38
+
39
+ private:
40
+ PositionalReferenceExpression();
38
41
  };
39
42
  } // namespace duckdb
@@ -210,6 +210,9 @@ public:
210
210
 
211
211
  return result;
212
212
  }
213
+
214
+ private:
215
+ explicit WindowExpression(ExpressionType type);
213
216
  };
214
217
 
215
218
  } // namespace duckdb
@@ -0,0 +1,54 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/parser/query_node/cte_node.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/parser/parsed_expression.hpp"
12
+ #include "duckdb/parser/query_node.hpp"
13
+ #include "duckdb/parser/sql_statement.hpp"
14
+
15
+ namespace duckdb {
16
+
17
+ class CTENode : public QueryNode {
18
+ public:
19
+ static constexpr const QueryNodeType TYPE = QueryNodeType::CTE_NODE;
20
+
21
+ public:
22
+ CTENode() : QueryNode(QueryNodeType::CTE_NODE) {
23
+ }
24
+
25
+ string ctename;
26
+ //! The query of the CTE
27
+ unique_ptr<QueryNode> query;
28
+ //! Child
29
+ unique_ptr<QueryNode> child;
30
+ //! Aliases of the CTE node
31
+ vector<string> aliases;
32
+
33
+ const vector<unique_ptr<ParsedExpression>> &GetSelectList() const override {
34
+ return query->GetSelectList();
35
+ }
36
+
37
+ public:
38
+ //! Convert the query node to a string
39
+ string ToString() const override;
40
+
41
+ bool Equals(const QueryNode *other) const override;
42
+ //! Create a copy of this SelectNode
43
+ unique_ptr<QueryNode> Copy() const override;
44
+
45
+ //! Serializes a QueryNode to a stand-alone binary blob
46
+ void Serialize(FieldWriter &writer) const override;
47
+ //! Deserializes a blob back into a QueryNode
48
+ static unique_ptr<QueryNode> Deserialize(FieldReader &reader);
49
+
50
+ void FormatSerialize(FormatSerializer &serializer) const override;
51
+ static unique_ptr<QueryNode> FormatDeserialize(FormatDeserializer &source);
52
+ };
53
+
54
+ } // namespace duckdb
@@ -1,3 +1,4 @@
1
1
  #include "duckdb/parser/query_node/recursive_cte_node.hpp"
2
+ #include "duckdb/parser/query_node/cte_node.hpp"
2
3
  #include "duckdb/parser/query_node/select_node.hpp"
3
4
  #include "duckdb/parser/query_node/set_operation_node.hpp"
@@ -25,7 +25,8 @@ enum class QueryNodeType : uint8_t {
25
25
  SELECT_NODE = 1,
26
26
  SET_OPERATION_NODE = 2,
27
27
  BOUND_SUBQUERY_NODE = 3,
28
- RECURSIVE_CTE_NODE = 4
28
+ RECURSIVE_CTE_NODE = 4,
29
+ CTE_NODE = 5
29
30
  };
30
31
 
31
32
  struct CommonTableExpressionInfo;
@@ -31,6 +31,7 @@ public:
31
31
  //! Deserializes a blob back into a DummyTableRef
32
32
  static unique_ptr<TableRef> Deserialize(FieldReader &source);
33
33
 
34
+ void FormatSerialize(FormatSerializer &serializer) const override;
34
35
  static unique_ptr<TableRef> FormatDeserialize(FormatDeserializer &source);
35
36
  };
36
37
  } // namespace duckdb
@@ -23,7 +23,7 @@ public:
23
23
  static constexpr const TableReferenceType TYPE = TableReferenceType::JOIN;
24
24
 
25
25
  public:
26
- explicit JoinRef(JoinRefType ref_type)
26
+ explicit JoinRef(JoinRefType ref_type = JoinRefType::REGULAR)
27
27
  : TableRef(TableReferenceType::JOIN), type(JoinType::INNER), ref_type(ref_type) {
28
28
  }
29
29
 
@@ -17,6 +17,9 @@ class SubqueryRef : public TableRef {
17
17
  public:
18
18
  static constexpr const TableReferenceType TYPE = TableReferenceType::SUBQUERY;
19
19
 
20
+ private:
21
+ SubqueryRef();
22
+
20
23
  public:
21
24
  DUCKDB_API explicit SubqueryRef(unique_ptr<SelectStatement> subquery, string alias = string());
22
25
 
@@ -50,6 +50,7 @@ class QueryNode;
50
50
  class SelectNode;
51
51
  class SetOperationNode;
52
52
  class RecursiveCTENode;
53
+ class CTENode;
53
54
 
54
55
  //===--------------------------------------------------------------------===//
55
56
  // Expressions
@@ -8,20 +8,20 @@
8
8
 
9
9
  #pragma once
10
10
 
11
+ #include "duckdb/common/case_insensitive_map.hpp"
11
12
  #include "duckdb/common/constants.hpp"
12
13
  #include "duckdb/common/enums/expression_type.hpp"
13
14
  #include "duckdb/common/types.hpp"
14
15
  #include "duckdb/common/unordered_map.hpp"
15
- #include "duckdb/parser/qualified_name.hpp"
16
- #include "duckdb/parser/tokens.hpp"
17
- #include "duckdb/parser/parsed_data/create_info.hpp"
18
16
  #include "duckdb/parser/group_by_node.hpp"
17
+ #include "duckdb/parser/parsed_data/create_info.hpp"
18
+ #include "duckdb/parser/qualified_name.hpp"
19
19
  #include "duckdb/parser/query_node.hpp"
20
- #include "duckdb/common/case_insensitive_map.hpp"
21
-
22
- #include "pg_definitions.hpp"
20
+ #include "duckdb/parser/query_node/cte_node.hpp"
21
+ #include "duckdb/parser/tokens.hpp"
23
22
  #include "nodes/parsenodes.hpp"
24
23
  #include "nodes/primnodes.hpp"
24
+ #include "pg_definitions.hpp"
25
25
 
26
26
  namespace duckdb {
27
27
 
@@ -232,6 +232,9 @@ private:
232
232
  unique_ptr<ParsedExpression> TransformParamRef(duckdb_libpgquery::PGParamRef &node);
233
233
  unique_ptr<ParsedExpression> TransformNamedArg(duckdb_libpgquery::PGNamedArgExpr &root);
234
234
 
235
+ //! Transform multi assignment reference into an Expression
236
+ unique_ptr<ParsedExpression> TransformMultiAssignRef(duckdb_libpgquery::PGMultiAssignRef &root);
237
+
235
238
  unique_ptr<ParsedExpression> TransformSQLValueFunction(duckdb_libpgquery::PGSQLValueFunction &node);
236
239
 
237
240
  unique_ptr<ParsedExpression> TransformSubquery(duckdb_libpgquery::PGSubLink &root);
@@ -269,13 +272,17 @@ private:
269
272
  OnCreateConflict TransformOnConflict(duckdb_libpgquery::PGOnCreateConflict conflict);
270
273
  string TransformAlias(duckdb_libpgquery::PGAlias *root, vector<string> &column_name_alias);
271
274
  vector<string> TransformStringList(duckdb_libpgquery::PGList *list);
272
- void TransformCTE(duckdb_libpgquery::PGWithClause &de_with_clause, CommonTableExpressionMap &cte_map);
273
- unique_ptr<SelectStatement> TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr &cte,
275
+ void TransformCTE(duckdb_libpgquery::PGWithClause &de_with_clause, CommonTableExpressionMap &cte_map,
276
+ vector<unique_ptr<CTENode>> &materialized_ctes);
277
+ static unique_ptr<QueryNode> TransformMaterializedCTE(unique_ptr<QueryNode> root,
278
+ vector<unique_ptr<CTENode>> &materialized_ctes);
279
+ unique_ptr<SelectStatement> TransformRecursiveCTE(duckdb_libpgquery::PGCommonTableExpr &node,
274
280
  CommonTableExpressionInfo &info);
275
281
 
276
282
  unique_ptr<ParsedExpression> TransformUnaryOperator(const string &op, unique_ptr<ParsedExpression> child);
277
283
  unique_ptr<ParsedExpression> TransformBinaryOperator(string op, unique_ptr<ParsedExpression> left,
278
284
  unique_ptr<ParsedExpression> right);
285
+ static bool ConstructConstantFromExpression(const ParsedExpression &expr, Value &value);
279
286
  //===--------------------------------------------------------------------===//
280
287
  // TableRef transform
281
288
  //===--------------------------------------------------------------------===//
@@ -21,6 +21,7 @@
21
21
  #include "duckdb/planner/bound_tokens.hpp"
22
22
  #include "duckdb/planner/expression/bound_columnref_expression.hpp"
23
23
  #include "duckdb/planner/logical_operator.hpp"
24
+ #include "duckdb/planner/joinside.hpp"
24
25
  #include "duckdb/common/reference_map.hpp"
25
26
 
26
27
  namespace duckdb {
@@ -75,7 +76,7 @@ struct CorrelatedColumnInfo {
75
76
  */
76
77
  class Binder : public std::enable_shared_from_this<Binder> {
77
78
  friend class ExpressionBinder;
78
- friend class RecursiveSubqueryPlanner;
79
+ friend class RecursiveDependentJoinPlanner;
79
80
 
80
81
  public:
81
82
  DUCKDB_API static shared_ptr<Binder> CreateBinder(ClientContext &context, optional_ptr<Binder> parent = nullptr,
@@ -199,10 +200,10 @@ private:
199
200
  vector<reference<ExpressionBinder>> active_binders;
200
201
  //! The count of bound_tables
201
202
  idx_t bound_tables;
202
- //! Whether or not the binder has any unplanned subqueries that still need to be planned
203
- bool has_unplanned_subqueries = false;
204
- //! Whether or not subqueries should be planned already
205
- bool plan_subquery = true;
203
+ //! Whether or not the binder has any unplanned dependent joins that still need to be planned/flattened
204
+ bool has_unplanned_dependent_joins = false;
205
+ //! Whether or not outside dependent joins have been planned and flattened
206
+ bool is_outside_flattened = true;
206
207
  //! Whether CTEs should reference the parent binder (if it exists)
207
208
  bool inherit_ctes = true;
208
209
  //! Whether or not the binder can contain NULLs as the root of expressions
@@ -265,10 +266,12 @@ private:
265
266
  unique_ptr<BoundQueryNode> BindNode(SelectNode &node);
266
267
  unique_ptr<BoundQueryNode> BindNode(SetOperationNode &node);
267
268
  unique_ptr<BoundQueryNode> BindNode(RecursiveCTENode &node);
269
+ unique_ptr<BoundQueryNode> BindNode(CTENode &node);
268
270
  unique_ptr<BoundQueryNode> BindNode(QueryNode &node);
269
271
 
270
272
  unique_ptr<LogicalOperator> VisitQueryNode(BoundQueryNode &node, unique_ptr<LogicalOperator> root);
271
273
  unique_ptr<LogicalOperator> CreatePlan(BoundRecursiveCTENode &node);
274
+ unique_ptr<LogicalOperator> CreatePlan(BoundCTENode &node);
272
275
  unique_ptr<LogicalOperator> CreatePlan(BoundSelectNode &statement);
273
276
  unique_ptr<LogicalOperator> CreatePlan(BoundSetOperationNode &node);
274
277
  unique_ptr<LogicalOperator> CreatePlan(BoundQueryNode &node);
@@ -17,6 +17,7 @@ class BoundQueryNode;
17
17
  class BoundSelectNode;
18
18
  class BoundSetOperationNode;
19
19
  class BoundRecursiveCTENode;
20
+ class BoundCTENode;
20
21
 
21
22
  //===--------------------------------------------------------------------===//
22
23
  // Expressions
@@ -32,6 +32,10 @@ struct ColumnBinding {
32
32
  bool operator==(const ColumnBinding &rhs) const {
33
33
  return table_index == rhs.table_index && column_index == rhs.column_index;
34
34
  }
35
+
36
+ bool operator!=(const ColumnBinding &rhs) const {
37
+ return !(*this == rhs);
38
+ }
35
39
  };
36
40
 
37
41
  } // namespace duckdb
@@ -23,9 +23,9 @@ public:
23
23
  : BoundConstraint(ConstraintType::UNIQUE), keys(std::move(keys)), key_set(std::move(key_set)),
24
24
  is_primary_key(is_primary_key) {
25
25
  #ifdef DEBUG
26
- D_ASSERT(keys.size() == key_set.size());
27
- for (auto &key : keys) {
28
- D_ASSERT(key_set.find(key) != key_set.end());
26
+ D_ASSERT(this->keys.size() == this->key_set.size());
27
+ for (auto &key : this->keys) {
28
+ D_ASSERT(this->key_set.find(key) != this->key_set.end());
29
29
  }
30
30
  #endif
31
31
  }
@@ -20,8 +20,6 @@ class LateralBinder : public ExpressionBinder {
20
20
  public:
21
21
  LateralBinder(Binder &binder, ClientContext &context);
22
22
 
23
- //! Extract the correlated lateral join columns and remove them from the targeted binder
24
- vector<CorrelatedColumnInfo> ExtractCorrelatedColumns(Binder &binder);
25
23
  bool HasCorrelatedColumns() const {
26
24
  return !correlated_columns.empty();
27
25
  }
@@ -46,6 +46,7 @@ class LogicalPragma;
46
46
  class LogicalPrepare;
47
47
  class LogicalProjection;
48
48
  class LogicalRecursiveCTE;
49
+ class LogicalMaterializedCTE;
49
50
  class LogicalSetOperation;
50
51
  class LogicalSample;
51
52
  class LogicalShow;
@@ -25,6 +25,7 @@
25
25
  #include "duckdb/planner/operator/logical_join.hpp"
26
26
  #include "duckdb/planner/operator/logical_limit.hpp"
27
27
  #include "duckdb/planner/operator/logical_limit_percent.hpp"
28
+ #include "duckdb/planner/operator/logical_materialized_cte.hpp"
28
29
  #include "duckdb/planner/operator/logical_order.hpp"
29
30
  #include "duckdb/planner/operator/logical_pivot.hpp"
30
31
  #include "duckdb/planner/operator/logical_positional_join.hpp"
@@ -32,9 +33,9 @@
32
33
  #include "duckdb/planner/operator/logical_prepare.hpp"
33
34
  #include "duckdb/planner/operator/logical_projection.hpp"
34
35
  #include "duckdb/planner/operator/logical_recursive_cte.hpp"
36
+ #include "duckdb/planner/operator/logical_reset.hpp"
35
37
  #include "duckdb/planner/operator/logical_sample.hpp"
36
38
  #include "duckdb/planner/operator/logical_set.hpp"
37
- #include "duckdb/planner/operator/logical_reset.hpp"
38
39
  #include "duckdb/planner/operator/logical_set_operation.hpp"
39
40
  #include "duckdb/planner/operator/logical_show.hpp"
40
41
  #include "duckdb/planner/operator/logical_simple.hpp"
@@ -38,25 +38,25 @@ public:
38
38
  FieldReader &reader);
39
39
 
40
40
  public:
41
- static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
41
+ static unique_ptr<LogicalOperator> CreateJoin(ClientContext &context, JoinType type, JoinRefType ref_type,
42
42
  unique_ptr<LogicalOperator> left_child,
43
43
  unique_ptr<LogicalOperator> right_child,
44
44
  unique_ptr<Expression> condition);
45
- static unique_ptr<LogicalOperator> CreateJoin(JoinType type, JoinRefType ref_type,
45
+ static unique_ptr<LogicalOperator> CreateJoin(ClientContext &context, JoinType type, JoinRefType ref_type,
46
46
  unique_ptr<LogicalOperator> left_child,
47
47
  unique_ptr<LogicalOperator> right_child,
48
48
  vector<JoinCondition> conditions,
49
49
  vector<unique_ptr<Expression>> arbitrary_expressions);
50
50
 
51
- static void ExtractJoinConditions(JoinType type, unique_ptr<LogicalOperator> &left_child,
51
+ static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
52
52
  unique_ptr<LogicalOperator> &right_child, unique_ptr<Expression> condition,
53
53
  vector<JoinCondition> &conditions,
54
54
  vector<unique_ptr<Expression>> &arbitrary_expressions);
55
- static void ExtractJoinConditions(JoinType type, unique_ptr<LogicalOperator> &left_child,
55
+ static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
56
56
  unique_ptr<LogicalOperator> &right_child,
57
57
  vector<unique_ptr<Expression>> &expressions, vector<JoinCondition> &conditions,
58
58
  vector<unique_ptr<Expression>> &arbitrary_expressions);
59
- static void ExtractJoinConditions(JoinType type, unique_ptr<LogicalOperator> &left_child,
59
+ static void ExtractJoinConditions(ClientContext &context, JoinType type, unique_ptr<LogicalOperator> &left_child,
60
60
  unique_ptr<LogicalOperator> &right_child,
61
61
  const unordered_set<idx_t> &left_bindings,
62
62
  const unordered_set<idx_t> &right_bindings,
@@ -10,6 +10,7 @@
10
10
 
11
11
  #include "duckdb/common/types/chunk_collection.hpp"
12
12
  #include "duckdb/planner/logical_operator.hpp"
13
+ #include "duckdb/common/enums/cte_materialize.hpp"
13
14
 
14
15
  namespace duckdb {
15
16
 
@@ -19,8 +20,10 @@ public:
19
20
  static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_CTE_REF;
20
21
 
21
22
  public:
22
- LogicalCTERef(idx_t table_index, idx_t cte_index, vector<LogicalType> types, vector<string> colnames)
23
- : LogicalOperator(LogicalOperatorType::LOGICAL_CTE_REF), table_index(table_index), cte_index(cte_index) {
23
+ LogicalCTERef(idx_t table_index, idx_t cte_index, vector<LogicalType> types, vector<string> colnames,
24
+ CTEMaterialize materialized_cte)
25
+ : LogicalOperator(LogicalOperatorType::LOGICAL_CTE_REF), table_index(table_index), cte_index(cte_index),
26
+ materialized_cte(materialized_cte) {
24
27
  D_ASSERT(types.size() > 0);
25
28
  chunk_types = types;
26
29
  bound_columns = colnames;
@@ -33,6 +36,8 @@ public:
33
36
  idx_t cte_index;
34
37
  //! The types of the chunk
35
38
  vector<LogicalType> chunk_types;
39
+ //! Does this operator read a materialized CTE?
40
+ CTEMaterialize materialized_cte;
36
41
 
37
42
  public:
38
43
  vector<ColumnBinding> GetColumnBindings() override {
@@ -0,0 +1,43 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/planner/operator/logical_dependent_join.hpp
5
+ //
6
+ // logical_dependent_join represents a logical operator for lateral joins that
7
+ // is planned but not yet flattened
8
+ //
9
+ // This construct only exists during planning and should not exist in the plan
10
+ // once flattening is complete. Although the same information can be kept in the
11
+ // join itself, creating a new construct makes the code cleaner and easier to
12
+ // understand.
13
+ //
14
+ //===----------------------------------------------------------------------===//
15
+
16
+ #pragma once
17
+
18
+ #include "duckdb/planner/binder.hpp"
19
+ #include "duckdb/planner/operator/logical_comparison_join.hpp"
20
+
21
+ namespace duckdb {
22
+
23
+ class LogicalDependentJoin : public LogicalComparisonJoin {
24
+ public:
25
+ static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_DEPENDENT_JOIN;
26
+
27
+ public:
28
+ explicit LogicalDependentJoin(unique_ptr<LogicalOperator> left, unique_ptr<LogicalOperator> right,
29
+ vector<CorrelatedColumnInfo> correlated_columns, JoinType type,
30
+ unique_ptr<Expression> condition);
31
+
32
+ //! The conditions of the join
33
+ unique_ptr<Expression> join_condition;
34
+ //! The list of columns that have correlations with the right
35
+ vector<CorrelatedColumnInfo> correlated_columns;
36
+
37
+ public:
38
+ static unique_ptr<LogicalOperator> Create(unique_ptr<LogicalOperator> left, unique_ptr<LogicalOperator> right,
39
+ vector<CorrelatedColumnInfo> correlated_columns, JoinType type,
40
+ unique_ptr<Expression> condition);
41
+ void Serialize(FieldWriter &writer) const override;
42
+ };
43
+ } // namespace duckdb
@@ -11,6 +11,7 @@
11
11
  #include "duckdb/function/table_function.hpp"
12
12
  #include "duckdb/planner/logical_operator.hpp"
13
13
  #include "duckdb/planner/table_filter.hpp"
14
+ #include "duckdb/common/extra_operator_info.hpp"
14
15
 
15
16
  namespace duckdb {
16
17
 
@@ -49,6 +50,9 @@ public:
49
50
  vector<string> input_table_names;
50
51
  //! For a table-in-out function, the set of projected input columns
51
52
  vector<column_t> projected_input;
53
+ //! Currently stores File Filters (as strings) applied by hive partitioning/complex filter pushdown
54
+ //! Stored so the can be included in explain output
55
+ ExtraOperatorInfo extra_info;
52
56
 
53
57
  string GetName() const override;
54
58
  string ParamsToString() const override;
@@ -0,0 +1,49 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/planner/operator/logical_materialized_cte.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/planner/logical_operator.hpp"
12
+
13
+ namespace duckdb {
14
+
15
+ class LogicalMaterializedCTE : public LogicalOperator {
16
+ LogicalMaterializedCTE(idx_t table_index)
17
+ : LogicalOperator(LogicalOperatorType::LOGICAL_MATERIALIZED_CTE), table_index(table_index) {
18
+ }
19
+
20
+ public:
21
+ static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_MATERIALIZED_CTE;
22
+
23
+ public:
24
+ LogicalMaterializedCTE(string ctename, idx_t table_index, idx_t column_count, unique_ptr<LogicalOperator> cte,
25
+ unique_ptr<LogicalOperator> child)
26
+ : LogicalOperator(LogicalOperatorType::LOGICAL_MATERIALIZED_CTE), table_index(table_index),
27
+ column_count(column_count), ctename(ctename) {
28
+ children.push_back(std::move(cte));
29
+ children.push_back(std::move(child));
30
+ }
31
+
32
+ idx_t table_index;
33
+ idx_t column_count;
34
+ string ctename;
35
+
36
+ public:
37
+ vector<ColumnBinding> GetColumnBindings() override {
38
+ return children[1]->GetColumnBindings();
39
+ }
40
+ void Serialize(FieldWriter &writer) const override;
41
+ static unique_ptr<LogicalOperator> Deserialize(LogicalDeserializationState &state, FieldReader &reader);
42
+ vector<idx_t> GetTableIndex() const override;
43
+
44
+ protected:
45
+ void ResolveTypes() override {
46
+ types = children[1]->types;
47
+ }
48
+ };
49
+ } // namespace duckdb
@@ -22,15 +22,16 @@ public:
22
22
  static constexpr const LogicalOperatorType TYPE = LogicalOperatorType::LOGICAL_RECURSIVE_CTE;
23
23
 
24
24
  public:
25
- LogicalRecursiveCTE(idx_t table_index, idx_t column_count, bool union_all, unique_ptr<LogicalOperator> top,
26
- unique_ptr<LogicalOperator> bottom)
27
- : LogicalOperator(LogicalOperatorType::LOGICAL_RECURSIVE_CTE), union_all(union_all), table_index(table_index),
28
- column_count(column_count) {
25
+ LogicalRecursiveCTE(string ctename, idx_t table_index, idx_t column_count, bool union_all,
26
+ unique_ptr<LogicalOperator> top, unique_ptr<LogicalOperator> bottom)
27
+ : LogicalOperator(LogicalOperatorType::LOGICAL_RECURSIVE_CTE), union_all(union_all), ctename(ctename),
28
+ table_index(table_index), column_count(column_count) {
29
29
  children.push_back(std::move(top));
30
30
  children.push_back(std::move(bottom));
31
31
  }
32
32
 
33
33
  bool union_all;
34
+ string ctename;
34
35
  idx_t table_index;
35
36
  idx_t column_count;
36
37
 
@@ -0,0 +1,44 @@
1
+ //===----------------------------------------------------------------------===//
2
+ // DuckDB
3
+ //
4
+ // duckdb/planner/query_node/bound_cte_node.hpp
5
+ //
6
+ //
7
+ //===----------------------------------------------------------------------===//
8
+
9
+ #pragma once
10
+
11
+ #include "duckdb/planner/binder.hpp"
12
+ #include "duckdb/planner/bound_query_node.hpp"
13
+
14
+ namespace duckdb {
15
+
16
+ class BoundCTENode : public BoundQueryNode {
17
+ public:
18
+ static constexpr const QueryNodeType TYPE = QueryNodeType::CTE_NODE;
19
+
20
+ public:
21
+ BoundCTENode() : BoundQueryNode(QueryNodeType::CTE_NODE) {
22
+ }
23
+
24
+ //! Keep track of the CTE name this node represents
25
+ string ctename;
26
+
27
+ //! The cte node
28
+ unique_ptr<BoundQueryNode> query;
29
+ //! The child node
30
+ unique_ptr<BoundQueryNode> child;
31
+ //! Index used by the set operation
32
+ idx_t setop_index;
33
+ //! The binder used by the query side of the CTE
34
+ shared_ptr<Binder> query_binder;
35
+ //! The binder used by the child side of the CTE
36
+ shared_ptr<Binder> child_binder;
37
+
38
+ public:
39
+ idx_t GetRootIndex() override {
40
+ return child->GetRootIndex();
41
+ }
42
+ };
43
+
44
+ } // namespace duckdb
@@ -1,3 +1,4 @@
1
1
  #include "duckdb/planner/query_node/bound_recursive_cte_node.hpp"
2
+ #include "duckdb/planner/query_node/bound_cte_node.hpp"
2
3
  #include "duckdb/planner/query_node/bound_select_node.hpp"
3
4
  #include "duckdb/planner/query_node/bound_set_operation_node.hpp"
@@ -23,7 +23,7 @@ struct FlattenDependentJoins {
23
23
 
24
24
  //! Detects which Logical Operators have correlated expressions that they are dependent upon, filling the
25
25
  //! has_correlated_expressions map.
26
- bool DetectCorrelatedExpressions(LogicalOperator *op, bool lateral = false);
26
+ bool DetectCorrelatedExpressions(LogicalOperator *op, bool lateral = false, idx_t lateral_depth = 0);
27
27
 
28
28
  //! Push the dependent join down a LogicalOperator
29
29
  unique_ptr<LogicalOperator> PushDownDependentJoin(unique_ptr<LogicalOperator> plan);
@@ -43,7 +43,7 @@ struct FlattenDependentJoins {
43
43
 
44
44
  private:
45
45
  unique_ptr<LogicalOperator> PushDownDependentJoinInternal(unique_ptr<LogicalOperator> plan,
46
- bool &parent_propagate_null_values);
46
+ bool &parent_propagate_null_values, idx_t lateral_depth);
47
47
  };
48
48
 
49
49
  } // namespace duckdb
@@ -16,7 +16,8 @@ namespace duckdb {
16
16
  //! Helper class to recursively detect correlated expressions inside a single LogicalOperator
17
17
  class HasCorrelatedExpressions : public LogicalOperatorVisitor {
18
18
  public:
19
- explicit HasCorrelatedExpressions(const vector<CorrelatedColumnInfo> &correlated, bool lateral = false);
19
+ explicit HasCorrelatedExpressions(const vector<CorrelatedColumnInfo> &correlated, bool lateral = false,
20
+ idx_t lateral_depth = 0);
20
21
 
21
22
  void VisitOperator(LogicalOperator &op) override;
22
23
 
@@ -28,6 +29,8 @@ protected:
28
29
  unique_ptr<Expression> VisitReplace(BoundSubqueryExpression &expr, unique_ptr<Expression> *expr_ptr) override;
29
30
 
30
31
  const vector<CorrelatedColumnInfo> &correlated_columns;
32
+ // Tracks number of nested laterals
33
+ idx_t lateral_depth;
31
34
  };
32
35
 
33
36
  } // namespace duckdb