duckdb 0.8.2-dev157.0 → 0.8.2-dev1573.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 (493) 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 +4619 -4446
  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/extra_type_info.cpp +506 -0
  61. package/src/duckdb/src/common/file_system.cpp +19 -0
  62. package/src/duckdb/src/common/hive_partitioning.cpp +10 -6
  63. package/src/duckdb/src/common/local_file_system.cpp +14 -14
  64. package/src/duckdb/src/common/multi_file_reader.cpp +184 -20
  65. package/src/duckdb/src/common/operator/cast_operators.cpp +35 -1
  66. package/src/duckdb/src/common/radix_partitioning.cpp +26 -8
  67. package/src/duckdb/src/common/re2_regex.cpp +1 -1
  68. package/src/duckdb/src/common/row_operations/row_external.cpp +1 -1
  69. package/src/duckdb/src/common/sort/merge_sorter.cpp +9 -16
  70. package/src/duckdb/src/common/sort/partition_state.cpp +44 -11
  71. package/src/duckdb/src/common/types/batched_data_collection.cpp +7 -2
  72. package/src/duckdb/src/common/types/bit.cpp +51 -0
  73. package/src/duckdb/src/common/types/column/column_data_allocator.cpp +9 -6
  74. package/src/duckdb/src/common/types/column/column_data_collection.cpp +17 -2
  75. package/src/duckdb/src/common/types/column/column_data_collection_segment.cpp +15 -6
  76. package/src/duckdb/src/common/types/column/partitioned_column_data.cpp +2 -2
  77. package/src/duckdb/src/common/types/data_chunk.cpp +2 -2
  78. package/src/duckdb/src/common/types/date.cpp +9 -0
  79. package/src/duckdb/src/common/types/list_segment.cpp +24 -74
  80. package/src/duckdb/src/common/types/row/partitioned_tuple_data.cpp +3 -9
  81. package/src/duckdb/src/common/types/row/tuple_data_collection.cpp +2 -0
  82. package/src/duckdb/src/common/types/row/tuple_data_scatter_gather.cpp +2 -2
  83. package/src/duckdb/src/common/types/uuid.cpp +2 -2
  84. package/src/duckdb/src/common/types/validity_mask.cpp +33 -0
  85. package/src/duckdb/src/common/types.cpp +8 -655
  86. package/src/duckdb/src/common/virtual_file_system.cpp +138 -1
  87. package/src/duckdb/src/core_functions/aggregate/holistic/reservoir_quantile.cpp +2 -0
  88. package/src/duckdb/src/core_functions/aggregate/nested/list.cpp +2 -2
  89. package/src/duckdb/src/core_functions/aggregate/regression/regr_avg.cpp +4 -4
  90. package/src/duckdb/src/core_functions/aggregate/regression/regr_intercept.cpp +4 -4
  91. package/src/duckdb/src/core_functions/aggregate/regression/regr_r2.cpp +5 -4
  92. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxx_syy.cpp +8 -8
  93. package/src/duckdb/src/core_functions/aggregate/regression/regr_sxy.cpp +4 -3
  94. package/src/duckdb/src/core_functions/function_list.cpp +4 -2
  95. package/src/duckdb/src/core_functions/scalar/date/date_part.cpp +208 -42
  96. package/src/duckdb/src/core_functions/scalar/date/epoch.cpp +10 -24
  97. package/src/duckdb/src/core_functions/scalar/date/make_date.cpp +19 -4
  98. package/src/duckdb/src/core_functions/scalar/list/list_aggregates.cpp +4 -2
  99. package/src/duckdb/src/execution/aggregate_hashtable.cpp +34 -18
  100. package/src/duckdb/src/execution/expression_executor.cpp +1 -1
  101. package/src/duckdb/src/execution/index/art/art.cpp +149 -139
  102. package/src/duckdb/src/execution/index/art/fixed_size_allocator.cpp +1 -1
  103. package/src/duckdb/src/execution/index/art/iterator.cpp +129 -207
  104. package/src/duckdb/src/execution/index/art/leaf.cpp +8 -37
  105. package/src/duckdb/src/execution/index/art/node.cpp +113 -120
  106. package/src/duckdb/src/execution/index/art/node16.cpp +1 -10
  107. package/src/duckdb/src/execution/index/art/node256.cpp +1 -9
  108. package/src/duckdb/src/execution/index/art/node4.cpp +12 -13
  109. package/src/duckdb/src/execution/index/art/node48.cpp +1 -11
  110. package/src/duckdb/src/execution/index/art/prefix.cpp +228 -350
  111. package/src/duckdb/src/execution/join_hashtable.cpp +4 -4
  112. package/src/duckdb/src/execution/operator/aggregate/aggregate_object.cpp +1 -0
  113. package/src/duckdb/src/execution/operator/aggregate/physical_streaming_window.cpp +8 -3
  114. package/src/duckdb/src/execution/operator/aggregate/physical_ungrouped_aggregate.cpp +32 -22
  115. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +512 -300
  116. package/src/duckdb/src/execution/operator/helper/physical_batch_collector.cpp +4 -3
  117. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +5 -5
  118. package/src/duckdb/src/execution/operator/join/physical_asof_join.cpp +444 -284
  119. package/src/duckdb/src/execution/operator/join/physical_comparison_join.cpp +1 -1
  120. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +21 -10
  121. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +28 -12
  122. package/src/duckdb/src/execution/operator/join/physical_join.cpp +1 -1
  123. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +23 -4
  124. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +41 -5
  125. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +100 -13
  126. package/src/duckdb/src/execution/operator/persistent/csv_file_handle.cpp +1 -1
  127. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +20 -0
  128. package/src/duckdb/src/execution/operator/persistent/csv_rejects_table.cpp +48 -0
  129. package/src/duckdb/src/execution/operator/persistent/parallel_csv_reader.cpp +2 -3
  130. package/src/duckdb/src/execution/operator/persistent/physical_batch_copy_to_file.cpp +6 -4
  131. package/src/duckdb/src/execution/operator/persistent/physical_fixed_batch_copy.cpp +3 -3
  132. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -1
  133. package/src/duckdb/src/execution/operator/projection/physical_pivot.cpp +2 -1
  134. package/src/duckdb/src/execution/operator/scan/physical_column_data_scan.cpp +19 -0
  135. package/src/duckdb/src/execution/operator/scan/physical_table_scan.cpp +7 -2
  136. package/src/duckdb/src/execution/operator/set/physical_cte.cpp +160 -0
  137. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +15 -5
  138. package/src/duckdb/src/execution/partitionable_hashtable.cpp +41 -6
  139. package/src/duckdb/src/execution/perfect_aggregate_hashtable.cpp +30 -5
  140. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +43 -10
  141. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +56 -33
  142. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +17 -13
  143. package/src/duckdb/src/execution/physical_plan/plan_cte.cpp +33 -0
  144. package/src/duckdb/src/execution/physical_plan/plan_get.cpp +2 -2
  145. package/src/duckdb/src/execution/physical_plan/plan_recursive_cte.cpp +25 -4
  146. package/src/duckdb/src/execution/physical_plan_generator.cpp +4 -0
  147. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +290 -43
  148. package/src/duckdb/src/execution/window_segment_tree.cpp +286 -129
  149. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +2 -1
  150. package/src/duckdb/src/function/cast/bit_cast.cpp +34 -2
  151. package/src/duckdb/src/function/cast/blob_cast.cpp +3 -0
  152. package/src/duckdb/src/function/cast/numeric_casts.cpp +2 -0
  153. package/src/duckdb/src/function/function.cpp +3 -1
  154. package/src/duckdb/src/function/pragma/pragma_queries.cpp +5 -0
  155. package/src/duckdb/src/function/scalar/compressed_materialization/compress_integral.cpp +212 -0
  156. package/src/duckdb/src/function/scalar/compressed_materialization/compress_string.cpp +249 -0
  157. package/src/duckdb/src/function/scalar/compressed_materialization_functions.cpp +29 -0
  158. package/src/duckdb/src/function/scalar/list/list_resize.cpp +162 -0
  159. package/src/duckdb/src/function/scalar/nested_functions.cpp +1 -0
  160. package/src/duckdb/src/function/scalar/string/like.cpp +12 -4
  161. package/src/duckdb/src/function/scalar/system/aggregate_export.cpp +12 -5
  162. package/src/duckdb/src/function/table/copy_csv.cpp +8 -1
  163. package/src/duckdb/src/function/table/read_csv.cpp +100 -17
  164. package/src/duckdb/src/function/table/system_functions.cpp +1 -0
  165. package/src/duckdb/src/function/table/table_scan.cpp +9 -0
  166. package/src/duckdb/src/function/table/version/pragma_version.cpp +46 -2
  167. package/src/duckdb/src/include/duckdb/common/adbc/adbc.hpp +1 -0
  168. package/src/duckdb/src/include/duckdb/common/allocator.hpp +2 -0
  169. package/src/duckdb/src/include/duckdb/common/bswap.hpp +42 -0
  170. package/src/duckdb/src/include/duckdb/common/dl.hpp +3 -1
  171. package/src/duckdb/src/include/duckdb/common/enum_util.hpp +616 -584
  172. package/src/duckdb/src/include/duckdb/common/enums/cte_materialize.hpp +21 -0
  173. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -1
  174. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +2 -0
  175. package/src/duckdb/src/include/duckdb/common/enums/optimizer_type.hpp +2 -0
  176. package/src/duckdb/src/include/duckdb/common/enums/physical_operator_type.hpp +2 -0
  177. package/src/duckdb/src/include/duckdb/common/extra_operator_info.hpp +27 -0
  178. package/src/duckdb/src/include/duckdb/common/extra_type_info.hpp +219 -0
  179. package/src/duckdb/src/include/duckdb/common/file_system.hpp +2 -0
  180. package/src/duckdb/src/include/duckdb/common/hive_partitioning.hpp +1 -1
  181. package/src/duckdb/src/include/duckdb/common/multi_file_reader.hpp +6 -4
  182. package/src/duckdb/src/include/duckdb/common/multi_file_reader_options.hpp +10 -42
  183. package/src/duckdb/src/include/duckdb/common/mutex.hpp +3 -0
  184. package/src/duckdb/src/include/duckdb/common/operator/cast_operators.hpp +43 -3
  185. package/src/duckdb/src/include/duckdb/common/operator/numeric_cast.hpp +10 -0
  186. package/src/duckdb/src/include/duckdb/common/radix.hpp +9 -20
  187. package/src/duckdb/src/include/duckdb/common/radix_partitioning.hpp +6 -21
  188. package/src/duckdb/src/include/duckdb/common/row_operations/row_operations.hpp +3 -3
  189. package/src/duckdb/src/include/duckdb/common/sort/partition_state.hpp +13 -0
  190. package/src/duckdb/src/include/duckdb/common/string_util.hpp +11 -0
  191. package/src/duckdb/src/include/duckdb/common/types/batched_data_collection.hpp +3 -1
  192. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +81 -0
  193. package/src/duckdb/src/include/duckdb/common/types/column/column_data_allocator.hpp +1 -1
  194. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection.hpp +6 -1
  195. package/src/duckdb/src/include/duckdb/common/types/column/column_data_collection_segment.hpp +1 -1
  196. package/src/duckdb/src/include/duckdb/common/types/column/column_data_scan_states.hpp +3 -1
  197. package/src/duckdb/src/include/duckdb/common/types/data_chunk.hpp +1 -1
  198. package/src/duckdb/src/include/duckdb/common/types/date.hpp +7 -5
  199. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +6 -8
  200. package/src/duckdb/src/include/duckdb/common/types/row/partitioned_tuple_data.hpp +0 -1
  201. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_collection.hpp +1 -0
  202. package/src/duckdb/src/include/duckdb/common/types/row/tuple_data_states.hpp +3 -0
  203. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +9 -0
  204. package/src/duckdb/src/include/duckdb/common/types.hpp +1 -15
  205. package/src/duckdb/src/include/duckdb/common/virtual_file_system.hpp +38 -97
  206. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/corr.hpp +4 -4
  207. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic/covar.hpp +3 -1
  208. package/src/duckdb/src/include/duckdb/core_functions/aggregate/algebraic_functions.hpp +3 -1
  209. package/src/duckdb/src/include/duckdb/core_functions/aggregate/distributive_functions.hpp +3 -1
  210. package/src/duckdb/src/include/duckdb/core_functions/aggregate/holistic_functions.hpp +3 -1
  211. package/src/duckdb/src/include/duckdb/core_functions/aggregate/nested_functions.hpp +3 -1
  212. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_count.hpp +1 -0
  213. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression/regr_slope.hpp +3 -3
  214. package/src/duckdb/src/include/duckdb/core_functions/aggregate/regression_functions.hpp +3 -1
  215. package/src/duckdb/src/include/duckdb/core_functions/scalar/bit_functions.hpp +3 -1
  216. package/src/duckdb/src/include/duckdb/core_functions/scalar/blob_functions.hpp +3 -1
  217. package/src/duckdb/src/include/duckdb/core_functions/scalar/date_functions.hpp +31 -11
  218. package/src/duckdb/src/include/duckdb/core_functions/scalar/enum_functions.hpp +3 -1
  219. package/src/duckdb/src/include/duckdb/core_functions/scalar/generic_functions.hpp +3 -1
  220. package/src/duckdb/src/include/duckdb/core_functions/scalar/list_functions.hpp +3 -1
  221. package/src/duckdb/src/include/duckdb/core_functions/scalar/map_functions.hpp +3 -1
  222. package/src/duckdb/src/include/duckdb/core_functions/scalar/math_functions.hpp +3 -1
  223. package/src/duckdb/src/include/duckdb/core_functions/scalar/operators_functions.hpp +3 -1
  224. package/src/duckdb/src/include/duckdb/core_functions/scalar/random_functions.hpp +3 -1
  225. package/src/duckdb/src/include/duckdb/core_functions/scalar/string_functions.hpp +3 -1
  226. package/src/duckdb/src/include/duckdb/core_functions/scalar/struct_functions.hpp +3 -1
  227. package/src/duckdb/src/include/duckdb/core_functions/scalar/union_functions.hpp +3 -1
  228. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +21 -3
  229. package/src/duckdb/src/include/duckdb/execution/executor.hpp +3 -0
  230. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +4 -5
  231. package/src/duckdb/src/include/duckdb/execution/index/art/iterator.hpp +31 -27
  232. package/src/duckdb/src/include/duckdb/execution/index/art/leaf.hpp +6 -14
  233. package/src/duckdb/src/include/duckdb/execution/index/art/node.hpp +4 -10
  234. package/src/duckdb/src/include/duckdb/execution/index/art/node16.hpp +3 -6
  235. package/src/duckdb/src/include/duckdb/execution/index/art/node256.hpp +3 -6
  236. package/src/duckdb/src/include/duckdb/execution/index/art/node4.hpp +5 -8
  237. package/src/duckdb/src/include/duckdb/execution/index/art/node48.hpp +3 -6
  238. package/src/duckdb/src/include/duckdb/execution/index/art/prefix.hpp +63 -52
  239. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_asof_join.hpp +3 -10
  240. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_iejoin.hpp +1 -1
  241. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_piecewise_merge_join.hpp +1 -1
  242. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_range_join.hpp +12 -1
  243. package/src/duckdb/src/include/duckdb/execution/operator/persistent/base_csv_reader.hpp +2 -2
  244. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_line_info.hpp +4 -3
  245. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +8 -1
  246. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_rejects_table.hpp +36 -0
  247. package/src/duckdb/src/include/duckdb/execution/operator/persistent/parallel_csv_reader.hpp +1 -1
  248. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_column_data_scan.hpp +10 -0
  249. package/src/duckdb/src/include/duckdb/execution/operator/scan/physical_table_scan.hpp +5 -1
  250. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_cte.hpp +62 -0
  251. package/src/duckdb/src/include/duckdb/execution/operator/set/physical_recursive_cte.hpp +8 -2
  252. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  253. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +3 -0
  254. package/src/duckdb/src/include/duckdb/execution/radix_partitioned_hashtable.hpp +10 -3
  255. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +51 -40
  256. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +1 -1
  257. package/src/duckdb/src/include/duckdb/function/aggregate_state.hpp +2 -2
  258. package/src/duckdb/src/include/duckdb/function/built_in_functions.hpp +1 -0
  259. package/src/duckdb/src/include/duckdb/function/scalar/compressed_materialization_functions.hpp +49 -0
  260. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +1 -1
  261. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +5 -0
  262. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +2 -0
  263. package/src/duckdb/src/include/duckdb/function/table/system_functions.hpp +4 -0
  264. package/src/duckdb/src/include/duckdb/main/client_config.hpp +5 -0
  265. package/src/duckdb/src/include/duckdb/main/config.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/connection.hpp +1 -2
  267. package/src/duckdb/src/include/duckdb/main/relation/cross_product_relation.hpp +4 -1
  268. package/src/duckdb/src/include/duckdb/main/relation/join_relation.hpp +5 -2
  269. package/src/duckdb/src/include/duckdb/main/relation.hpp +4 -2
  270. package/src/duckdb/src/include/duckdb/main/settings.hpp +39 -1
  271. package/src/duckdb/src/include/duckdb/optimizer/column_binding_replacer.hpp +47 -0
  272. package/src/duckdb/src/include/duckdb/optimizer/compressed_materialization.hpp +132 -0
  273. package/src/duckdb/src/include/duckdb/optimizer/deliminator.hpp +13 -16
  274. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +3 -0
  275. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +1 -1
  276. package/src/duckdb/src/include/duckdb/optimizer/join_order/estimated_properties.hpp +10 -1
  277. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_order_optimizer.hpp +1 -1
  278. package/src/duckdb/src/include/duckdb/optimizer/join_order/join_relation.hpp +1 -1
  279. package/src/duckdb/src/include/duckdb/optimizer/join_order/query_graph.hpp +3 -0
  280. package/src/duckdb/src/include/duckdb/optimizer/matcher/set_matcher.hpp +13 -0
  281. package/src/duckdb/src/include/duckdb/optimizer/optimizer.hpp +3 -0
  282. package/src/duckdb/src/include/duckdb/optimizer/remove_duplicate_groups.hpp +40 -0
  283. package/src/duckdb/src/include/duckdb/optimizer/statistics_propagator.hpp +11 -3
  284. package/src/duckdb/src/include/duckdb/optimizer/topn_optimizer.hpp +2 -0
  285. package/src/duckdb/src/include/duckdb/parallel/pipeline.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parallel/task_scheduler.hpp +5 -0
  287. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +3 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +3 -0
  291. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +3 -0
  292. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +3 -0
  293. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  294. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  295. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +3 -0
  296. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +3 -0
  297. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +3 -0
  298. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +3 -0
  299. package/src/duckdb/src/include/duckdb/parser/query_node/cte_node.hpp +54 -0
  300. package/src/duckdb/src/include/duckdb/parser/query_node/list.hpp +1 -0
  301. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +2 -1
  302. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +1 -0
  303. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +1 -1
  304. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  305. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +1 -0
  306. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +15 -8
  307. package/src/duckdb/src/include/duckdb/planner/binder.hpp +12 -5
  308. package/src/duckdb/src/include/duckdb/planner/bound_tokens.hpp +1 -0
  309. package/src/duckdb/src/include/duckdb/planner/column_binding.hpp +4 -0
  310. package/src/duckdb/src/include/duckdb/planner/constraints/bound_unique_constraint.hpp +3 -3
  311. package/src/duckdb/src/include/duckdb/planner/expression_binder/lateral_binder.hpp +0 -2
  312. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  313. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +2 -1
  314. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -5
  315. package/src/duckdb/src/include/duckdb/planner/operator/logical_cteref.hpp +7 -2
  316. package/src/duckdb/src/include/duckdb/planner/operator/logical_dependent_join.hpp +43 -0
  317. package/src/duckdb/src/include/duckdb/planner/operator/logical_get.hpp +4 -0
  318. package/src/duckdb/src/include/duckdb/planner/operator/logical_materialized_cte.hpp +49 -0
  319. package/src/duckdb/src/include/duckdb/planner/operator/logical_recursive_cte.hpp +5 -4
  320. package/src/duckdb/src/include/duckdb/planner/query_node/bound_cte_node.hpp +44 -0
  321. package/src/duckdb/src/include/duckdb/planner/query_node/list.hpp +1 -0
  322. package/src/duckdb/src/include/duckdb/planner/subquery/flatten_dependent_join.hpp +2 -2
  323. package/src/duckdb/src/include/duckdb/planner/subquery/has_correlated_expressions.hpp +4 -1
  324. package/src/duckdb/src/include/duckdb/planner/subquery/recursive_dependent_join_planner.hpp +31 -0
  325. package/src/duckdb/src/include/duckdb/planner/subquery/rewrite_correlated_expressions.hpp +8 -2
  326. package/src/duckdb/src/include/duckdb/planner/tableref/bound_cteref.hpp +5 -2
  327. package/src/duckdb/src/include/duckdb/storage/arena_allocator.hpp +1 -1
  328. package/src/duckdb/src/include/duckdb/storage/block_manager.hpp +3 -3
  329. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +1 -1
  330. package/src/duckdb/src/include/duckdb/storage/object_cache.hpp +22 -0
  331. package/src/duckdb/src/include/duckdb/storage/single_file_block_manager.hpp +2 -0
  332. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +4 -0
  333. package/src/duckdb/src/include/duckdb/storage/table/chunk_info.hpp +3 -0
  334. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +3 -2
  335. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +1 -3
  336. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -3
  337. package/src/duckdb/src/include/duckdb.h +28 -0
  338. package/src/duckdb/src/main/capi/arrow-c.cpp +155 -1
  339. package/src/duckdb/src/main/capi/duckdb_value-c.cpp +1 -1
  340. package/src/duckdb/src/main/config.cpp +4 -0
  341. package/src/duckdb/src/main/database.cpp +1 -1
  342. package/src/duckdb/src/main/extension/extension_helper.cpp +96 -89
  343. package/src/duckdb/src/main/extension/extension_install.cpp +9 -0
  344. package/src/duckdb/src/main/extension/extension_load.cpp +10 -1
  345. package/src/duckdb/src/main/relation/cross_product_relation.cpp +4 -3
  346. package/src/duckdb/src/main/relation/join_relation.cpp +5 -5
  347. package/src/duckdb/src/main/relation.cpp +6 -5
  348. package/src/duckdb/src/main/settings/settings.cpp +79 -18
  349. package/src/duckdb/src/optimizer/column_binding_replacer.cpp +43 -0
  350. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -2
  351. package/src/duckdb/src/optimizer/compressed_materialization/compress_aggregate.cpp +140 -0
  352. package/src/duckdb/src/optimizer/compressed_materialization/compress_distinct.cpp +42 -0
  353. package/src/duckdb/src/optimizer/compressed_materialization/compress_order.cpp +65 -0
  354. package/src/duckdb/src/optimizer/compressed_materialization.cpp +478 -0
  355. package/src/duckdb/src/optimizer/deliminator.cpp +176 -321
  356. package/src/duckdb/src/optimizer/filter_pushdown.cpp +9 -0
  357. package/src/duckdb/src/optimizer/join_order/estimated_properties.cpp +7 -0
  358. package/src/duckdb/src/optimizer/join_order/join_node.cpp +2 -2
  359. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +113 -82
  360. package/src/duckdb/src/optimizer/join_order/join_relation_set.cpp +2 -6
  361. package/src/duckdb/src/optimizer/join_order/query_graph.cpp +22 -14
  362. package/src/duckdb/src/optimizer/optimizer.cpp +51 -14
  363. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +5 -5
  364. package/src/duckdb/src/optimizer/pushdown/pushdown_get.cpp +0 -1
  365. package/src/duckdb/src/optimizer/remove_duplicate_groups.cpp +127 -0
  366. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +4 -0
  367. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +154 -15
  368. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +65 -8
  369. package/src/duckdb/src/optimizer/statistics/operator/propagate_order.cpp +1 -1
  370. package/src/duckdb/src/optimizer/statistics_propagator.cpp +7 -5
  371. package/src/duckdb/src/optimizer/topn_optimizer.cpp +20 -10
  372. package/src/duckdb/src/parallel/executor.cpp +15 -0
  373. package/src/duckdb/src/parallel/task_scheduler.cpp +11 -2
  374. package/src/duckdb/src/parser/common_table_expression_info.cpp +2 -0
  375. package/src/duckdb/src/parser/expression/between_expression.cpp +3 -15
  376. package/src/duckdb/src/parser/expression/case_expression.cpp +0 -13
  377. package/src/duckdb/src/parser/expression/cast_expression.cpp +3 -14
  378. package/src/duckdb/src/parser/expression/collate_expression.cpp +3 -13
  379. package/src/duckdb/src/parser/expression/columnref_expression.cpp +3 -12
  380. package/src/duckdb/src/parser/expression/comparison_expression.cpp +3 -13
  381. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +0 -12
  382. package/src/duckdb/src/parser/expression/constant_expression.cpp +3 -11
  383. package/src/duckdb/src/parser/expression/default_expression.cpp +0 -4
  384. package/src/duckdb/src/parser/expression/function_expression.cpp +3 -32
  385. package/src/duckdb/src/parser/expression/lambda_expression.cpp +4 -14
  386. package/src/duckdb/src/parser/expression/operator_expression.cpp +0 -12
  387. package/src/duckdb/src/parser/expression/parameter_expression.cpp +0 -12
  388. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +4 -11
  389. package/src/duckdb/src/parser/expression/star_expression.cpp +0 -19
  390. package/src/duckdb/src/parser/expression/subquery_expression.cpp +0 -18
  391. package/src/duckdb/src/parser/expression/window_expression.cpp +3 -39
  392. package/src/duckdb/src/parser/parsed_expression.cpp +0 -70
  393. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +7 -0
  394. package/src/duckdb/src/parser/parser.cpp +8 -2
  395. package/src/duckdb/src/parser/query_node/cte_node.cpp +58 -0
  396. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +0 -19
  397. package/src/duckdb/src/parser/query_node/select_node.cpp +0 -29
  398. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +0 -15
  399. package/src/duckdb/src/parser/query_node.cpp +15 -37
  400. package/src/duckdb/src/parser/result_modifier.cpp +0 -74
  401. package/src/duckdb/src/parser/tableref/basetableref.cpp +0 -19
  402. package/src/duckdb/src/parser/tableref/emptytableref.cpp +0 -4
  403. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +0 -15
  404. package/src/duckdb/src/parser/tableref/joinref.cpp +3 -23
  405. package/src/duckdb/src/parser/tableref/pivotref.cpp +0 -23
  406. package/src/duckdb/src/parser/tableref/subqueryref.cpp +3 -13
  407. package/src/duckdb/src/parser/tableref/table_function.cpp +0 -15
  408. package/src/duckdb/src/parser/tableref.cpp +0 -44
  409. package/src/duckdb/src/parser/transform/expression/transform_constant.cpp +55 -3
  410. package/src/duckdb/src/parser/transform/expression/transform_expression.cpp +2 -0
  411. package/src/duckdb/src/parser/transform/expression/transform_multi_assign_reference.cpp +44 -0
  412. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +19 -1
  413. package/src/duckdb/src/parser/transform/statement/transform_copy.cpp +13 -0
  414. package/src/duckdb/src/parser/transform/statement/transform_delete.cpp +6 -1
  415. package/src/duckdb/src/parser/transform/statement/transform_insert.cpp +6 -1
  416. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +7 -2
  417. package/src/duckdb/src/parser/transform/statement/transform_pragma.cpp +14 -11
  418. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +11 -2
  419. package/src/duckdb/src/parser/transform/statement/transform_update.cpp +6 -1
  420. package/src/duckdb/src/parser/transformer.cpp +15 -0
  421. package/src/duckdb/src/planner/binder/query_node/bind_cte_node.cpp +64 -0
  422. package/src/duckdb/src/planner/binder/query_node/plan_cte_node.cpp +26 -0
  423. package/src/duckdb/src/planner/binder/query_node/plan_recursive_cte_node.cpp +5 -5
  424. package/src/duckdb/src/planner/binder/query_node/plan_setop.cpp +4 -4
  425. package/src/duckdb/src/planner/binder/query_node/plan_subquery.cpp +32 -29
  426. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +5 -4
  427. package/src/duckdb/src/planner/binder/tableref/bind_basetableref.cpp +11 -2
  428. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +32 -5
  429. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +116 -49
  430. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -1
  431. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +64 -26
  432. package/src/duckdb/src/planner/binder/tableref/plan_subqueryref.cpp +3 -3
  433. package/src/duckdb/src/planner/binder.cpp +44 -31
  434. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +1 -1
  435. package/src/duckdb/src/planner/expression_binder/lateral_binder.cpp +4 -31
  436. package/src/duckdb/src/planner/expression_binder.cpp +3 -0
  437. package/src/duckdb/src/planner/expression_iterator.cpp +6 -0
  438. package/src/duckdb/src/planner/logical_operator.cpp +5 -0
  439. package/src/duckdb/src/planner/logical_operator_visitor.cpp +2 -0
  440. package/src/duckdb/src/planner/operator/logical_cteref.cpp +3 -1
  441. package/src/duckdb/src/planner/operator/logical_dependent_join.cpp +26 -0
  442. package/src/duckdb/src/planner/operator/logical_get.cpp +9 -4
  443. package/src/duckdb/src/planner/operator/logical_materialized_cte.cpp +21 -0
  444. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +90 -38
  445. package/src/duckdb/src/planner/subquery/has_correlated_expressions.cpp +22 -7
  446. package/src/duckdb/src/planner/subquery/rewrite_correlated_expressions.cpp +65 -7
  447. package/src/duckdb/src/storage/arena_allocator.cpp +1 -2
  448. package/src/duckdb/src/storage/buffer/block_manager.cpp +3 -0
  449. package/src/duckdb/src/storage/checkpoint_manager.cpp +3 -0
  450. package/src/duckdb/src/storage/compression/rle.cpp +0 -1
  451. package/src/duckdb/src/storage/data_table.cpp +1 -1
  452. package/src/duckdb/src/storage/local_storage.cpp +3 -3
  453. package/src/duckdb/src/storage/serialization/serialize_parsed_expression.cpp +340 -0
  454. package/src/duckdb/src/storage/serialization/serialize_query_node.cpp +122 -0
  455. package/src/duckdb/src/storage/serialization/serialize_result_modifier.cpp +86 -0
  456. package/src/duckdb/src/storage/serialization/serialize_tableref.cpp +166 -0
  457. package/src/duckdb/src/storage/serialization/serialize_types.cpp +127 -0
  458. package/src/duckdb/src/storage/single_file_block_manager.cpp +23 -0
  459. package/src/duckdb/src/storage/statistics/string_stats.cpp +21 -2
  460. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  461. package/src/duckdb/src/storage/table/chunk_info.cpp +17 -0
  462. package/src/duckdb/src/storage/table/row_group.cpp +25 -9
  463. package/src/duckdb/src/storage/table/row_group_collection.cpp +19 -18
  464. package/src/duckdb/third_party/concurrentqueue/concurrentqueue.h +2 -2
  465. package/src/duckdb/third_party/concurrentqueue/lightweightsemaphore.h +76 -0
  466. package/src/duckdb/third_party/fast_float/fast_float/fast_float.h +2 -0
  467. package/src/duckdb/third_party/httplib/httplib.hpp +10 -1
  468. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +9 -0
  469. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +2 -1
  470. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +12487 -12331
  471. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +6 -6
  472. package/src/duckdb/ub_src_common.cpp +2 -0
  473. package/src/duckdb/ub_src_execution_index_art.cpp +0 -2
  474. package/src/duckdb/ub_src_execution_operator_persistent.cpp +2 -0
  475. package/src/duckdb/ub_src_execution_operator_set.cpp +2 -0
  476. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  477. package/src/duckdb/ub_src_function_scalar.cpp +2 -0
  478. package/src/duckdb/ub_src_function_scalar_compressed_materialization.cpp +4 -0
  479. package/src/duckdb/ub_src_function_scalar_list.cpp +2 -0
  480. package/src/duckdb/ub_src_optimizer.cpp +6 -0
  481. package/src/duckdb/ub_src_optimizer_compressed_materialization.cpp +6 -0
  482. package/src/duckdb/ub_src_optimizer_statistics_expression.cpp +0 -2
  483. package/src/duckdb/ub_src_parser_query_node.cpp +2 -0
  484. package/src/duckdb/ub_src_parser_transform_expression.cpp +2 -0
  485. package/src/duckdb/ub_src_planner_binder_query_node.cpp +4 -0
  486. package/src/duckdb/ub_src_planner_operator.cpp +4 -0
  487. package/src/duckdb/ub_src_storage_serialization.cpp +10 -0
  488. package/src/statement.cpp +10 -3
  489. package/test/test_all_types.test.ts +233 -0
  490. package/tsconfig.json +1 -0
  491. package/src/duckdb/src/execution/index/art/prefix_segment.cpp +0 -42
  492. package/src/duckdb/src/include/duckdb/execution/index/art/prefix_segment.hpp +0 -40
  493. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +0 -118
@@ -6,88 +6,85 @@
6
6
  #include "duckdb/main/client_context.hpp"
7
7
  #include "duckdb/main/database.hpp"
8
8
 
9
- #if defined(BUILD_ICU_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
10
- #define ICU_STATICALLY_LOADED true
11
- #include "icu_extension.hpp"
12
- #else
13
- #define ICU_STATICALLY_LOADED false
9
+ // Note that c++ preprocessor doesn't have a nice way to clean this up so we need to set the defines we use to false
10
+ // explicitly when they are undefined
11
+ #ifndef DUCKDB_EXTENSION_ICU_LINKED
12
+ #define DUCKDB_EXTENSION_ICU_LINKED false
14
13
  #endif
15
14
 
16
- #if defined(BUILD_PARQUET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
17
- #define PARQUET_STATICALLY_LOADED true
18
- #include "parquet_extension.hpp"
19
- #else
20
- #define PARQUET_STATICALLY_LOADED false
15
+ #ifndef DUCKDB_EXTENSION_PARQUET_LINKED
16
+ #define DUCKDB_EXTENSION_PARQUET_LINKED false
21
17
  #endif
22
18
 
23
- #if defined(BUILD_TPCH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
24
- #define TPCH_STATICALLY_LOADED true
25
- #include "tpch_extension.hpp"
26
- #else
27
- #define TPCH_STATICALLY_LOADED false
19
+ #ifndef DUCKDB_EXTENSION_TPCH_LINKED
20
+ #define DUCKDB_EXTENSION_TPCH_LINKED false
28
21
  #endif
29
22
 
30
- #if defined(BUILD_TPCDS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
31
- #define TPCDS_STATICALLY_LOADED true
32
- #include "tpcds_extension.hpp"
33
- #else
34
- #define TPCDS_STATICALLY_LOADED false
23
+ #ifndef DUCKDB_EXTENSION_TPCDS_LINKED
24
+ #define DUCKDB_EXTENSION_TPCDS_LINKED false
35
25
  #endif
36
26
 
37
- #if defined(BUILD_FTS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
38
- #define FTS_STATICALLY_LOADED true
39
- #include "fts_extension.hpp"
40
- #else
41
- #define FTS_STATICALLY_LOADED false
27
+ #ifndef DUCKDB_EXTENSION_FTS_LINKED
28
+ #define DUCKDB_EXTENSION_FTS_LINKED false
42
29
  #endif
43
30
 
44
- #if defined(BUILD_HTTPFS_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
45
- #define HTTPFS_STATICALLY_LOADED true
46
- #include "httpfs_extension.hpp"
47
- #else
48
- #define HTTPFS_STATICALLY_LOADED false
31
+ #ifndef DUCKDB_EXTENSION_HTTPFS_LINKED
32
+ #define DUCKDB_EXTENSION_HTTPFS_LINKED false
49
33
  #endif
50
34
 
51
- #if defined(BUILD_VISUALIZER_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
52
- #include "visualizer_extension.hpp"
35
+ #ifndef DUCKDB_EXTENSION_JSON_LINKED
36
+ #define DUCKDB_EXTENSION_JSON_LINKED false
53
37
  #endif
54
38
 
55
- #if defined(BUILD_JSON_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
56
- #define JSON_STATICALLY_LOADED true
57
- #include "json_extension.hpp"
58
- #else
59
- #define JSON_STATICALLY_LOADED false
39
+ #ifndef DUCKDB_EXTENSION_JEMALLOC_LINKED
40
+ #define DUCKDB_EXTENSION_JEMALLOC_LINKED false
60
41
  #endif
61
42
 
62
- #if defined(BUILD_JEMALLOC_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
63
- #define JEMALLOC_STATICALLY_LOADED true
64
- #include "jemalloc_extension.hpp"
43
+ #ifndef DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
44
+ #define DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED false
45
+ #endif
46
+
47
+ // Load the generated header file containing our list of extension headers
48
+ #if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS && !defined(DUCKDB_AMALGAMATION)
49
+ #include "generated_extension_loader.hpp"
65
50
  #else
66
- #define JEMALLOC_STATICALLY_LOADED false
51
+ // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that
52
+ // these can be removed
53
+ #if DUCKDB_EXTENSION_ICU_LINKED
54
+ #include "icu_extension.hpp"
67
55
  #endif
68
56
 
69
- #if defined(BUILD_EXCEL_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
70
- #include "excel_extension.hpp"
57
+ #if DUCKDB_EXTENSION_PARQUET_LINKED
58
+ #include "parquet_extension.hpp"
71
59
  #endif
72
60
 
73
- #if defined(BUILD_SQLSMITH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
74
- #include "sqlsmith_extension.hpp"
61
+ #if DUCKDB_EXTENSION_TPCH_LINKED
62
+ #include "tpch_extension.hpp"
75
63
  #endif
76
64
 
77
- #if defined(BUILD_INET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
78
- #include "inet_extension.hpp"
65
+ #if DUCKDB_EXTENSION_TPCDS_LINKED
66
+ #include "tpcds_extension.hpp"
79
67
  #endif
80
68
 
81
- #if defined(BUILD_AUTOCOMPLETE_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
82
- #define AUTOCOMPLETE_STATICALLY_LOADED true
83
- #include "autocomplete_extension.hpp"
84
- #else
85
- #define AUTOCOMPLETE_STATICALLY_LOADED false
69
+ #if DUCKDB_EXTENSION_FTS_LINKED
70
+ #include "fts_extension.hpp"
86
71
  #endif
87
72
 
88
- // Load the generated header file containing our list of extension headers
89
- #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
90
- #include "extension_oote_loader.hpp"
73
+ #if DUCKDB_EXTENSION_HTTPFS_LINKED
74
+ #include "httpfs_extension.hpp"
75
+ #endif
76
+
77
+ #if DUCKDB_EXTENSION_JSON_LINKED
78
+ #include "json_extension.hpp"
79
+ #endif
80
+
81
+ #if DUCKDB_EXTENSION_JEMALLOC_LINKED
82
+ #include "jemalloc_extension.hpp"
83
+ #endif
84
+
85
+ #if DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
86
+ #include "autocomplete_extension.hpp"
87
+ #endif
91
88
  #endif
92
89
 
93
90
  namespace duckdb {
@@ -96,15 +93,15 @@ namespace duckdb {
96
93
  // Default Extensions
97
94
  //===--------------------------------------------------------------------===//
98
95
  static DefaultExtension internal_extensions[] = {
99
- {"icu", "Adds support for time zones and collations using the ICU library", ICU_STATICALLY_LOADED},
100
- {"parquet", "Adds support for reading and writing parquet files", PARQUET_STATICALLY_LOADED},
101
- {"tpch", "Adds TPC-H data generation and query support", TPCH_STATICALLY_LOADED},
102
- {"tpcds", "Adds TPC-DS data generation and query support", TPCDS_STATICALLY_LOADED},
103
- {"fts", "Adds support for Full-Text Search Indexes", FTS_STATICALLY_LOADED},
104
- {"httpfs", "Adds support for reading and writing files over a HTTP(S) connection", HTTPFS_STATICALLY_LOADED},
105
- {"json", "Adds support for JSON operations", JSON_STATICALLY_LOADED},
106
- {"jemalloc", "Overwrites system allocator with JEMalloc", JEMALLOC_STATICALLY_LOADED},
107
- {"autocomplete", "Add supports for autocomplete in the shell", AUTOCOMPLETE_STATICALLY_LOADED},
96
+ {"icu", "Adds support for time zones and collations using the ICU library", DUCKDB_EXTENSION_ICU_LINKED},
97
+ {"parquet", "Adds support for reading and writing parquet files", DUCKDB_EXTENSION_PARQUET_LINKED},
98
+ {"tpch", "Adds TPC-H data generation and query support", DUCKDB_EXTENSION_TPCH_LINKED},
99
+ {"tpcds", "Adds TPC-DS data generation and query support", DUCKDB_EXTENSION_TPCDS_LINKED},
100
+ {"fts", "Adds support for Full-Text Search Indexes", DUCKDB_EXTENSION_FTS_LINKED},
101
+ {"httpfs", "Adds support for reading and writing files over a HTTP(S) connection", DUCKDB_EXTENSION_HTTPFS_LINKED},
102
+ {"json", "Adds support for JSON operations", DUCKDB_EXTENSION_JSON_LINKED},
103
+ {"jemalloc", "Overwrites system allocator with JEMalloc", DUCKDB_EXTENSION_JEMALLOC_LINKED},
104
+ {"autocomplete", "Add supports for autocomplete in the shell", DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED},
108
105
  {"motherduck", "Enables motherduck integration with the system", false},
109
106
  {"sqlite_scanner", "Adds support for reading SQLite database files", false},
110
107
  {"postgres_scanner", "Adds support for reading from a Postgres database", false},
@@ -143,15 +140,20 @@ bool ExtensionHelper::AllowAutoInstall(const string &extension) {
143
140
  // Load Statically Compiled Extension
144
141
  //===--------------------------------------------------------------------===//
145
142
  void ExtensionHelper::LoadAllExtensions(DuckDB &db) {
143
+ // The in-tree extensions that we check. Non-cmake builds are currently limited to these for static linking
144
+ // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds, after that
145
+ // these can be removed
146
146
  unordered_set<string> extensions {"parquet", "icu", "tpch", "tpcds", "fts", "httpfs", "visualizer",
147
147
  "json", "excel", "sqlsmith", "inet", "jemalloc", "autocomplete"};
148
148
  for (auto &ext : extensions) {
149
149
  LoadExtensionInternal(db, ext, true);
150
150
  }
151
151
 
152
- #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
153
- for (auto &ext : OOT_EXTENSIONS) {
154
- LoadExtensionInternal(db, ext, true);
152
+ #if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS
153
+ for (auto &ext : LINKED_EXTENSIONS) {
154
+ if (extensions.find(ext) != extensions.end()) {
155
+ LoadExtensionInternal(db, ext, true);
156
+ }
155
157
  }
156
158
  #endif
157
159
  }
@@ -178,105 +180,110 @@ ExtensionLoadResult ExtensionHelper::LoadExtensionInternal(DuckDB &db, const std
178
180
  return ExtensionLoadResult::LOADED_EXTENSION;
179
181
  }
180
182
  #endif
183
+
184
+ // This is the main extension loading mechanism that loads the extension that are statically linked.
185
+ #if defined(GENERATED_EXTENSION_HEADERS) && GENERATED_EXTENSION_HEADERS
186
+ if (TryLoadLinkedExtension(db, extension)) {
187
+ return ExtensionLoadResult::LOADED_EXTENSION;
188
+ } else {
189
+ return ExtensionLoadResult::NOT_LOADED;
190
+ }
191
+ #endif
192
+
193
+ // This is the fallback to the "old" extension loading mechanism for non-cmake builds
194
+ // TODO: rewrite package_build.py to allow also loading out-of-tree extensions in non-cmake builds
181
195
  if (extension == "parquet") {
182
- #if PARQUET_STATICALLY_LOADED
196
+ #if DUCKDB_EXTENSION_PARQUET_LINKED
183
197
  db.LoadExtension<ParquetExtension>();
184
198
  #else
185
199
  // parquet extension required but not build: skip this test
186
200
  return ExtensionLoadResult::NOT_LOADED;
187
201
  #endif
188
202
  } else if (extension == "icu") {
189
- #if ICU_STATICALLY_LOADED
203
+ #if DUCKDB_EXTENSION_ICU_LINKED
190
204
  db.LoadExtension<IcuExtension>();
191
205
  #else
192
206
  // icu extension required but not build: skip this test
193
207
  return ExtensionLoadResult::NOT_LOADED;
194
208
  #endif
195
209
  } else if (extension == "tpch") {
196
- #if TPCH_STATICALLY_LOADED
210
+ #if DUCKDB_EXTENSION_TPCH_LINKED
197
211
  db.LoadExtension<TpchExtension>();
198
212
  #else
199
213
  // icu extension required but not build: skip this test
200
214
  return ExtensionLoadResult::NOT_LOADED;
201
215
  #endif
202
216
  } else if (extension == "tpcds") {
203
- #if TPCDS_STATICALLY_LOADED
217
+ #if DUCKDB_EXTENSION_TPCDS_LINKED
204
218
  db.LoadExtension<TpcdsExtension>();
205
219
  #else
206
220
  // icu extension required but not build: skip this test
207
221
  return ExtensionLoadResult::NOT_LOADED;
208
222
  #endif
209
223
  } else if (extension == "fts") {
210
- #if FTS_STATICALLY_LOADED
211
- db.LoadExtension<FtsExtension>();
224
+ #if DUCKDB_EXTENSION_FTS_LINKED
225
+ // db.LoadExtension<FtsExtension>();
212
226
  #else
213
227
  // fts extension required but not build: skip this test
214
228
  return ExtensionLoadResult::NOT_LOADED;
215
229
  #endif
216
230
  } else if (extension == "httpfs") {
217
- #if HTTPFS_STATICALLY_LOADED
231
+ #if DUCKDB_EXTENSION_HTTPFS_LINKED
218
232
  db.LoadExtension<HttpfsExtension>();
219
233
  #else
220
234
  return ExtensionLoadResult::NOT_LOADED;
221
235
  #endif
222
236
  } else if (extension == "visualizer") {
223
- #if defined(BUILD_VISUALIZER_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
237
+ #if DUCKDB_EXTENSION_VISUALIZER_LINKED
224
238
  db.LoadExtension<VisualizerExtension>();
225
239
  #else
226
240
  // visualizer extension required but not build: skip this test
227
241
  return ExtensionLoadResult::NOT_LOADED;
228
242
  #endif
229
243
  } else if (extension == "json") {
230
- #if JSON_STATICALLY_LOADED
244
+ #if DUCKDB_EXTENSION_JSON_LINKED
231
245
  db.LoadExtension<JsonExtension>();
232
246
  #else
233
247
  // json extension required but not build: skip this test
234
248
  return ExtensionLoadResult::NOT_LOADED;
235
249
  #endif
236
250
  } else if (extension == "excel") {
237
- #if defined(BUILD_EXCEL_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
251
+ #if DUCKDB_EXTENSION_EXCEL_LINKED
238
252
  db.LoadExtension<ExcelExtension>();
239
253
  #else
240
254
  // excel extension required but not build: skip this test
241
255
  return ExtensionLoadResult::NOT_LOADED;
242
256
  #endif
243
257
  } else if (extension == "sqlsmith") {
244
- #if defined(BUILD_SQLSMITH_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
258
+ #if DUCKDB_EXTENSION_SQLSMITH_LINKED
245
259
  db.LoadExtension<SqlsmithExtension>();
246
260
  #else
247
261
  // excel extension required but not build: skip this test
248
262
  return ExtensionLoadResult::NOT_LOADED;
249
263
  #endif
250
264
  } else if (extension == "jemalloc") {
251
- #if defined(BUILD_JEMALLOC_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
265
+ #if DUCKDB_EXTENSION_JEMALLOC_LINKED
252
266
  db.LoadExtension<JemallocExtension>();
253
267
  #else
254
268
  // jemalloc extension required but not build: skip this test
255
269
  return ExtensionLoadResult::NOT_LOADED;
256
270
  #endif
257
271
  } else if (extension == "autocomplete") {
258
- #if defined(BUILD_AUTOCOMPLETE_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
272
+ #if DUCKDB_EXTENSION_AUTOCOMPLETE_LINKED
259
273
  db.LoadExtension<AutocompleteExtension>();
260
274
  #else
261
275
  // autocomplete extension required but not build: skip this test
262
276
  return ExtensionLoadResult::NOT_LOADED;
263
277
  #endif
264
278
  } else if (extension == "inet") {
265
- #if defined(BUILD_INET_EXTENSION) && !defined(DISABLE_BUILTIN_EXTENSIONS)
279
+ #if DUCKDB_EXTENSION_INET_LINKED
266
280
  db.LoadExtension<InetExtension>();
267
281
  #else
268
282
  // inet extension required but not build: skip this test
269
283
  return ExtensionLoadResult::NOT_LOADED;
270
284
  #endif
271
- } else {
272
-
273
- #if defined(OOTE_HEADERS_AVAILABLE) && OOTE_HEADERS_AVAILABLE
274
- if (TryLoadLinkedExtension(db, extension)) {
275
- return ExtensionLoadResult::LOADED_EXTENSION;
276
- }
277
- #endif
278
- return ExtensionLoadResult::EXTENSION_UNKNOWN;
279
285
  }
286
+
280
287
  return ExtensionLoadResult::LOADED_EXTENSION;
281
288
  }
282
289
 
@@ -4,8 +4,10 @@
4
4
  #include "duckdb/common/string_util.hpp"
5
5
 
6
6
  #ifndef DISABLE_DUCKDB_REMOTE_INSTALL
7
+ #ifndef DUCKDB_DISABLE_EXTENSION_LOAD
7
8
  #include "httplib.hpp"
8
9
  #endif
10
+ #endif
9
11
  #include "duckdb/common/windows_undefs.hpp"
10
12
 
11
13
  #include <fstream>
@@ -27,6 +29,9 @@ bool ExtensionHelper::IsRelease(const string &version_tag) {
27
29
  }
28
30
 
29
31
  const string ExtensionHelper::GetVersionDirectoryName() {
32
+ #ifdef DUCKDB_WASM_VERSION
33
+ return DUCKDB_QUOTE_DEFINE(DUCKDB_WASM_VERSION);
34
+ #endif
30
35
  if (IsRelease(DuckDB::LibraryVersion())) {
31
36
  return NormalizeVersionTag(DuckDB::LibraryVersion());
32
37
  } else {
@@ -152,6 +157,9 @@ void WriteExtensionFileToDisk(FileSystem &fs, const string &path, void *data, id
152
157
 
153
158
  void ExtensionHelper::InstallExtensionInternal(DBConfig &config, ClientConfig *client_config, FileSystem &fs,
154
159
  const string &local_path, const string &extension, bool force_install) {
160
+ #ifdef DUCKDB_DISABLE_EXTENSION_LOAD
161
+ throw PermissionException("Installing external extensions is disabled through a compile time flag");
162
+ #else
155
163
  if (!config.options.enable_external_access) {
156
164
  throw PermissionException("Installing extensions is disabled through configuration");
157
165
  }
@@ -237,6 +245,7 @@ void ExtensionHelper::InstallExtensionInternal(DBConfig &config, ClientConfig *c
237
245
  WriteExtensionFileToDisk(fs, temp_path, (void *)decompressed_body.data(), decompressed_body.size());
238
246
  fs.MoveFile(temp_path, local_extension_path);
239
247
  #endif
248
+ #endif
240
249
  }
241
250
 
242
251
  } // namespace duckdb
@@ -17,6 +17,7 @@ namespace duckdb {
17
17
  //===--------------------------------------------------------------------===//
18
18
  // Load External Extension
19
19
  //===--------------------------------------------------------------------===//
20
+ #ifndef DUCKDB_DISABLE_EXTENSION_LOAD
20
21
  typedef void (*ext_init_fun_t)(DatabaseInstance &);
21
22
  typedef const char *(*ext_version_fun_t)(void);
22
23
  typedef bool (*ext_is_storage_t)(void);
@@ -43,9 +44,13 @@ static void ComputeSHA256FileSegment(FileHandle *handle, const idx_t start, cons
43
44
 
44
45
  ComputeSHA256String(file_content, res);
45
46
  }
47
+ #endif
46
48
 
47
49
  bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const string &extension,
48
50
  ExtensionInitResult &result, string &error) {
51
+ #ifdef DUCKDB_DISABLE_EXTENSION_LOAD
52
+ throw PermissionException("Loading external extensions is disabled through a compile time flag");
53
+ #else
49
54
  if (!config.options.enable_external_access) {
50
55
  throw PermissionException("Loading external extensions is disabled through configuration");
51
56
  }
@@ -197,6 +202,7 @@ bool ExtensionHelper::TryInitialLoad(DBConfig &config, FileSystem &fs, const str
197
202
  result.filename = filename;
198
203
  result.lib_hdl = lib_hdl;
199
204
  return true;
205
+ #endif
200
206
  }
201
207
 
202
208
  ExtensionInitResult ExtensionHelper::InitialLoad(DBConfig &config, FileSystem &fs, const string &extension) {
@@ -241,7 +247,9 @@ void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileSystem &fs
241
247
  if (db.ExtensionIsLoaded(extension)) {
242
248
  return;
243
249
  }
244
-
250
+ #ifdef DUCKDB_DISABLE_EXTENSION_LOAD
251
+ throw PermissionException("Loading external extensions is disabled through a compile time flag");
252
+ #else
245
253
  auto res = InitialLoad(DBConfig::GetConfig(db), fs, extension);
246
254
  auto init_fun_name = res.basename + "_init";
247
255
 
@@ -256,6 +264,7 @@ void ExtensionHelper::LoadExternalExtension(DatabaseInstance &db, FileSystem &fs
256
264
  }
257
265
 
258
266
  db.SetExtensionLoaded(extension);
267
+ #endif
259
268
  }
260
269
 
261
270
  void ExtensionHelper::LoadExternalExtension(ClientContext &context, const string &extension) {
@@ -6,9 +6,10 @@
6
6
 
7
7
  namespace duckdb {
8
8
 
9
- CrossProductRelation::CrossProductRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> right_p)
9
+ CrossProductRelation::CrossProductRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> right_p,
10
+ JoinRefType ref_type)
10
11
  : Relation(left_p->context, RelationType::CROSS_PRODUCT_RELATION), left(std::move(left_p)),
11
- right(std::move(right_p)) {
12
+ right(std::move(right_p)), ref_type(ref_type) {
12
13
  if (left->context.GetContext() != right->context.GetContext()) {
13
14
  throw Exception("Cannot combine LEFT and RIGHT relations of different connections!");
14
15
  }
@@ -23,7 +24,7 @@ unique_ptr<QueryNode> CrossProductRelation::GetQueryNode() {
23
24
  }
24
25
 
25
26
  unique_ptr<TableRef> CrossProductRelation::GetTableRef() {
26
- auto cross_product_ref = make_uniq<JoinRef>(JoinRefType::CROSS);
27
+ auto cross_product_ref = make_uniq<JoinRef>(ref_type);
27
28
  cross_product_ref->left = left->GetTableRef();
28
29
  cross_product_ref->right = right->GetTableRef();
29
30
  return std::move(cross_product_ref);
@@ -8,9 +8,9 @@
8
8
  namespace duckdb {
9
9
 
10
10
  JoinRelation::JoinRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> right_p,
11
- unique_ptr<ParsedExpression> condition_p, JoinType type)
11
+ unique_ptr<ParsedExpression> condition_p, JoinType type, JoinRefType join_ref_type)
12
12
  : Relation(left_p->context, RelationType::JOIN_RELATION), left(std::move(left_p)), right(std::move(right_p)),
13
- condition(std::move(condition_p)), join_type(type) {
13
+ condition(std::move(condition_p)), join_type(type), join_ref_type(join_ref_type) {
14
14
  if (left->context.GetContext() != right->context.GetContext()) {
15
15
  throw Exception("Cannot combine LEFT and RIGHT relations of different connections!");
16
16
  }
@@ -18,9 +18,9 @@ JoinRelation::JoinRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> rig
18
18
  }
19
19
 
20
20
  JoinRelation::JoinRelation(shared_ptr<Relation> left_p, shared_ptr<Relation> right_p, vector<string> using_columns_p,
21
- JoinType type)
21
+ JoinType type, JoinRefType join_ref_type)
22
22
  : Relation(left_p->context, RelationType::JOIN_RELATION), left(std::move(left_p)), right(std::move(right_p)),
23
- using_columns(std::move(using_columns_p)), join_type(type) {
23
+ using_columns(std::move(using_columns_p)), join_type(type), join_ref_type(join_ref_type) {
24
24
  if (left->context.GetContext() != right->context.GetContext()) {
25
25
  throw Exception("Cannot combine LEFT and RIGHT relations of different connections!");
26
26
  }
@@ -35,7 +35,7 @@ unique_ptr<QueryNode> JoinRelation::GetQueryNode() {
35
35
  }
36
36
 
37
37
  unique_ptr<TableRef> JoinRelation::GetTableRef() {
38
- auto join_ref = make_uniq<JoinRef>(JoinRefType::REGULAR);
38
+ auto join_ref = make_uniq<JoinRef>(join_ref_type);
39
39
  join_ref->left = left->GetTableRef();
40
40
  join_ref->right = right->GetTableRef();
41
41
  if (condition) {
@@ -113,7 +113,8 @@ shared_ptr<Relation> Relation::Order(const vector<string> &expressions) {
113
113
  return make_shared<OrderRelation>(shared_from_this(), std::move(order_list));
114
114
  }
115
115
 
116
- shared_ptr<Relation> Relation::Join(const shared_ptr<Relation> &other, const string &condition, JoinType type) {
116
+ shared_ptr<Relation> Relation::Join(const shared_ptr<Relation> &other, const string &condition, JoinType type,
117
+ JoinRefType ref_type) {
117
118
  auto expression_list = Parser::ParseExpressionList(condition, context.GetContext()->GetParserOptions());
118
119
  D_ASSERT(!expression_list.empty());
119
120
 
@@ -130,15 +131,15 @@ shared_ptr<Relation> Relation::Join(const shared_ptr<Relation> &other, const str
130
131
  }
131
132
  using_columns.push_back(colref.column_names[0]);
132
133
  }
133
- return make_shared<JoinRelation>(shared_from_this(), other, std::move(using_columns), type);
134
+ return make_shared<JoinRelation>(shared_from_this(), other, std::move(using_columns), type, ref_type);
134
135
  } else {
135
136
  // single expression that is not a column reference: use the expression as a join condition
136
- return make_shared<JoinRelation>(shared_from_this(), other, std::move(expression_list[0]), type);
137
+ return make_shared<JoinRelation>(shared_from_this(), other, std::move(expression_list[0]), type, ref_type);
137
138
  }
138
139
  }
139
140
 
140
- shared_ptr<Relation> Relation::CrossProduct(const shared_ptr<Relation> &other) {
141
- return make_shared<CrossProductRelation>(shared_from_this(), other);
141
+ shared_ptr<Relation> Relation::CrossProduct(const shared_ptr<Relation> &other, JoinRefType join_ref_type) {
142
+ return make_shared<CrossProductRelation>(shared_from_this(), other, join_ref_type);
142
143
  }
143
144
 
144
145
  shared_ptr<Relation> Relation::Union(const shared_ptr<Relation> &other) {