duckdb 0.10.2-dev0.0 → 0.10.2-dev3.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 (699) hide show
  1. package/binding.gyp +22 -18
  2. package/binding.gyp.in +3 -0
  3. package/package.json +1 -1
  4. package/src/duckdb/extension/icu/icu-timezone.cpp +3 -1
  5. package/src/duckdb/extension/icu/icu_extension.cpp +6 -2
  6. package/src/duckdb/extension/json/buffered_json_reader.cpp +10 -3
  7. package/src/duckdb/extension/json/include/buffered_json_reader.hpp +2 -0
  8. package/src/duckdb/extension/json/include/json_scan.hpp +13 -7
  9. package/src/duckdb/extension/json/include/json_serializer.hpp +5 -4
  10. package/src/duckdb/extension/json/include/json_structure.hpp +3 -3
  11. package/src/duckdb/extension/json/json_functions/json_serialize_plan.cpp +15 -5
  12. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +15 -6
  13. package/src/duckdb/extension/json/json_functions/json_structure.cpp +21 -20
  14. package/src/duckdb/extension/json/json_functions/read_json.cpp +37 -3
  15. package/src/duckdb/extension/json/json_functions.cpp +7 -2
  16. package/src/duckdb/extension/json/json_scan.cpp +57 -33
  17. package/src/duckdb/extension/parquet/column_reader.cpp +12 -3
  18. package/src/duckdb/extension/parquet/column_writer.cpp +44 -7
  19. package/src/duckdb/extension/parquet/include/parquet_writer.hpp +5 -1
  20. package/src/duckdb/extension/parquet/parquet_extension.cpp +30 -3
  21. package/src/duckdb/extension/parquet/parquet_metadata.cpp +1 -1
  22. package/src/duckdb/extension/parquet/parquet_writer.cpp +4 -2
  23. package/src/duckdb/extension/parquet/zstd_file_system.cpp +1 -1
  24. package/src/duckdb/src/catalog/catalog.cpp +5 -1
  25. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +21 -5
  26. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +8 -9
  27. package/src/duckdb/src/catalog/catalog_entry/index_catalog_entry.cpp +3 -7
  28. package/src/duckdb/src/catalog/catalog_entry/sequence_catalog_entry.cpp +1 -1
  29. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +6 -7
  30. package/src/duckdb/src/catalog/catalog_entry.cpp +8 -0
  31. package/src/duckdb/src/catalog/catalog_search_path.cpp +5 -0
  32. package/src/duckdb/src/catalog/catalog_set.cpp +2 -2
  33. package/src/duckdb/src/catalog/default/default_functions.cpp +6 -6
  34. package/src/duckdb/src/catalog/default/default_schemas.cpp +1 -1
  35. package/src/duckdb/src/catalog/default/default_views.cpp +7 -7
  36. package/src/duckdb/src/catalog/dependency_catalog_set.cpp +2 -1
  37. package/src/duckdb/src/catalog/dependency_list.cpp +92 -8
  38. package/src/duckdb/src/catalog/dependency_manager.cpp +53 -68
  39. package/src/duckdb/src/catalog/duck_catalog.cpp +1 -1
  40. package/src/duckdb/src/common/adbc/adbc.cpp +287 -45
  41. package/src/duckdb/src/common/arrow/appender/union_data.cpp +2 -2
  42. package/src/duckdb/src/common/box_renderer.cpp +12 -12
  43. package/src/duckdb/src/common/crypto/md5.cpp +2 -1
  44. package/src/duckdb/src/common/enum_util.cpp +307 -1
  45. package/src/duckdb/src/common/enums/expression_type.cpp +4 -0
  46. package/src/duckdb/src/common/enums/optimizer_type.cpp +1 -1
  47. package/src/duckdb/src/common/file_system.cpp +60 -13
  48. package/src/duckdb/src/common/filename_pattern.cpp +13 -13
  49. package/src/duckdb/src/common/gzip_file_system.cpp +1 -1
  50. package/src/duckdb/src/common/http_state.cpp +1 -1
  51. package/src/duckdb/src/common/local_file_system.cpp +72 -71
  52. package/src/duckdb/src/common/multi_file_reader.cpp +48 -28
  53. package/src/duckdb/src/common/row_operations/row_matcher.cpp +2 -2
  54. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +13 -1
  55. package/src/duckdb/src/common/serializer/buffered_file_writer.cpp +32 -13
  56. package/src/duckdb/src/common/string_util.cpp +2 -3
  57. package/src/duckdb/src/common/tree_renderer.cpp +32 -67
  58. package/src/duckdb/src/common/types/bit.cpp +6 -6
  59. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  60. package/src/duckdb/src/common/types/hash.cpp +6 -6
  61. package/src/duckdb/src/common/types/hyperloglog.cpp +2 -0
  62. package/src/duckdb/src/common/types/row/tuple_data_allocator.cpp +13 -0
  63. package/src/duckdb/src/common/types/row/tuple_data_layout.cpp +5 -7
  64. package/src/duckdb/src/common/types/uuid.cpp +1 -1
  65. package/src/duckdb/src/common/types/vector.cpp +22 -14
  66. package/src/duckdb/src/common/types.cpp +8 -1
  67. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +20 -18
  68. package/src/duckdb/src/common/vector_operations/generators.cpp +1 -1
  69. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +267 -110
  70. package/src/duckdb/src/common/vector_operations/vector_hash.cpp +52 -23
  71. package/src/duckdb/src/common/virtual_file_system.cpp +33 -20
  72. package/src/duckdb/src/core_functions/aggregate/algebraic/avg.cpp +2 -2
  73. package/src/duckdb/src/core_functions/aggregate/distributive/minmax.cpp +3 -3
  74. package/src/duckdb/src/core_functions/aggregate/distributive/sum.cpp +31 -16
  75. package/src/duckdb/src/core_functions/aggregate/holistic/quantile.cpp +3 -0
  76. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -0
  77. package/src/duckdb/src/core_functions/core_functions.cpp +1 -1
  78. package/src/duckdb/src/core_functions/function_list.cpp +2 -2
  79. package/src/duckdb/src/core_functions/scalar/date/time_bucket.cpp +1 -1
  80. package/src/duckdb/src/core_functions/scalar/generic/system_functions.cpp +46 -17
  81. package/src/duckdb/src/core_functions/scalar/list/array_slice.cpp +1 -1
  82. package/src/duckdb/src/core_functions/scalar/list/flatten.cpp +82 -45
  83. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +2 -2
  84. package/src/duckdb/src/core_functions/scalar/list/list_sort.cpp +3 -0
  85. package/src/duckdb/src/core_functions/scalar/math/numeric.cpp +3 -2
  86. package/src/duckdb/src/core_functions/scalar/string/hex.cpp +2 -4
  87. package/src/duckdb/src/core_functions/scalar/string/repeat.cpp +12 -21
  88. package/src/duckdb/src/execution/column_binding_resolver.cpp +2 -10
  89. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +133 -66
  90. package/src/duckdb/src/execution/expression_executor/execute_function.cpp +0 -2
  91. package/src/duckdb/src/execution/expression_executor.cpp +0 -4
  92. package/src/duckdb/src/execution/expression_executor_state.cpp +1 -1
  93. package/src/duckdb/src/execution/index/art/art.cpp +2 -2
  94. package/src/duckdb/src/execution/index/unknown_index.cpp +13 -13
  95. package/src/duckdb/src/execution/join_hashtable.cpp +1 -1
  96. package/src/duckdb/src/execution/nested_loop_join/nested_loop_join_mark.cpp +0 -1
  97. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer.cpp +10 -7
  98. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_buffer_manager.cpp +32 -1
  99. package/src/duckdb/src/execution/operator/csv_scanner/buffer_manager/csv_file_handle.cpp +16 -2
  100. package/src/duckdb/src/execution/operator/csv_scanner/scanner/scanner_boundary.cpp +7 -7
  101. package/src/duckdb/src/execution/operator/csv_scanner/scanner/string_value_scanner.cpp +354 -159
  102. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/csv_sniffer.cpp +11 -2
  103. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/dialect_detection.cpp +22 -7
  104. package/src/duckdb/src/execution/operator/csv_scanner/sniffer/type_detection.cpp +1 -1
  105. package/src/duckdb/src/execution/operator/csv_scanner/state_machine/csv_state_machine_cache.cpp +10 -10
  106. package/src/duckdb/src/execution/operator/csv_scanner/table_function/csv_file_scanner.cpp +9 -18
  107. package/src/duckdb/src/execution/operator/csv_scanner/table_function/global_csv_state.cpp +180 -47
  108. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_error.cpp +100 -58
  109. package/src/duckdb/src/execution/operator/csv_scanner/util/csv_reader_options.cpp +88 -21
  110. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +12 -13
  111. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -0
  112. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +118 -23
  113. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +2 -2
  114. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +14 -5
  115. package/src/duckdb/src/execution/operator/persistent/physical_copy_database.cpp +1 -1
  116. package/src/duckdb/src/execution/operator/persistent/physical_export.cpp +5 -5
  117. package/src/duckdb/src/execution/operator/schema/physical_attach.cpp +1 -1
  118. package/src/duckdb/src/execution/physical_plan/plan_simple.cpp +0 -9
  119. package/src/duckdb/src/execution/physical_plan/plan_vacuum.cpp +18 -0
  120. package/src/duckdb/src/execution/physical_plan_generator.cpp +5 -3
  121. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +81 -106
  122. package/src/duckdb/src/execution/reservoir_sample.cpp +1 -1
  123. package/src/duckdb/src/execution/window_executor.cpp +48 -28
  124. package/src/duckdb/src/execution/window_segment_tree.cpp +20 -23
  125. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +1 -1
  126. package/src/duckdb/src/function/cast/enum_casts.cpp +20 -55
  127. package/src/duckdb/src/function/cast/vector_cast_helpers.cpp +10 -9
  128. package/src/duckdb/src/function/cast_rules.cpp +9 -1
  129. package/src/duckdb/src/function/compression_config.cpp +1 -1
  130. package/src/duckdb/src/function/function_binder.cpp +45 -44
  131. package/src/duckdb/src/function/function_set.cpp +9 -9
  132. package/src/duckdb/src/function/pragma/pragma_queries.cpp +1 -2
  133. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +21 -5
  134. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +2 -2
  135. package/src/duckdb/src/function/scalar/list/list_select.cpp +5 -2
  136. package/src/duckdb/src/function/scalar/list/list_zip.cpp +5 -4
  137. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +60 -32
  138. package/src/duckdb/src/function/scalar/sequence/nextval.cpp +1 -1
  139. package/src/duckdb/src/function/scalar/strftime_format.cpp +31 -25
  140. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +6 -6
  141. package/src/duckdb/src/function/scalar/string/length.cpp +23 -2
  142. package/src/duckdb/src/function/scalar/string/like.cpp +1 -1
  143. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +1 -1
  144. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +3 -3
  145. package/src/duckdb/src/function/table/arrow/arrow_array_scan_state.cpp +1 -1
  146. package/src/duckdb/src/function/table/arrow.cpp +7 -1
  147. package/src/duckdb/src/function/table/copy_csv.cpp +17 -13
  148. package/src/duckdb/src/function/table/read_csv.cpp +52 -39
  149. package/src/duckdb/src/function/table/sniff_csv.cpp +7 -13
  150. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +1 -1
  151. package/src/duckdb/src/function/table/system/duckdb_databases.cpp +7 -1
  152. package/src/duckdb/src/function/table/system/duckdb_extensions.cpp +12 -2
  153. package/src/duckdb/src/function/table/system/duckdb_sequences.cpp +1 -2
  154. package/src/duckdb/src/function/table/system/duckdb_tables.cpp +2 -2
  155. package/src/duckdb/src/function/table/system/pragma_metadata_info.cpp +9 -2
  156. package/src/duckdb/src/function/table/system/pragma_table_info.cpp +10 -6
  157. package/src/duckdb/src/function/table/table_scan.cpp +1 -4
  158. package/src/duckdb/src/function/table/version/pragma_version.cpp +3 -3
  159. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -2
  160. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_index_entry.hpp +1 -1
  161. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_schema_entry.hpp +1 -1
  162. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/sequence_catalog_entry.hpp +1 -1
  163. package/src/duckdb/src/include/duckdb/catalog/catalog_entry.hpp +6 -1
  164. package/src/duckdb/src/include/duckdb/catalog/catalog_set.hpp +3 -3
  165. package/src/duckdb/src/include/duckdb/catalog/default/default_functions.hpp +3 -3
  166. package/src/duckdb/src/include/duckdb/catalog/dependency.hpp +26 -4
  167. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +39 -6
  168. package/src/duckdb/src/include/duckdb/catalog/dependency_manager.hpp +19 -14
  169. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +1 -1
  170. package/src/duckdb/src/include/duckdb/catalog/standard_entry.hpp +4 -0
  171. package/src/duckdb/src/include/duckdb/common/allocator.hpp +3 -3
  172. package/src/duckdb/src/include/duckdb/common/arrow/arrow_wrapper.hpp +1 -1
  173. package/src/duckdb/src/include/duckdb/common/bit_utils.hpp +1 -1
  174. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +16 -16
  175. package/src/duckdb/src/include/duckdb/common/crypto/md5.hpp +0 -1
  176. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +32 -0
  177. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +4 -2
  178. package/src/duckdb/src/include/duckdb/common/exception/binder_exception.hpp +14 -10
  179. package/src/duckdb/src/include/duckdb/common/exception/catalog_exception.hpp +4 -4
  180. package/src/duckdb/src/include/duckdb/common/exception/conversion_exception.hpp +6 -6
  181. package/src/duckdb/src/include/duckdb/common/exception/http_exception.hpp +3 -3
  182. package/src/duckdb/src/include/duckdb/common/exception/parser_exception.hpp +4 -4
  183. package/src/duckdb/src/include/duckdb/common/exception/transaction_exception.hpp +2 -2
  184. package/src/duckdb/src/include/duckdb/common/exception.hpp +57 -58
  185. package/src/duckdb/src/include/duckdb/common/exception_format_value.hpp +2 -2
  186. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +2 -2
  187. package/src/duckdb/src/include/duckdb/common/file_open_flags.hpp +134 -0
  188. package/src/duckdb/src/include/duckdb/common/file_opener.hpp +9 -6
  189. package/src/duckdb/src/include/duckdb/common/file_system.hpp +35 -36
  190. package/src/duckdb/src/include/duckdb/common/filename_pattern.hpp +4 -6
  191. package/src/duckdb/src/include/duckdb/common/fixed_size_map.hpp +13 -13
  192. package/src/duckdb/src/include/duckdb/common/helper.hpp +42 -47
  193. package/src/duckdb/src/include/duckdb/common/http_state.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/common/hugeint.hpp +2 -2
  195. package/src/duckdb/src/include/duckdb/common/index_vector.hpp +10 -10
  196. package/src/duckdb/src/include/duckdb/common/local_file_system.hpp +13 -10
  197. package/src/duckdb/src/include/duckdb/common/memory_safety.hpp +3 -3
  198. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/common/opener_file_system.hpp +50 -24
  200. package/src/duckdb/src/include/duckdb/common/operator/abs.hpp +12 -4
  201. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +5 -5
  202. package/src/duckdb/src/include/duckdb/common/pipe_file_system.hpp +1 -1
  203. package/src/duckdb/src/include/duckdb/common/platform.h +1 -1
  204. package/src/duckdb/src/include/duckdb/common/printer.hpp +5 -5
  205. package/src/duckdb/src/include/duckdb/common/profiler.hpp +2 -2
  206. package/src/duckdb/src/include/duckdb/common/progress_bar/display/terminal_progress_bar_display.hpp +5 -5
  207. package/src/duckdb/src/include/duckdb/common/random_engine.hpp +1 -1
  208. package/src/duckdb/src/include/duckdb/common/re2_regex.hpp +7 -7
  209. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +3 -0
  210. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_writer.hpp +2 -2
  211. package/src/duckdb/src/include/duckdb/common/serializer/deserialization_data.hpp +17 -6
  212. package/src/duckdb/src/include/duckdb/common/serializer/deserializer.hpp +12 -0
  213. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +14 -0
  214. package/src/duckdb/src/include/duckdb/common/serializer/serializer.hpp +16 -0
  215. package/src/duckdb/src/include/duckdb/common/sort/duckdb_pdqsort.hpp +3 -0
  216. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +2 -0
  217. package/src/duckdb/src/include/duckdb/common/string_util.hpp +4 -4
  218. package/src/duckdb/src/include/duckdb/common/tree_renderer.hpp +24 -25
  219. package/src/duckdb/src/include/duckdb/common/typedefs.hpp +5 -5
  220. package/src/duckdb/src/include/duckdb/common/types/cast_helpers.hpp +1 -2
  221. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +10 -10
  222. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_iterators.hpp +5 -5
  223. package/src/duckdb/src/include/duckdb/common/types/column/partitioned_column_data.hpp +1 -1
  224. package/src/duckdb/src/include/duckdb/common/types/constraint_conflict_info.hpp +1 -2
  225. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +2 -2
  226. package/src/duckdb/src/include/duckdb/common/types/date.hpp +1 -1
  227. package/src/duckdb/src/include/duckdb/common/types/hash.hpp +5 -5
  228. package/src/duckdb/src/include/duckdb/common/types/hyperloglog.hpp +1 -1
  229. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +4 -4
  230. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +1 -1
  231. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_layout.hpp +10 -3
  232. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_segment.hpp +1 -1
  233. package/src/duckdb/src/include/duckdb/common/types/selection_vector.hpp +12 -12
  234. package/src/duckdb/src/include/duckdb/common/types/string_heap.hpp +1 -1
  235. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +21 -20
  236. package/src/duckdb/src/include/duckdb/common/types/time.hpp +2 -2
  237. package/src/duckdb/src/include/duckdb/common/types/timestamp.hpp +3 -3
  238. package/src/duckdb/src/include/duckdb/common/types/uuid.hpp +2 -2
  239. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -2
  240. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +15 -7
  241. package/src/duckdb/src/include/duckdb/common/types/vector_buffer.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/common/types.hpp +14 -10
  243. package/src/duckdb/src/include/duckdb/common/uhugeint.hpp +2 -2
  244. package/src/duckdb/src/include/duckdb/common/union_by_name.hpp +1 -1
  245. package/src/duckdb/src/include/duckdb/common/unique_ptr.hpp +15 -14
  246. package/src/duckdb/src/include/duckdb/common/vector.hpp +21 -21
  247. package/src/duckdb/src/include/duckdb/common/vector_operations/aggregate_executor.hpp +2 -0
  248. package/src/duckdb/src/include/duckdb/common/vector_operations/general_cast.hpp +2 -1
  249. package/src/duckdb/src/include/duckdb/common/vector_operations/generic_executor.hpp +2 -3
  250. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +3 -2
  251. package/src/duckdb/src/include/duckdb/common/vector_operations/vector_operations.hpp +50 -32
  252. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +10 -11
  253. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +1 -1
  254. package/src/duckdb/src/include/duckdb/core_functions/aggregate/sum_helpers.hpp +13 -1
  255. package/src/duckdb/src/include/duckdb/core_functions/function_list.hpp +1 -1
  256. package/src/duckdb/src/include/duckdb/core_functions/lambda_functions.hpp +2 -1
  257. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -1
  258. package/src/duckdb/src/include/duckdb/execution/column_binding_resolver.hpp +1 -1
  259. package/src/duckdb/src/include/duckdb/execution/expression_executor.hpp +1 -1
  260. package/src/duckdb/src/include/duckdb/execution/expression_executor_state.hpp +2 -5
  261. package/src/duckdb/src/include/duckdb/execution/merge_sort_tree.hpp +3 -3
  262. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/aggregate_object.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/distinct_aggregate_data.hpp +1 -1
  264. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/base_scanner.hpp +1 -1
  265. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/column_count_scanner.hpp +0 -3
  266. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer.hpp +9 -6
  267. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_buffer_manager.hpp +3 -0
  268. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_error.hpp +40 -22
  269. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_handle.hpp +5 -0
  270. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_file_scanner.hpp +1 -0
  271. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_option.hpp +6 -4
  272. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_reader_options.hpp +24 -10
  273. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/csv_state_machine.hpp +4 -0
  274. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/global_csv_state.hpp +3 -1
  275. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/skip_scanner.hpp +0 -3
  276. package/src/duckdb/src/include/duckdb/execution/operator/csv_scanner/string_value_scanner.hpp +58 -17
  277. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_batch_collector.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_explain_analyze.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_prepare.hpp +3 -3
  280. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_set.hpp +1 -1
  281. package/src/duckdb/src/include/duckdb/execution/operator/helper/physical_vacuum.hpp +4 -1
  282. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +16 -5
  283. package/src/duckdb/src/include/duckdb/execution/physical_operator_states.hpp +6 -6
  284. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +2 -1
  285. package/src/duckdb/src/include/duckdb/execution/window_executor.hpp +1 -1
  286. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +1 -1
  287. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  288. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +5 -5
  289. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +4 -4
  290. package/src/duckdb/src/include/duckdb/function/cast/vector_cast_helpers.hpp +6 -6
  291. package/src/duckdb/src/include/duckdb/function/compression_function.hpp +4 -4
  292. package/src/duckdb/src/include/duckdb/function/copy_function.hpp +10 -13
  293. package/src/duckdb/src/include/duckdb/function/function.hpp +3 -3
  294. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +24 -23
  295. package/src/duckdb/src/include/duckdb/function/function_serialization.hpp +1 -1
  296. package/src/duckdb/src/include/duckdb/function/function_set.hpp +1 -1
  297. package/src/duckdb/src/include/duckdb/function/pragma_function.hpp +1 -1
  298. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +3 -3
  299. package/src/duckdb/src/include/duckdb/function/scalar/strftime_format.hpp +7 -7
  300. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +3 -3
  301. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +6 -6
  302. package/src/duckdb/src/include/duckdb/function/table/arrow/arrow_duck_schema.hpp +4 -4
  303. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +2 -2
  304. package/src/duckdb/src/include/duckdb/function/table/read_csv.hpp +1 -3
  305. package/src/duckdb/src/include/duckdb/function/table/table_scan.hpp +1 -1
  306. package/src/duckdb/src/include/duckdb/function/table_function.hpp +12 -11
  307. package/src/duckdb/src/include/duckdb/function/udf_function.hpp +66 -60
  308. package/src/duckdb/src/include/duckdb/main/appender.hpp +6 -6
  309. package/src/duckdb/src/include/duckdb/main/attached_database.hpp +3 -1
  310. package/src/duckdb/src/include/duckdb/main/buffered_data/buffered_data.hpp +2 -2
  311. package/src/duckdb/src/include/duckdb/main/buffered_data/simple_buffered_data.hpp +1 -1
  312. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -2
  313. package/src/duckdb/src/include/duckdb/main/chunk_scan_state/query_result.hpp +2 -2
  314. package/src/duckdb/src/include/duckdb/main/client_context.hpp +1 -1
  315. package/src/duckdb/src/include/duckdb/main/client_context_file_opener.hpp +3 -2
  316. package/src/duckdb/src/include/duckdb/main/client_data.hpp +1 -0
  317. package/src/duckdb/src/include/duckdb/main/client_properties.hpp +2 -1
  318. package/src/duckdb/src/include/duckdb/main/config.hpp +14 -5
  319. package/src/duckdb/src/include/duckdb/main/connection.hpp +27 -26
  320. package/src/duckdb/src/include/duckdb/main/database.hpp +19 -3
  321. package/src/duckdb/src/include/duckdb/main/database_file_opener.hpp +58 -0
  322. package/src/duckdb/src/include/duckdb/main/database_path_and_type.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/main/error_manager.hpp +6 -6
  324. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +8 -0
  325. package/src/duckdb/src/include/duckdb/main/extension_helper.hpp +1 -0
  326. package/src/duckdb/src/include/duckdb/main/external_dependencies.hpp +2 -1
  327. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +8 -8
  328. package/src/duckdb/src/include/duckdb/main/query_profiler.hpp +2 -59
  329. package/src/duckdb/src/include/duckdb/main/query_result.hpp +3 -3
  330. package/src/duckdb/src/include/duckdb/main/relation/query_relation.hpp +1 -1
  331. package/src/duckdb/src/include/duckdb/main/relation.hpp +1 -1
  332. package/src/duckdb/src/include/duckdb/main/secret/secret.hpp +11 -7
  333. package/src/duckdb/src/include/duckdb/main/secret/secret_manager.hpp +2 -2
  334. package/src/duckdb/src/include/duckdb/main/secret/secret_storage.hpp +4 -4
  335. package/src/duckdb/src/include/duckdb/main/settings.hpp +78 -70
  336. package/src/duckdb/src/include/duckdb/optimizer/column_lifetime_analyzer.hpp +45 -0
  337. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +11 -13
  338. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  339. package/src/duckdb/src/include/duckdb/optimizer/join_order/cost_model.hpp +1 -1
  340. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_node.hpp +1 -1
  341. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +1 -1
  342. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph_manager.hpp +1 -1
  343. package/src/duckdb/src/include/duckdb/optimizer/join_order/relation_manager.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/optimizer/matcher/expression_matcher.hpp +7 -7
  345. package/src/duckdb/src/include/duckdb/optimizer/matcher/function_matcher.hpp +7 -7
  346. package/src/duckdb/src/include/duckdb/optimizer/matcher/type_matcher.hpp +1 -1
  347. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  348. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +32 -30
  349. package/src/duckdb/src/include/duckdb/optimizer/unnest_rewriter.hpp +1 -1
  350. package/src/duckdb/src/include/duckdb/parallel/event.hpp +1 -1
  351. package/src/duckdb/src/include/duckdb/parallel/executor_task.hpp +1 -1
  352. package/src/duckdb/src/include/duckdb/parallel/interrupt.hpp +2 -2
  353. package/src/duckdb/src/include/duckdb/parallel/pipeline_event.hpp +1 -1
  354. package/src/duckdb/src/include/duckdb/parser/column_list.hpp +4 -4
  355. package/src/duckdb/src/include/duckdb/parser/constraints/unique_constraint.hpp +49 -8
  356. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +1 -1
  357. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +1 -1
  358. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +1 -1
  359. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_scalar_function_info.hpp +1 -1
  360. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +1 -1
  361. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +1 -1
  362. package/src/duckdb/src/include/duckdb/parser/parsed_data/copy_database_info.hpp +40 -0
  363. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_function_info.hpp +2 -1
  364. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_index_info.hpp +1 -0
  365. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_info.hpp +2 -1
  366. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_macro_info.hpp +1 -1
  367. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_pragma_function_info.hpp +1 -1
  368. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_secret_info.hpp +2 -2
  369. package/src/duckdb/src/include/duckdb/parser/parsed_data/extra_drop_info.hpp +3 -3
  370. package/src/duckdb/src/include/duckdb/parser/parsed_data/parse_info.hpp +3 -2
  371. package/src/duckdb/src/include/duckdb/parser/parsed_data/vacuum_info.hpp +2 -5
  372. package/src/duckdb/src/include/duckdb/parser/parser.hpp +1 -1
  373. package/src/duckdb/src/include/duckdb/parser/parser_extension.hpp +3 -3
  374. package/src/duckdb/src/include/duckdb/parser/query_error_context.hpp +1 -1
  375. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +3 -5
  376. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -2
  377. package/src/duckdb/src/include/duckdb/planner/binder.hpp +16 -9
  378. package/src/duckdb/src/include/duckdb/planner/expression/bound_case_expression.hpp +1 -1
  379. package/src/duckdb/src/include/duckdb/planner/expression/bound_cast_expression.hpp +1 -1
  380. package/src/duckdb/src/include/duckdb/planner/expression/bound_default_expression.hpp +1 -1
  381. package/src/duckdb/src/include/duckdb/planner/expression/bound_expanded_expression.hpp +34 -0
  382. package/src/duckdb/src/include/duckdb/planner/expression/bound_subquery_expression.hpp +1 -1
  383. package/src/duckdb/src/include/duckdb/planner/expression.hpp +1 -1
  384. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +5 -8
  385. package/src/duckdb/src/include/duckdb/planner/expression_binder/column_alias_binder.hpp +3 -4
  386. package/src/duckdb/src/include/duckdb/planner/expression_binder/group_binder.hpp +3 -2
  387. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +3 -5
  388. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +6 -14
  389. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +3 -6
  390. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_bind_state.hpp +52 -0
  391. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +4 -10
  392. package/src/duckdb/src/include/duckdb/planner/expression_binder/table_function_binder.hpp +5 -2
  393. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -0
  394. package/src/duckdb/src/include/duckdb/planner/expression_iterator.hpp +2 -0
  395. package/src/duckdb/src/include/duckdb/planner/filter/conjunction_filter.hpp +3 -6
  396. package/src/duckdb/src/include/duckdb/planner/logical_operator.hpp +2 -0
  397. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  398. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  399. package/src/duckdb/src/include/duckdb/planner/operator/logical_copy_database.hpp +4 -12
  400. package/src/duckdb/src/include/duckdb/planner/operator/logical_create_secret.hpp +1 -1
  401. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +2 -2
  402. package/src/duckdb/src/include/duckdb/planner/operator/logical_delim_get.hpp +1 -1
  403. package/src/duckdb/src/include/duckdb/planner/operator/logical_dummy_scan.hpp +1 -1
  404. package/src/duckdb/src/include/duckdb/planner/operator/logical_explain.hpp +1 -1
  405. package/src/duckdb/src/include/duckdb/planner/operator/logical_export.hpp +2 -2
  406. package/src/duckdb/src/include/duckdb/planner/operator/logical_expression_get.hpp +2 -2
  407. package/src/duckdb/src/include/duckdb/planner/operator/logical_extension_operator.hpp +2 -2
  408. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +2 -2
  409. package/src/duckdb/src/include/duckdb/planner/operator/logical_pragma.hpp +1 -1
  410. package/src/duckdb/src/include/duckdb/planner/operator/logical_prepare.hpp +3 -2
  411. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +3 -3
  412. package/src/duckdb/src/include/duckdb/planner/operator/logical_reset.hpp +1 -1
  413. package/src/duckdb/src/include/duckdb/planner/operator/logical_set.hpp +2 -1
  414. package/src/duckdb/src/include/duckdb/planner/operator/logical_vacuum.hpp +52 -0
  415. package/src/duckdb/src/include/duckdb/planner/operator_extension.hpp +1 -1
  416. package/src/duckdb/src/include/duckdb/planner/parsed_data/bound_create_table_info.hpp +2 -2
  417. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +5 -4
  418. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  419. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +4 -1
  420. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +1 -1
  421. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +3 -3
  422. package/src/duckdb/src/include/duckdb/storage/checkpoint/row_group_writer.hpp +2 -3
  423. package/src/duckdb/src/include/duckdb/storage/checkpoint/string_checkpoint_state.hpp +1 -1
  424. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -3
  425. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +5 -5
  426. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_analyze.hpp +1 -1
  427. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_compress.hpp +1 -1
  428. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_fetch.hpp +1 -1
  429. package/src/duckdb/src/include/duckdb/storage/compression/alp/alp_scan.hpp +1 -1
  430. package/src/duckdb/src/include/duckdb/storage/compression/alprd/algorithm/alprd.hpp +3 -3
  431. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_analyze.hpp +2 -2
  432. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_compress.hpp +1 -1
  433. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_fetch.hpp +1 -1
  434. package/src/duckdb/src/include/duckdb/storage/compression/alprd/alprd_scan.hpp +3 -3
  435. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/flag_buffer.hpp +1 -1
  436. package/src/duckdb/src/include/duckdb/storage/compression/chimp/algorithm/leading_zero_buffer.hpp +3 -3
  437. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp.hpp +3 -3
  438. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_analyze.hpp +0 -1
  439. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  440. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +4 -4
  441. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas.hpp +4 -4
  442. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_analyze.hpp +0 -1
  443. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  444. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +3 -3
  445. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +1 -1
  446. package/src/duckdb/src/include/duckdb/storage/index.hpp +1 -1
  447. package/src/duckdb/src/include/duckdb/storage/magic_bytes.hpp +1 -1
  448. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +3 -3
  449. package/src/duckdb/src/include/duckdb/storage/optimistic_data_writer.hpp +1 -1
  450. package/src/duckdb/src/include/duckdb/storage/partial_block_manager.hpp +1 -1
  451. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +4 -1
  452. package/src/duckdb/src/include/duckdb/storage/standard_buffer_manager.hpp +24 -24
  453. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +3 -3
  454. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -2
  455. package/src/duckdb/src/include/duckdb/storage/storage_info.hpp +2 -2
  456. package/src/duckdb/src/include/duckdb/storage/storage_manager.hpp +4 -4
  457. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +9 -6
  458. package/src/duckdb/src/include/duckdb/storage/table/append_state.hpp +1 -1
  459. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +2 -2
  460. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +1 -1
  461. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +10 -1
  462. package/src/duckdb/src/include/duckdb/storage/table/data_table_info.hpp +3 -2
  463. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +1 -1
  464. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +1 -1
  465. package/src/duckdb/src/include/duckdb/storage/table/row_version_manager.hpp +2 -1
  466. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +3 -3
  467. package/src/duckdb/src/include/duckdb/storage/table/segment_lock.hpp +1 -1
  468. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +4 -4
  469. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +2 -0
  470. package/src/duckdb/src/include/duckdb/storage/table/table_index_list.hpp +3 -2
  471. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +1 -1
  472. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +1 -1
  473. package/src/duckdb/src/include/duckdb/storage/table_storage_info.hpp +2 -1
  474. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  475. package/src/duckdb/src/include/duckdb/transaction/delete_info.hpp +20 -1
  476. package/src/duckdb/src/include/duckdb/transaction/transaction.hpp +1 -1
  477. package/src/duckdb/src/include/duckdb/transaction/transaction_data.hpp +1 -1
  478. package/src/duckdb/src/include/duckdb/transaction/undo_buffer.hpp +1 -1
  479. package/src/duckdb/src/include/duckdb/transaction/update_info.hpp +1 -1
  480. package/src/duckdb/src/main/appender.cpp +1 -1
  481. package/src/duckdb/src/main/attached_database.cpp +11 -3
  482. package/src/duckdb/src/main/capi/arrow-c.cpp +6 -2
  483. package/src/duckdb/src/main/capi/cast/utils-c.cpp +1 -1
  484. package/src/duckdb/src/main/capi/duckdb-c.cpp +1 -1
  485. package/src/duckdb/src/main/capi/pending-c.cpp +1 -1
  486. package/src/duckdb/src/main/capi/prepared-c.cpp +2 -2
  487. package/src/duckdb/src/main/capi/result-c.cpp +4 -4
  488. package/src/duckdb/src/main/client_context.cpp +4 -12
  489. package/src/duckdb/src/main/client_context_file_opener.cpp +15 -3
  490. package/src/duckdb/src/main/client_data.cpp +5 -0
  491. package/src/duckdb/src/main/config.cpp +82 -82
  492. package/src/duckdb/src/main/database.cpp +31 -7
  493. package/src/duckdb/src/main/database_manager.cpp +3 -2
  494. package/src/duckdb/src/main/database_path_and_type.cpp +4 -4
  495. package/src/duckdb/src/main/error_manager.cpp +1 -1
  496. package/src/duckdb/src/main/extension/extension_alias.cpp +9 -9
  497. package/src/duckdb/src/main/extension/extension_helper.cpp +10 -5
  498. package/src/duckdb/src/main/extension/extension_install.cpp +1 -1
  499. package/src/duckdb/src/main/extension/extension_load.cpp +111 -37
  500. package/src/duckdb/src/main/query_profiler.cpp +1 -118
  501. package/src/duckdb/src/main/secret/secret_manager.cpp +1 -2
  502. package/src/duckdb/src/main/secret/secret_storage.cpp +1 -1
  503. package/src/duckdb/src/main/settings/settings.cpp +81 -65
  504. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +8 -1
  505. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +3 -0
  506. package/src/duckdb/src/optimizer/compressed_materialization.cpp +26 -28
  507. package/src/duckdb/src/optimizer/cse_optimizer.cpp +5 -5
  508. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +10 -6
  509. package/src/duckdb/src/optimizer/optimizer.cpp +14 -17
  510. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +16 -5
  511. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +7 -4
  512. package/src/duckdb/src/optimizer/pushdown/pushdown_set_operation.cpp +2 -2
  513. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +3 -3
  514. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +2 -2
  515. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +1 -1
  516. package/src/duckdb/src/optimizer/statistics/expression/propagate_between.cpp +8 -8
  517. package/src/duckdb/src/optimizer/statistics/expression/propagate_case.cpp +1 -1
  518. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +1 -1
  519. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  520. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +7 -7
  521. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +6 -6
  522. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +1 -1
  523. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +2 -2
  524. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -10
  525. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +1 -1
  526. package/src/duckdb/src/optimizer/statistics/operator/propagate_cross_product.cpp +1 -1
  527. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +14 -7
  528. package/src/duckdb/src/optimizer/statistics/operator/propagate_get.cpp +2 -2
  529. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +9 -9
  530. package/src/duckdb/src/optimizer/statistics/operator/propagate_limit.cpp +1 -1
  531. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  532. package/src/duckdb/src/optimizer/statistics/operator/propagate_projection.cpp +2 -2
  533. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +1 -1
  534. package/src/duckdb/src/optimizer/statistics/operator/propagate_window.cpp +1 -1
  535. package/src/duckdb/src/optimizer/statistics_propagator.cpp +39 -18
  536. package/src/duckdb/src/parallel/pipeline_finish_event.cpp +1 -1
  537. package/src/duckdb/src/parallel/task_scheduler.cpp +8 -1
  538. package/src/duckdb/src/parser/constraints/unique_constraint.cpp +4 -2
  539. package/src/duckdb/src/parser/parsed_data/create_index_info.cpp +64 -0
  540. package/src/duckdb/src/parser/parsed_data/vacuum_info.cpp +1 -0
  541. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +13 -5
  542. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +24 -0
  543. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +1 -8
  544. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +2 -1
  545. package/src/duckdb/src/parser/transform/statement/transform_create_index.cpp +3 -0
  546. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +2 -6
  547. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +2 -6
  548. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +2 -6
  549. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +1 -1
  550. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +5 -2
  551. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -8
  552. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +1 -6
  553. package/src/duckdb/src/parser/transform/statement/transform_use.cpp +3 -2
  554. package/src/duckdb/src/parser/transformer.cpp +14 -2
  555. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +40 -17
  556. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +8 -3
  557. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +32 -30
  558. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +28 -17
  559. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +146 -101
  560. package/src/duckdb/src/planner/binder/query_node/bind_setop_node.cpp +28 -26
  561. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +29 -0
  562. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +10 -10
  563. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +3 -2
  564. package/src/duckdb/src/planner/binder/statement/bind_copy_database.cpp +23 -28
  565. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +11 -12
  566. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +9 -11
  567. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +10 -13
  568. package/src/duckdb/src/planner/binder/statement/bind_pragma.cpp +3 -3
  569. package/src/duckdb/src/planner/binder/statement/bind_set.cpp +3 -0
  570. package/src/duckdb/src/planner/binder/statement/bind_vacuum.cpp +66 -65
  571. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +54 -46
  572. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +3 -0
  573. package/src/duckdb/src/planner/binder/tableref/bind_subqueryref.cpp +1 -1
  574. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +5 -5
  575. package/src/duckdb/src/planner/binder.cpp +78 -6
  576. package/src/duckdb/src/planner/expression/bound_cast_expression.cpp +11 -3
  577. package/src/duckdb/src/planner/expression/bound_expanded_expression.cpp +22 -0
  578. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +11 -58
  579. package/src/duckdb/src/planner/expression_binder/column_alias_binder.cpp +5 -8
  580. package/src/duckdb/src/planner/expression_binder/group_binder.cpp +5 -4
  581. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +5 -19
  582. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +8 -8
  583. package/src/duckdb/src/planner/expression_binder/order_binder.cpp +42 -26
  584. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -22
  585. package/src/duckdb/src/planner/expression_binder/select_bind_state.cpp +52 -0
  586. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +43 -5
  587. package/src/duckdb/src/planner/expression_binder/table_function_binder.cpp +19 -7
  588. package/src/duckdb/src/planner/logical_operator.cpp +20 -3
  589. package/src/duckdb/src/planner/operator/logical_copy_database.cpp +4 -14
  590. package/src/duckdb/src/planner/operator/logical_delete.cpp +1 -1
  591. package/src/duckdb/src/planner/operator/logical_get.cpp +1 -1
  592. package/src/duckdb/src/planner/operator/logical_insert.cpp +1 -1
  593. package/src/duckdb/src/planner/operator/logical_update.cpp +1 -1
  594. package/src/duckdb/src/planner/operator/logical_vacuum.cpp +65 -0
  595. package/src/duckdb/src/planner/planner.cpp +4 -4
  596. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +26 -27
  597. package/src/duckdb/src/storage/arena_allocator.cpp +9 -0
  598. package/src/duckdb/src/storage/buffer/buffer_pool_reservation.cpp +1 -1
  599. package/src/duckdb/src/storage/buffer_manager.cpp +2 -10
  600. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +2 -3
  601. package/src/duckdb/src/storage/checkpoint_manager.cpp +15 -8
  602. package/src/duckdb/src/storage/compression/bitpacking.cpp +6 -1
  603. package/src/duckdb/src/storage/compression/string_uncompressed.cpp +1 -1
  604. package/src/duckdb/src/storage/data_pointer.cpp +1 -1
  605. package/src/duckdb/src/storage/data_table.cpp +18 -7
  606. package/src/duckdb/src/storage/local_storage.cpp +8 -5
  607. package/src/duckdb/src/storage/magic_bytes.cpp +6 -5
  608. package/src/duckdb/src/storage/partial_block_manager.cpp +1 -1
  609. package/src/duckdb/src/storage/serialization/serialize_logical_operator.cpp +20 -9
  610. package/src/duckdb/src/storage/serialization/serialize_nodes.cpp +12 -10
  611. package/src/duckdb/src/storage/serialization/serialize_parse_info.cpp +23 -0
  612. package/src/duckdb/src/storage/single_file_block_manager.cpp +46 -19
  613. package/src/duckdb/src/storage/standard_buffer_manager.cpp +21 -5
  614. package/src/duckdb/src/storage/statistics/array_stats.cpp +1 -1
  615. package/src/duckdb/src/storage/statistics/base_statistics.cpp +2 -3
  616. package/src/duckdb/src/storage/statistics/list_stats.cpp +1 -1
  617. package/src/duckdb/src/storage/statistics/struct_stats.cpp +1 -1
  618. package/src/duckdb/src/storage/storage_info.cpp +19 -19
  619. package/src/duckdb/src/storage/storage_manager.cpp +18 -13
  620. package/src/duckdb/src/storage/table/chunk_info.cpp +11 -3
  621. package/src/duckdb/src/storage/table/column_data.cpp +88 -66
  622. package/src/duckdb/src/storage/table/row_group.cpp +7 -7
  623. package/src/duckdb/src/storage/table/row_version_manager.cpp +2 -2
  624. package/src/duckdb/src/storage/table/standard_column_data.cpp +4 -0
  625. package/src/duckdb/src/storage/table/update_segment.cpp +3 -1
  626. package/src/duckdb/src/storage/table_index_list.cpp +6 -1
  627. package/src/duckdb/src/storage/temporary_file_manager.cpp +1 -1
  628. package/src/duckdb/src/storage/wal_replay.cpp +8 -7
  629. package/src/duckdb/src/storage/write_ahead_log.cpp +3 -4
  630. package/src/duckdb/src/transaction/cleanup_state.cpp +10 -3
  631. package/src/duckdb/src/transaction/commit_state.cpp +11 -4
  632. package/src/duckdb/src/transaction/duck_transaction.cpp +23 -3
  633. package/src/duckdb/src/transaction/rollback_state.cpp +1 -1
  634. package/src/duckdb/src/transaction/transaction_context.cpp +1 -1
  635. package/src/duckdb/src/transaction/undo_buffer.cpp +3 -1
  636. package/src/duckdb/third_party/fmt/include/fmt/core.h +0 -5
  637. package/src/duckdb/third_party/fsst/fsst.h +1 -1
  638. package/src/duckdb/third_party/fsst/libfsst.cpp +1 -140
  639. package/src/duckdb/third_party/fsst/libfsst.hpp +0 -13
  640. package/src/duckdb/third_party/hyperloglog/hyperloglog.hpp +4 -0
  641. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +8 -1
  642. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  643. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +15401 -15354
  644. package/src/duckdb/third_party/libpg_query/src_backend_parser_scan.cpp +299 -538
  645. package/src/duckdb/third_party/lz4/lz4.cpp +2605 -0
  646. package/src/duckdb/third_party/lz4/lz4.hpp +843 -0
  647. package/src/duckdb/third_party/parquet/parquet_types.cpp +3 -0
  648. package/src/duckdb/third_party/parquet/parquet_types.h +2 -1
  649. package/src/duckdb/third_party/re2/re2/bitmap256.cc +44 -0
  650. package/src/duckdb/third_party/re2/re2/bitmap256.h +3 -35
  651. package/src/duckdb/third_party/re2/re2/bitstate.cc +31 -24
  652. package/src/duckdb/third_party/re2/re2/compile.cc +146 -164
  653. package/src/duckdb/third_party/re2/re2/dfa.cc +174 -181
  654. package/src/duckdb/third_party/re2/re2/filtered_re2.cc +19 -3
  655. package/src/duckdb/third_party/re2/re2/filtered_re2.h +27 -23
  656. package/src/duckdb/third_party/re2/re2/mimics_pcre.cc +21 -11
  657. package/src/duckdb/third_party/re2/re2/nfa.cc +91 -131
  658. package/src/duckdb/third_party/re2/re2/onepass.cc +11 -10
  659. package/src/duckdb/third_party/re2/re2/parse.cc +171 -154
  660. package/src/duckdb/third_party/re2/re2/perl_groups.cc +35 -35
  661. package/src/duckdb/third_party/re2/re2/pod_array.h +55 -0
  662. package/src/duckdb/third_party/re2/re2/prefilter.cc +40 -40
  663. package/src/duckdb/third_party/re2/re2/prefilter.h +24 -2
  664. package/src/duckdb/third_party/re2/re2/prefilter_tree.cc +70 -84
  665. package/src/duckdb/third_party/re2/re2/prefilter_tree.h +5 -4
  666. package/src/duckdb/third_party/re2/re2/prog.cc +315 -58
  667. package/src/duckdb/third_party/re2/re2/prog.h +77 -44
  668. package/src/duckdb/third_party/re2/re2/re2.cc +333 -221
  669. package/src/duckdb/third_party/re2/re2/re2.h +277 -201
  670. package/src/duckdb/third_party/re2/re2/regexp.cc +137 -105
  671. package/src/duckdb/third_party/re2/re2/regexp.h +45 -40
  672. package/src/duckdb/third_party/re2/re2/set.cc +40 -17
  673. package/src/duckdb/third_party/re2/re2/set.h +11 -6
  674. package/src/duckdb/third_party/re2/re2/simplify.cc +50 -41
  675. package/src/duckdb/third_party/re2/re2/sparse_array.h +392 -0
  676. package/src/duckdb/third_party/re2/re2/sparse_set.h +264 -0
  677. package/src/duckdb/third_party/re2/re2/stringpiece.cc +1 -1
  678. package/src/duckdb/third_party/re2/re2/stringpiece.h +11 -8
  679. package/src/duckdb/third_party/re2/re2/tostring.cc +8 -6
  680. package/src/duckdb/third_party/re2/re2/unicode_casefold.cc +39 -10
  681. package/src/duckdb/third_party/re2/re2/unicode_casefold.h +1 -1
  682. package/src/duckdb/third_party/re2/re2/unicode_groups.cc +5019 -4566
  683. package/src/duckdb/third_party/re2/re2/unicode_groups.h +1 -1
  684. package/src/duckdb/third_party/re2/re2/walker-inl.h +21 -20
  685. package/src/duckdb/third_party/re2/util/logging.h +14 -18
  686. package/src/duckdb/third_party/re2/util/mix.h +4 -4
  687. package/src/duckdb/third_party/re2/util/mutex.h +48 -15
  688. package/src/duckdb/third_party/re2/util/rune.cc +5 -5
  689. package/src/duckdb/third_party/re2/util/strutil.cc +1 -16
  690. package/src/duckdb/third_party/re2/util/strutil.h +1 -3
  691. package/src/duckdb/third_party/re2/util/utf.h +1 -1
  692. package/src/duckdb/third_party/re2/util/util.h +9 -1
  693. package/src/duckdb/third_party/utf8proc/include/utf8proc_wrapper.hpp +2 -0
  694. package/src/duckdb/third_party/utf8proc/utf8proc_wrapper.cpp +36 -1
  695. package/src/duckdb/ub_src_common.cpp +0 -2
  696. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  697. package/src/duckdb/ub_src_planner_expression.cpp +2 -0
  698. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  699. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
@@ -14,6 +14,8 @@
14
14
  #include "duckdb/parser/tableref/joinref.hpp"
15
15
  #include "duckdb/planner/binder.hpp"
16
16
  #include "duckdb/planner/expression/bound_aggregate_expression.hpp"
17
+ #include "duckdb/planner/expression/bound_constant_expression.hpp"
18
+ #include "duckdb/planner/expression/bound_expanded_expression.hpp"
17
19
  #include "duckdb/planner/expression_binder/column_alias_binder.hpp"
18
20
  #include "duckdb/planner/expression_binder/constant_binder.hpp"
19
21
  #include "duckdb/planner/expression_binder/group_binder.hpp"
@@ -25,6 +27,7 @@
25
27
  #include "duckdb/planner/expression_iterator.hpp"
26
28
  #include "duckdb/planner/query_node/bound_select_node.hpp"
27
29
  #include "duckdb/parser/expression/function_expression.hpp"
30
+ #include "duckdb/planner/expression_binder/select_bind_state.hpp"
28
31
 
29
32
  namespace duckdb {
30
33
 
@@ -36,29 +39,29 @@ unique_ptr<Expression> Binder::BindOrderExpression(OrderBinder &order_binder, un
36
39
  // remove the expression from the DISTINCT ON list
37
40
  return nullptr;
38
41
  }
39
- D_ASSERT(bound_expr->type == ExpressionType::BOUND_COLUMN_REF);
42
+ D_ASSERT(bound_expr->type == ExpressionType::VALUE_CONSTANT);
40
43
  return bound_expr;
41
44
  }
42
45
 
43
46
  BoundLimitNode Binder::BindLimitValue(OrderBinder &order_binder, unique_ptr<ParsedExpression> limit_val,
44
47
  bool is_percentage, bool is_offset) {
45
48
  auto new_binder = Binder::CreateBinder(context, this, true);
46
- if (limit_val->HasSubquery()) {
49
+ ExpressionBinder expr_binder(*new_binder, context);
50
+ auto target_type = is_percentage ? LogicalType::DOUBLE : LogicalType::BIGINT;
51
+ expr_binder.target_type = target_type;
52
+ auto original_limit = limit_val->Copy();
53
+ auto expr = expr_binder.Bind(limit_val);
54
+ if (expr->HasSubquery()) {
47
55
  if (!order_binder.HasExtraList()) {
48
56
  throw BinderException("Subquery in LIMIT/OFFSET not supported in set operation");
49
57
  }
50
- auto bound_limit = order_binder.CreateExtraReference(std::move(limit_val));
58
+ auto bound_limit = order_binder.CreateExtraReference(std::move(original_limit));
51
59
  if (is_percentage) {
52
60
  return BoundLimitNode::ExpressionPercentage(std::move(bound_limit));
53
61
  } else {
54
62
  return BoundLimitNode::ExpressionValue(std::move(bound_limit));
55
63
  }
56
64
  }
57
- ExpressionBinder expr_binder(*new_binder, context);
58
- auto target_type = is_percentage ? LogicalType::DOUBLE : LogicalType::BIGINT;
59
- ;
60
- expr_binder.target_type = target_type;
61
- auto expr = expr_binder.Bind(limit_val);
62
65
  if (expr->IsFoldable()) {
63
66
  //! this is a constant
64
67
  auto val = ExpressionExecutor::EvaluateScalar(context, *expr).CastAs(context, target_type);
@@ -121,7 +124,7 @@ unique_ptr<BoundResultModifier> Binder::BindLimitPercent(OrderBinder &order_bind
121
124
  return std::move(result);
122
125
  }
123
126
 
124
- void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, BoundQueryNode &result) {
127
+ void Binder::PrepareModifiers(OrderBinder &order_binder, QueryNode &statement, BoundQueryNode &result) {
125
128
  for (auto &mod : statement.modifiers) {
126
129
  unique_ptr<BoundResultModifier> bound_modifier;
127
130
  switch (mod->type) {
@@ -157,16 +160,12 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun
157
160
  if (star.exclude_list.empty() && star.replace_list.empty() && !star.expr) {
158
161
  // ORDER BY ALL
159
162
  // replace the order list with the all elements in the SELECT list
160
- auto order_type = order.orders[0].type;
161
- auto null_order = order.orders[0].null_order;
162
-
163
- vector<OrderByNode> new_orders;
164
- for (idx_t i = 0; i < order_binder.MaxCount(); i++) {
165
- new_orders.emplace_back(
166
- order_type, null_order,
167
- make_uniq<ConstantExpression>(Value::INTEGER(UnsafeNumericCast<int32_t>(i + 1))));
168
- }
169
- order.orders = std::move(new_orders);
163
+ auto order_type = config.ResolveOrder(order.orders[0].type);
164
+ auto null_order = config.ResolveNullOrder(order_type, order.orders[0].null_order);
165
+ auto constant_expr = make_uniq<BoundConstantExpression>(Value("ALL"));
166
+ bound_order->orders.emplace_back(order_type, null_order, std::move(constant_expr));
167
+ bound_modifier = std::move(bound_order);
168
+ break;
170
169
  }
171
170
  }
172
171
  #if 0
@@ -233,10 +232,66 @@ void Binder::BindModifiers(OrderBinder &order_binder, QueryNode &statement, Boun
233
232
  }
234
233
  }
235
234
 
236
- static void AssignReturnType(unique_ptr<Expression> &expr, const vector<LogicalType> &sql_types) {
235
+ unique_ptr<Expression> CreateOrderExpression(unique_ptr<Expression> expr, const vector<string> &names,
236
+ const vector<LogicalType> &sql_types, idx_t table_index, idx_t index) {
237
+ if (index >= sql_types.size()) {
238
+ throw BinderException(*expr, "ORDER term out of range - should be between 1 and %lld", sql_types.size());
239
+ }
240
+ auto result = make_uniq<BoundColumnRefExpression>(std::move(expr->alias), sql_types[index],
241
+ ColumnBinding(table_index, index));
242
+ if (result->alias.empty() && index < names.size()) {
243
+ result->alias = names[index];
244
+ }
245
+ return std::move(result);
246
+ }
247
+
248
+ unique_ptr<Expression> FinalizeBindOrderExpression(unique_ptr<Expression> expr, idx_t table_index,
249
+ const vector<string> &names, const vector<LogicalType> &sql_types,
250
+ const SelectBindState &bind_state) {
251
+ auto &constant = expr->Cast<BoundConstantExpression>();
252
+ switch (constant.value.type().id()) {
253
+ case LogicalTypeId::UBIGINT: {
254
+ // index
255
+ auto index = UBigIntValue::Get(constant.value);
256
+ return CreateOrderExpression(std::move(expr), names, sql_types, table_index, bind_state.GetFinalIndex(index));
257
+ }
258
+ case LogicalTypeId::VARCHAR: {
259
+ // ORDER BY ALL
260
+ return nullptr;
261
+ }
262
+ case LogicalTypeId::STRUCT: {
263
+ // collation
264
+ auto &struct_values = StructValue::GetChildren(constant.value);
265
+ if (struct_values.size() > 2) {
266
+ throw InternalException("Expected one or two children: index and optional collation");
267
+ }
268
+ auto index = UBigIntValue::Get(struct_values[0]);
269
+ string collation;
270
+ if (struct_values.size() == 2) {
271
+ collation = StringValue::Get(struct_values[1]);
272
+ }
273
+ auto result = CreateOrderExpression(std::move(expr), names, sql_types, table_index, index);
274
+ if (!collation.empty()) {
275
+ if (sql_types[index].id() != LogicalTypeId::VARCHAR) {
276
+ throw BinderException(*result, "COLLATE can only be applied to varchar columns");
277
+ }
278
+ result->return_type = LogicalType::VARCHAR_COLLATION(std::move(collation));
279
+ }
280
+ return result;
281
+ }
282
+ default:
283
+ throw InternalException("Unknown type in FinalizeBindOrderExpression");
284
+ }
285
+ }
286
+
287
+ static void AssignReturnType(unique_ptr<Expression> &expr, idx_t table_index, const vector<string> &names,
288
+ const vector<LogicalType> &sql_types, const SelectBindState &bind_state) {
237
289
  if (!expr) {
238
290
  return;
239
291
  }
292
+ if (expr->type == ExpressionType::VALUE_CONSTANT) {
293
+ expr = FinalizeBindOrderExpression(std::move(expr), table_index, names, sql_types, bind_state);
294
+ }
240
295
  if (expr->type != ExpressionType::BOUND_COLUMN_REF) {
241
296
  return;
242
297
  }
@@ -244,8 +299,8 @@ static void AssignReturnType(unique_ptr<Expression> &expr, const vector<LogicalT
244
299
  bound_colref.return_type = sql_types[bound_colref.binding.column_index];
245
300
  }
246
301
 
247
- void Binder::BindModifierTypes(BoundQueryNode &result, const vector<LogicalType> &sql_types, idx_t,
248
- const vector<idx_t> &expansion_count) {
302
+ void Binder::BindModifiers(BoundQueryNode &result, idx_t table_index, const vector<string> &names,
303
+ const vector<LogicalType> &sql_types, const SelectBindState &bind_state) {
249
304
  for (auto &bound_mod : result.modifiers) {
250
305
  switch (bound_mod->type) {
251
306
  case ResultModifierType::DISTINCT_MODIFIER: {
@@ -253,59 +308,48 @@ void Binder::BindModifierTypes(BoundQueryNode &result, const vector<LogicalType>
253
308
  D_ASSERT(!distinct.target_distincts.empty());
254
309
  // set types of distinct targets
255
310
  for (auto &expr : distinct.target_distincts) {
256
- D_ASSERT(expr->type == ExpressionType::BOUND_COLUMN_REF);
257
- auto &bound_colref = expr->Cast<BoundColumnRefExpression>();
258
- if (bound_colref.binding.column_index == DConstants::INVALID_INDEX) {
259
- throw BinderException("Ambiguous name in DISTINCT ON!");
260
- }
261
-
262
- idx_t max_count = sql_types.size();
263
- if (bound_colref.binding.column_index > max_count - 1) {
264
- D_ASSERT(bound_colref.return_type == LogicalType::ANY);
265
- throw BinderException("ORDER term out of range - should be between 1 and %lld", max_count);
311
+ expr = FinalizeBindOrderExpression(std::move(expr), table_index, names, sql_types, bind_state);
312
+ if (!expr) {
313
+ throw InternalException("DISTINCT ON ORDER BY ALL not supported");
266
314
  }
267
-
268
- bound_colref.return_type = sql_types[bound_colref.binding.column_index];
269
315
  }
270
- for (auto &target_distinct : distinct.target_distincts) {
271
- auto &bound_colref = target_distinct->Cast<BoundColumnRefExpression>();
272
- const auto &sql_type = sql_types[bound_colref.binding.column_index];
273
- ExpressionBinder::PushCollation(context, target_distinct, sql_type, true);
316
+ for (auto &expr : distinct.target_distincts) {
317
+ ExpressionBinder::PushCollation(context, expr, expr->return_type, true);
274
318
  }
275
319
  break;
276
320
  }
277
321
  case ResultModifierType::LIMIT_MODIFIER: {
278
322
  auto &limit = bound_mod->Cast<BoundLimitModifier>();
279
- AssignReturnType(limit.limit_val.GetExpression(), sql_types);
280
- AssignReturnType(limit.offset_val.GetExpression(), sql_types);
323
+ AssignReturnType(limit.limit_val.GetExpression(), table_index, names, sql_types, bind_state);
324
+ AssignReturnType(limit.offset_val.GetExpression(), table_index, names, sql_types, bind_state);
281
325
  break;
282
326
  }
283
327
  case ResultModifierType::ORDER_MODIFIER: {
284
-
285
328
  auto &order = bound_mod->Cast<BoundOrderModifier>();
329
+ bool order_by_all = false;
286
330
  for (auto &order_node : order.orders) {
287
-
288
331
  auto &expr = order_node.expression;
289
- D_ASSERT(expr->type == ExpressionType::BOUND_COLUMN_REF);
290
- auto &bound_colref = expr->Cast<BoundColumnRefExpression>();
291
- if (bound_colref.binding.column_index == DConstants::INVALID_INDEX) {
292
- throw BinderException("Ambiguous name in ORDER BY!");
293
- }
294
-
295
- if (!expansion_count.empty() && bound_colref.return_type.id() != LogicalTypeId::ANY) {
296
- bound_colref.binding.column_index = expansion_count[bound_colref.binding.column_index];
332
+ expr = FinalizeBindOrderExpression(std::move(expr), table_index, names, sql_types, bind_state);
333
+ if (!expr) {
334
+ order_by_all = true;
297
335
  }
298
-
299
- idx_t max_count = sql_types.size();
300
- if (bound_colref.binding.column_index > max_count - 1) {
301
- D_ASSERT(bound_colref.return_type == LogicalType::ANY);
302
- throw BinderException("ORDER term out of range - should be between 1 and %lld", max_count);
336
+ }
337
+ if (order_by_all) {
338
+ D_ASSERT(order.orders.size() == 1);
339
+ auto order_type = order.orders[0].type;
340
+ auto null_order = order.orders[0].null_order;
341
+ order.orders.clear();
342
+ for (idx_t i = 0; i < sql_types.size(); i++) {
343
+ auto expr = make_uniq<BoundColumnRefExpression>(sql_types[i], ColumnBinding(table_index, i));
344
+ if (i < names.size()) {
345
+ expr->alias = names[i];
346
+ }
347
+ order.orders.emplace_back(order_type, null_order, std::move(expr));
303
348
  }
304
-
305
- const auto &sql_type = sql_types[bound_colref.binding.column_index];
306
- bound_colref.return_type = sql_type;
307
-
308
- ExpressionBinder::PushCollation(context, order_node.expression, sql_type);
349
+ }
350
+ for (auto &order_node : order.orders) {
351
+ auto &expr = order_node.expression;
352
+ ExpressionBinder::PushCollation(context, order_node.expression, expr->return_type);
309
353
  }
310
354
  break;
311
355
  }
@@ -380,19 +424,17 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
380
424
  }
381
425
  statement.select_list = std::move(new_select_list);
382
426
 
383
- // create a mapping of (alias -> index) and a mapping of (Expression -> index) for the SELECT list
384
- case_insensitive_map_t<idx_t> alias_map;
385
- parsed_expression_map_t<idx_t> projection_map;
427
+ auto &bind_state = result->bind_state;
386
428
  for (idx_t i = 0; i < statement.select_list.size(); i++) {
387
429
  auto &expr = statement.select_list[i];
388
430
  result->names.push_back(expr->GetName());
389
431
  ExpressionBinder::QualifyColumnNames(*this, expr);
390
432
  if (!expr->alias.empty()) {
391
- alias_map[expr->alias] = i;
433
+ bind_state.alias_map[expr->alias] = i;
392
434
  result->names[i] = expr->alias;
393
435
  }
394
- projection_map[*expr] = i;
395
- result->original_expressions.push_back(expr->Copy());
436
+ bind_state.projection_map[*expr] = i;
437
+ bind_state.original_expressions.push_back(expr->Copy());
396
438
  }
397
439
  result->column_count = statement.select_list.size();
398
440
 
@@ -402,15 +444,15 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
402
444
  // bind any star expressions in the WHERE clause
403
445
  BindWhereStarExpression(statement.where_clause);
404
446
 
405
- ColumnAliasBinder alias_binder(*result, alias_map);
447
+ ColumnAliasBinder alias_binder(bind_state);
406
448
  WhereBinder where_binder(*this, context, &alias_binder);
407
449
  unique_ptr<ParsedExpression> condition = std::move(statement.where_clause);
408
450
  result->where_clause = where_binder.Bind(condition);
409
451
  }
410
452
 
411
453
  // now bind all the result modifiers; including DISTINCT and ORDER BY targets
412
- OrderBinder order_binder({this}, result->projection_index, statement, alias_map, projection_map);
413
- BindModifiers(order_binder, statement, *result);
454
+ OrderBinder order_binder({this}, statement, bind_state);
455
+ PrepareModifiers(order_binder, statement, *result);
414
456
 
415
457
  vector<unique_ptr<ParsedExpression>> unbound_groups;
416
458
  BoundGroupInformation info;
@@ -418,7 +460,7 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
418
460
  if (!group_expressions.empty()) {
419
461
  // the statement has a GROUP BY clause, bind it
420
462
  unbound_groups.resize(group_expressions.size());
421
- GroupBinder group_binder(*this, context, statement, result->group_index, alias_map, info.alias_map);
463
+ GroupBinder group_binder(*this, context, statement, result->group_index, bind_state, info.alias_map);
422
464
  for (idx_t i = 0; i < group_expressions.size(); i++) {
423
465
 
424
466
  // we keep a copy of the unbound expression;
@@ -468,35 +510,36 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
468
510
 
469
511
  // bind the HAVING clause, if any
470
512
  if (statement.having) {
471
- HavingBinder having_binder(*this, context, *result, info, alias_map, statement.aggregate_handling);
513
+ HavingBinder having_binder(*this, context, *result, info, statement.aggregate_handling);
472
514
  ExpressionBinder::QualifyColumnNames(*this, statement.having);
473
515
  result->having = having_binder.Bind(statement.having);
474
516
  }
475
517
 
476
518
  // bind the QUALIFY clause, if any
477
- unique_ptr<QualifyBinder> qualify_binder;
519
+ vector<BoundColumnReferenceInfo> bound_qualify_columns;
478
520
  if (statement.qualify) {
479
521
  if (statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
480
522
  throw BinderException("Combining QUALIFY with GROUP BY ALL is not supported yet");
481
523
  }
482
- qualify_binder = make_uniq<QualifyBinder>(*this, context, *result, info, alias_map);
524
+ QualifyBinder qualify_binder(*this, context, *result, info);
483
525
  ExpressionBinder::QualifyColumnNames(*this, statement.qualify);
484
- result->qualify = qualify_binder->Bind(statement.qualify);
485
- if (qualify_binder->HasBoundColumns() && qualify_binder->BoundAggregates()) {
486
- throw BinderException("Cannot mix aggregates with non-aggregated columns!");
526
+ result->qualify = qualify_binder.Bind(statement.qualify);
527
+ if (qualify_binder.HasBoundColumns()) {
528
+ if (qualify_binder.BoundAggregates()) {
529
+ throw BinderException("Cannot mix aggregates with non-aggregated columns!");
530
+ }
531
+ bound_qualify_columns = qualify_binder.GetBoundColumns();
487
532
  }
488
533
  }
489
534
 
490
535
  // after that, we bind to the SELECT list
491
- SelectBinder select_binder(*this, context, *result, info, alias_map);
536
+ SelectBinder select_binder(*this, context, *result, info);
492
537
 
493
538
  // if we expand select-list expressions, e.g., via UNNEST, then we need to possibly
494
539
  // adjust the column index of the already bound ORDER BY modifiers, and not only set their types
495
- vector<LogicalType> modifier_sql_types;
496
- vector<idx_t> modifier_expansion_count;
497
-
498
540
  vector<idx_t> group_by_all_indexes;
499
541
  vector<string> new_names;
542
+ vector<LogicalType> internal_sql_types;
500
543
 
501
544
  for (idx_t i = 0; i < statement.select_list.size(); i++) {
502
545
  bool is_window = statement.select_list[i]->IsWindow();
@@ -506,33 +549,37 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
506
549
  bool is_original_column = i < result->column_count;
507
550
  bool can_group_by_all =
508
551
  statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES && is_original_column;
552
+ result->bound_column_count++;
509
553
 
510
- if (select_binder.HasExpandedExpressions()) {
554
+ if (expr->type == ExpressionType::BOUND_EXPANDED) {
511
555
  if (!is_original_column) {
512
- throw InternalException("Only original columns can have expanded expressions");
556
+ throw BinderException("UNNEST of struct cannot be used in ORDER BY/DISTINCT ON clause");
513
557
  }
514
558
  if (statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
515
559
  throw BinderException("UNNEST of struct cannot be combined with GROUP BY ALL");
516
560
  }
517
561
 
518
- auto &struct_expressions = select_binder.ExpandedExpressions();
562
+ auto &expanded = expr->Cast<BoundExpandedExpression>();
563
+ auto &struct_expressions = expanded.expanded_expressions;
519
564
  D_ASSERT(!struct_expressions.empty());
520
- modifier_expansion_count.push_back(modifier_sql_types.size());
521
565
 
522
566
  for (auto &struct_expr : struct_expressions) {
523
- modifier_sql_types.push_back(struct_expr->return_type);
524
567
  new_names.push_back(struct_expr->GetName());
525
568
  result->types.push_back(struct_expr->return_type);
569
+ internal_sql_types.push_back(struct_expr->return_type);
526
570
  result->select_list.push_back(std::move(struct_expr));
527
571
  }
528
-
529
- struct_expressions.clear();
572
+ bind_state.AddExpandedColumn(struct_expressions.size());
530
573
  continue;
531
574
  }
532
575
 
533
- // not an expanded expression
534
- modifier_expansion_count.push_back(modifier_sql_types.size());
535
- modifier_sql_types.push_back(result_type);
576
+ if (expr->IsVolatile()) {
577
+ bind_state.SetExpressionIsVolatile(i);
578
+ }
579
+ if (expr->HasSubquery()) {
580
+ bind_state.SetExpressionHasSubquery(i);
581
+ }
582
+ bind_state.AddRegularColumn();
536
583
 
537
584
  if (can_group_by_all && select_binder.HasBoundColumns()) {
538
585
  if (select_binder.BoundAggregates()) {
@@ -554,6 +601,7 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
554
601
  new_names.push_back(std::move(result->names[i]));
555
602
  result->types.push_back(result_type);
556
603
  }
604
+ internal_sql_types.push_back(result_type);
557
605
 
558
606
  if (can_group_by_all) {
559
607
  select_binder.ResetBindings();
@@ -581,17 +629,14 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
581
629
  if (statement.aggregate_handling == AggregateHandling::NO_AGGREGATES_ALLOWED) {
582
630
  throw BinderException("Aggregates cannot be present in a Project relation!");
583
631
  } else {
584
- vector<reference<BaseSelectBinder>> to_check_binders;
585
- to_check_binders.push_back(select_binder);
586
- if (qualify_binder) {
587
- to_check_binders.push_back(*qualify_binder);
632
+ vector<BoundColumnReferenceInfo> bound_columns;
633
+ if (select_binder.HasBoundColumns()) {
634
+ bound_columns = select_binder.GetBoundColumns();
588
635
  }
589
- for (auto &binder : to_check_binders) {
590
- auto &sel_binder = binder.get();
591
- if (!sel_binder.HasBoundColumns()) {
592
- continue;
593
- }
594
- auto &bound_columns = sel_binder.GetBoundColumns();
636
+ for (auto &bound_qualify_col : bound_qualify_columns) {
637
+ bound_columns.push_back(bound_qualify_col);
638
+ }
639
+ if (!bound_columns.empty()) {
595
640
  string error;
596
641
  error = "column \"%s\" must appear in the GROUP BY clause or must be part of an aggregate function.";
597
642
  if (statement.aggregate_handling == AggregateHandling::FORCE_AGGREGATES) {
@@ -616,7 +661,7 @@ unique_ptr<BoundQueryNode> Binder::BindSelectNode(SelectNode &statement, unique_
616
661
  }
617
662
 
618
663
  // now that the SELECT list is bound, we set the types of DISTINCT/ORDER BY expressions
619
- BindModifierTypes(*result, modifier_sql_types, result->projection_index, modifier_expansion_count);
664
+ BindModifiers(*result, result->projection_index, result->names, internal_sql_types, bind_state);
620
665
  return std::move(result);
621
666
  }
622
667
 
@@ -9,12 +9,12 @@
9
9
  #include "duckdb/planner/expression_binder/order_binder.hpp"
10
10
  #include "duckdb/planner/query_node/bound_select_node.hpp"
11
11
  #include "duckdb/planner/query_node/bound_set_operation_node.hpp"
12
+ #include "duckdb/planner/expression_binder/select_bind_state.hpp"
12
13
  #include "duckdb/common/enum_util.hpp"
13
14
 
14
15
  namespace duckdb {
15
16
 
16
- static void GatherAliases(BoundQueryNode &node, case_insensitive_map_t<idx_t> &aliases,
17
- parsed_expression_map_t<idx_t> &expressions, const vector<idx_t> &reorder_idx) {
17
+ static void GatherAliases(BoundQueryNode &node, SelectBindState &bind_state, const vector<idx_t> &reorder_idx) {
18
18
  if (node.type == QueryNodeType::SET_OPERATION_NODE) {
19
19
  // setop, recurse
20
20
  auto &setop = node.Cast<BoundSetOperationNode>();
@@ -32,41 +32,45 @@ static void GatherAliases(BoundQueryNode &node, case_insensitive_map_t<idx_t> &a
32
32
  }
33
33
 
34
34
  // use new reorder index
35
- GatherAliases(*setop.left, aliases, expressions, new_left_reorder_idx);
36
- GatherAliases(*setop.right, aliases, expressions, new_right_reorder_idx);
35
+ GatherAliases(*setop.left, bind_state, new_left_reorder_idx);
36
+ GatherAliases(*setop.right, bind_state, new_right_reorder_idx);
37
37
  return;
38
38
  }
39
39
 
40
- GatherAliases(*setop.left, aliases, expressions, reorder_idx);
41
- GatherAliases(*setop.right, aliases, expressions, reorder_idx);
40
+ GatherAliases(*setop.left, bind_state, reorder_idx);
41
+ GatherAliases(*setop.right, bind_state, reorder_idx);
42
42
  } else {
43
43
  // query node
44
44
  D_ASSERT(node.type == QueryNodeType::SELECT_NODE);
45
45
  auto &select = node.Cast<BoundSelectNode>();
46
- // fill the alias lists
46
+ // fill the alias lists with the names
47
47
  for (idx_t i = 0; i < select.names.size(); i++) {
48
48
  auto &name = select.names[i];
49
- auto &expr = select.original_expressions[i];
50
49
  // first check if the alias is already in there
51
- auto entry = aliases.find(name);
50
+ auto entry = bind_state.alias_map.find(name);
52
51
 
53
52
  idx_t index = reorder_idx[i];
54
53
 
55
- if (entry == aliases.end()) {
54
+ if (entry == bind_state.alias_map.end()) {
56
55
  // the alias is not in there yet, just assign it
57
- aliases[name] = index;
56
+ bind_state.alias_map[name] = index;
58
57
  }
58
+ }
59
+ // check if the expression matches one of the expressions in the original expression liset
60
+ for (idx_t i = 0; i < select.bind_state.original_expressions.size(); i++) {
61
+ auto &expr = select.bind_state.original_expressions[i];
62
+ idx_t index = reorder_idx[i];
59
63
  // now check if the node is already in the set of expressions
60
- auto expr_entry = expressions.find(*expr);
61
- if (expr_entry != expressions.end()) {
64
+ auto expr_entry = bind_state.projection_map.find(*expr);
65
+ if (expr_entry != bind_state.projection_map.end()) {
62
66
  // the node is in there
63
67
  // repeat the same as with the alias: if there is an ambiguity we insert "-1"
64
68
  if (expr_entry->second != index) {
65
- expressions[*expr] = DConstants::INVALID_INDEX;
69
+ bind_state.projection_map[*expr] = DConstants::INVALID_INDEX;
66
70
  }
67
71
  } else {
68
72
  // not in there yet, just place it in there
69
- expressions[*expr] = index;
73
+ bind_state.projection_map[*expr] = index;
70
74
  }
71
75
  }
72
76
  }
@@ -114,8 +118,8 @@ static void BuildUnionByNameInfo(ClientContext &context, BoundSetOperationNode &
114
118
  bool right_exist = right_index != right_names_map.end();
115
119
  LogicalType result_type;
116
120
  if (left_exist && right_exist) {
117
- result_type = LogicalType::MaxLogicalType(context, left_node.types[left_index->second],
118
- right_node.types[right_index->second]);
121
+ result_type = LogicalType::ForceMaxLogicalType(left_node.types[left_index->second],
122
+ right_node.types[right_index->second]);
119
123
  if (left_index->second != i || right_index->second != i) {
120
124
  need_reorder = true;
121
125
  }
@@ -225,32 +229,30 @@ unique_ptr<BoundQueryNode> Binder::BindNode(SetOperationNode &statement) {
225
229
  }
226
230
  }
227
231
 
232
+ SelectBindState bind_state;
228
233
  if (!statement.modifiers.empty()) {
229
234
  // handle the ORDER BY/DISTINCT clauses
230
235
 
231
236
  // we recursively visit the children of this node to extract aliases and expressions that can be referenced
232
237
  // in the ORDER BY
233
- case_insensitive_map_t<idx_t> alias_map;
234
- parsed_expression_map_t<idx_t> expression_map;
235
238
 
236
239
  if (result->setop_type == SetOperationType::UNION_BY_NAME) {
237
- GatherAliases(*result->left, alias_map, expression_map, result->left_reorder_idx);
238
- GatherAliases(*result->right, alias_map, expression_map, result->right_reorder_idx);
240
+ GatherAliases(*result->left, bind_state, result->left_reorder_idx);
241
+ GatherAliases(*result->right, bind_state, result->right_reorder_idx);
239
242
  } else {
240
243
  vector<idx_t> reorder_idx;
241
244
  for (idx_t i = 0; i < result->names.size(); i++) {
242
245
  reorder_idx.push_back(i);
243
246
  }
244
- GatherAliases(*result, alias_map, expression_map, reorder_idx);
247
+ GatherAliases(*result, bind_state, reorder_idx);
245
248
  }
246
249
  // now we perform the actual resolution of the ORDER BY/DISTINCT expressions
247
- OrderBinder order_binder({result->left_binder.get(), result->right_binder.get()}, result->setop_index,
248
- alias_map, expression_map, result->names.size());
249
- BindModifiers(order_binder, statement, *result);
250
+ OrderBinder order_binder({result->left_binder.get(), result->right_binder.get()}, bind_state);
251
+ PrepareModifiers(order_binder, statement, *result);
250
252
  }
251
253
 
252
254
  // finally bind the types of the ORDER/DISTINCT clause expressions
253
- BindModifierTypes(*result, result->types, result->setop_index);
255
+ BindModifiers(*result, result->setop_index, result->names, result->types, bind_state);
254
256
  return std::move(result);
255
257
  }
256
258
 
@@ -23,4 +23,33 @@ unique_ptr<LogicalOperator> Binder::CreatePlan(BoundCTENode &node) {
23
23
  return VisitQueryNode(node, std::move(root));
24
24
  }
25
25
 
26
+ unique_ptr<LogicalOperator> Binder::CreatePlan(BoundCTENode &node, unique_ptr<LogicalOperator> base) {
27
+ // Generate the logical plan for the cte_query and child.
28
+ auto cte_query = CreatePlan(*node.query);
29
+ unique_ptr<LogicalOperator> cte_child;
30
+ if (node.child && node.child->type == QueryNodeType::CTE_NODE) {
31
+ cte_child = CreatePlan(node.child->Cast<BoundCTENode>(), std::move(base));
32
+ } else if (node.child) {
33
+ cte_child = CreatePlan(*node.child);
34
+ } else {
35
+ cte_child = std::move(base);
36
+ }
37
+
38
+ // Only keep the materialized CTE, if it is used
39
+ if (node.child_binder->bind_context.cte_references[node.ctename] &&
40
+ *node.child_binder->bind_context.cte_references[node.ctename] > 0) {
41
+ auto root = make_uniq<LogicalMaterializedCTE>(node.ctename, node.setop_index, node.types.size(),
42
+ std::move(cte_query), std::move(cte_child));
43
+
44
+ // check if there are any unplanned subqueries left in either child
45
+ has_unplanned_dependent_joins = has_unplanned_dependent_joins ||
46
+ node.child_binder->has_unplanned_dependent_joins ||
47
+ node.query_binder->has_unplanned_dependent_joins;
48
+
49
+ return VisitQueryNode(node, std::move(root));
50
+ } else {
51
+ return VisitQueryNode(node, std::move(cte_child));
52
+ }
53
+ }
54
+
26
55
  } // namespace duckdb
@@ -254,7 +254,7 @@ static unique_ptr<Expression> PlanCorrelatedSubquery(Binder &binder, BoundSubque
254
254
  FlattenDependentJoins flatten(binder, correlated_columns, perform_delim);
255
255
 
256
256
  // first we check which logical operators have correlated expressions in the first place
257
- flatten.DetectCorrelatedExpressions(plan.get());
257
+ flatten.DetectCorrelatedExpressions(*plan);
258
258
  // now we push the dependent join down
259
259
  auto dependent_join = flatten.PushDownDependentJoin(std::move(plan));
260
260
 
@@ -279,7 +279,7 @@ static unique_ptr<Expression> PlanCorrelatedSubquery(Binder &binder, BoundSubque
279
279
  delim_join->mark_index = mark_index;
280
280
  // RHS
281
281
  FlattenDependentJoins flatten(binder, correlated_columns, perform_delim, true);
282
- flatten.DetectCorrelatedExpressions(plan.get());
282
+ flatten.DetectCorrelatedExpressions(*plan);
283
283
  auto dependent_join = flatten.PushDownDependentJoin(std::move(plan));
284
284
 
285
285
  // fetch the set of columns
@@ -307,7 +307,7 @@ static unique_ptr<Expression> PlanCorrelatedSubquery(Binder &binder, BoundSubque
307
307
  delim_join->mark_index = mark_index;
308
308
  // RHS
309
309
  FlattenDependentJoins flatten(binder, correlated_columns, true, true);
310
- flatten.DetectCorrelatedExpressions(plan.get());
310
+ flatten.DetectCorrelatedExpressions(*plan);
311
311
  auto dependent_join = flatten.PushDownDependentJoin(std::move(plan));
312
312
 
313
313
  // fetch the columns
@@ -411,8 +411,8 @@ void Binder::PlanSubqueries(unique_ptr<Expression> &expr_ptr, unique_ptr<Logical
411
411
  }
412
412
 
413
413
  unique_ptr<LogicalOperator> Binder::PlanLateralJoin(unique_ptr<LogicalOperator> left, unique_ptr<LogicalOperator> right,
414
- vector<CorrelatedColumnInfo> &correlated_columns,
415
- JoinType join_type, unique_ptr<Expression> condition) {
414
+ vector<CorrelatedColumnInfo> &correlated, JoinType join_type,
415
+ unique_ptr<Expression> condition) {
416
416
  // scan the right operator for correlated columns
417
417
  // correlated LATERAL JOIN
418
418
  vector<JoinCondition> conditions;
@@ -423,13 +423,13 @@ unique_ptr<LogicalOperator> Binder::PlanLateralJoin(unique_ptr<LogicalOperator>
423
423
  arbitrary_expressions);
424
424
  }
425
425
 
426
- auto perform_delim = PerformDuplicateElimination(*this, correlated_columns);
427
- auto delim_join = CreateDuplicateEliminatedJoin(correlated_columns, join_type, std::move(left), perform_delim);
426
+ auto perform_delim = PerformDuplicateElimination(*this, correlated);
427
+ auto delim_join = CreateDuplicateEliminatedJoin(correlated, join_type, std::move(left), perform_delim);
428
428
 
429
- FlattenDependentJoins flatten(*this, correlated_columns, perform_delim);
429
+ FlattenDependentJoins flatten(*this, correlated, perform_delim);
430
430
 
431
431
  // first we check which logical operators have correlated expressions in the first place
432
- flatten.DetectCorrelatedExpressions(right.get(), true);
432
+ flatten.DetectCorrelatedExpressions(*right, true);
433
433
  // now we push the dependent join down
434
434
  auto dependent_join = flatten.PushDownDependentJoin(std::move(right));
435
435
 
@@ -448,7 +448,7 @@ unique_ptr<LogicalOperator> Binder::PlanLateralJoin(unique_ptr<LogicalOperator>
448
448
  D_ASSERT(delim_join->conditions.empty());
449
449
  delim_join->conditions = std::move(conditions);
450
450
  // then add the delim join conditions
451
- CreateDelimJoinConditions(*delim_join, correlated_columns, plan_columns, flatten.delim_offset, perform_delim);
451
+ CreateDelimJoinConditions(*delim_join, correlated, plan_columns, flatten.delim_offset, perform_delim);
452
452
  delim_join->AddChild(std::move(dependent_join));
453
453
 
454
454
  // check if there are any arbitrary expressions left