duckdb 0.7.2-dev12.0 → 0.7.2-dev1244.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 (631) hide show
  1. package/binding.gyp +12 -7
  2. package/lib/duckdb.d.ts +55 -2
  3. package/lib/duckdb.js +20 -1
  4. package/package.json +1 -1
  5. package/src/connection.cpp +1 -2
  6. package/src/database.cpp +1 -1
  7. package/src/duckdb/extension/icu/icu-extension.cpp +4 -0
  8. package/src/duckdb/extension/icu/icu-list-range.cpp +207 -0
  9. package/src/duckdb/extension/icu/icu-table-range.cpp +194 -0
  10. package/src/duckdb/extension/icu/include/icu-list-range.hpp +17 -0
  11. package/src/duckdb/extension/icu/include/icu-table-range.hpp +17 -0
  12. package/src/duckdb/extension/icu/third_party/icu/stubdata/stubdata.cpp +1 -1
  13. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  14. package/src/duckdb/extension/json/include/json_functions.hpp +2 -0
  15. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  16. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  17. package/src/duckdb/extension/json/json_functions/read_json.cpp +6 -5
  18. package/src/duckdb/extension/json/json_functions.cpp +12 -4
  19. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  20. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  21. package/src/duckdb/extension/parquet/column_reader.cpp +94 -15
  22. package/src/duckdb/extension/parquet/column_writer.cpp +0 -1
  23. package/src/duckdb/extension/parquet/include/column_reader.hpp +1 -2
  24. package/src/duckdb/extension/parquet/include/decode_utils.hpp +5 -4
  25. package/src/duckdb/extension/parquet/include/generated_column_reader.hpp +1 -11
  26. package/src/duckdb/extension/parquet/include/parquet_timestamp.hpp +2 -1
  27. package/src/duckdb/extension/parquet/parquet-extension.cpp +14 -3
  28. package/src/duckdb/extension/parquet/parquet_reader.cpp +6 -1
  29. package/src/duckdb/extension/parquet/parquet_statistics.cpp +49 -36
  30. package/src/duckdb/extension/parquet/parquet_timestamp.cpp +16 -6
  31. package/src/duckdb/src/catalog/catalog.cpp +34 -5
  32. package/src/duckdb/src/catalog/catalog_entry/duck_schema_entry.cpp +4 -0
  33. package/src/duckdb/src/catalog/catalog_entry/duck_table_entry.cpp +2 -21
  34. package/src/duckdb/src/catalog/catalog_entry/scalar_function_catalog_entry.cpp +7 -6
  35. package/src/duckdb/src/catalog/catalog_entry/table_catalog_entry.cpp +3 -3
  36. package/src/duckdb/src/catalog/catalog_entry/table_function_catalog_entry.cpp +20 -1
  37. package/src/duckdb/src/catalog/catalog_entry/type_catalog_entry.cpp +8 -2
  38. package/src/duckdb/src/catalog/catalog_set.cpp +1 -0
  39. package/src/duckdb/src/catalog/default/default_functions.cpp +3 -0
  40. package/src/duckdb/src/catalog/dependency_list.cpp +12 -0
  41. package/src/duckdb/src/catalog/duck_catalog.cpp +34 -7
  42. package/src/duckdb/src/common/arrow/arrow_appender.cpp +48 -4
  43. package/src/duckdb/src/common/arrow/arrow_converter.cpp +1 -1
  44. package/src/duckdb/src/common/box_renderer.cpp +109 -23
  45. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  46. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  47. package/src/duckdb/src/common/enums/logical_operator_type.cpp +2 -0
  48. package/src/duckdb/src/common/enums/statement_type.cpp +2 -0
  49. package/src/duckdb/src/common/exception.cpp +15 -1
  50. package/src/duckdb/src/common/field_writer.cpp +1 -0
  51. package/src/duckdb/src/common/hive_partitioning.cpp +3 -1
  52. package/src/duckdb/src/common/local_file_system.cpp +64 -7
  53. package/src/duckdb/src/common/operator/cast_operators.cpp +1 -1
  54. package/src/duckdb/src/common/preserved_error.cpp +7 -5
  55. package/src/duckdb/src/common/progress_bar/progress_bar.cpp +7 -0
  56. package/src/duckdb/src/common/serializer/buffered_deserializer.cpp +4 -0
  57. package/src/duckdb/src/common/serializer/buffered_file_reader.cpp +15 -2
  58. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1176 -0
  59. package/src/duckdb/src/common/sort/comparators.cpp +14 -5
  60. package/src/duckdb/src/common/sort/sort_state.cpp +5 -7
  61. package/src/duckdb/src/common/sort/sorted_block.cpp +0 -1
  62. package/src/duckdb/src/common/string_util.cpp +18 -1
  63. package/src/duckdb/src/common/types/bit.cpp +166 -87
  64. package/src/duckdb/src/common/types/blob.cpp +1 -1
  65. package/src/duckdb/src/common/types/chunk_collection.cpp +2 -2
  66. package/src/duckdb/src/common/types/column_data_collection.cpp +39 -2
  67. package/src/duckdb/src/common/types/column_data_collection_segment.cpp +12 -10
  68. package/src/duckdb/src/common/types/data_chunk.cpp +1 -1
  69. package/src/duckdb/src/common/types/interval.cpp +0 -41
  70. package/src/duckdb/src/common/types/list_segment.cpp +658 -0
  71. package/src/duckdb/src/common/types/string_heap.cpp +1 -1
  72. package/src/duckdb/src/common/types/string_type.cpp +1 -1
  73. package/src/duckdb/src/common/types/time.cpp +13 -0
  74. package/src/duckdb/src/common/types/validity_mask.cpp +24 -7
  75. package/src/duckdb/src/common/types/value.cpp +320 -154
  76. package/src/duckdb/src/common/types/vector.cpp +158 -134
  77. package/src/duckdb/src/common/types.cpp +313 -153
  78. package/src/duckdb/src/common/value_operations/comparison_operations.cpp +14 -22
  79. package/src/duckdb/src/common/vector_operations/comparison_operators.cpp +10 -10
  80. package/src/duckdb/src/common/vector_operations/is_distinct_from.cpp +11 -10
  81. package/src/duckdb/src/common/vector_operations/vector_cast.cpp +2 -1
  82. package/src/duckdb/src/execution/aggregate_hashtable.cpp +98 -74
  83. package/src/duckdb/src/execution/column_binding_resolver.cpp +21 -5
  84. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  85. package/src/duckdb/src/execution/expression_executor/execute_comparison.cpp +2 -2
  86. package/src/duckdb/src/execution/index/art/art.cpp +19 -5
  87. package/src/duckdb/src/execution/join_hashtable.cpp +3 -1
  88. package/src/duckdb/src/execution/operator/aggregate/physical_hash_aggregate.cpp +1 -1
  89. package/src/duckdb/src/execution/operator/aggregate/physical_perfecthash_aggregate.cpp +4 -5
  90. package/src/duckdb/src/execution/operator/aggregate/physical_window.cpp +117 -26
  91. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  92. package/src/duckdb/src/execution/operator/helper/physical_vacuum.cpp +5 -3
  93. package/src/duckdb/src/execution/operator/join/physical_blockwise_nl_join.cpp +64 -17
  94. package/src/duckdb/src/execution/operator/join/physical_hash_join.cpp +2 -0
  95. package/src/duckdb/src/execution/operator/join/physical_iejoin.cpp +2 -2
  96. package/src/duckdb/src/execution/operator/join/physical_index_join.cpp +13 -4
  97. package/src/duckdb/src/execution/operator/join/physical_join.cpp +0 -3
  98. package/src/duckdb/src/execution/operator/join/physical_piecewise_merge_join.cpp +6 -11
  99. package/src/duckdb/src/execution/operator/join/physical_range_join.cpp +3 -1
  100. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +11 -4
  101. package/src/duckdb/src/execution/operator/persistent/buffered_csv_reader.cpp +24 -19
  102. package/src/duckdb/src/execution/operator/persistent/csv_reader_options.cpp +3 -0
  103. package/src/duckdb/src/execution/operator/persistent/physical_batch_insert.cpp +2 -1
  104. package/src/duckdb/src/execution/operator/persistent/physical_copy_to_file.cpp +2 -2
  105. package/src/duckdb/src/execution/operator/persistent/physical_delete.cpp +1 -3
  106. package/src/duckdb/src/execution/operator/persistent/physical_insert.cpp +1 -0
  107. package/src/duckdb/src/execution/operator/projection/physical_projection.cpp +34 -0
  108. package/src/duckdb/src/execution/operator/scan/physical_positional_scan.cpp +20 -5
  109. package/src/duckdb/src/execution/operator/schema/physical_create_type.cpp +20 -40
  110. package/src/duckdb/src/execution/operator/set/physical_recursive_cte.cpp +2 -5
  111. package/src/duckdb/src/execution/partitionable_hashtable.cpp +20 -5
  112. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +22 -16
  113. package/src/duckdb/src/execution/physical_plan/plan_asof_join.cpp +97 -0
  114. package/src/duckdb/src/execution/physical_plan/plan_comparison_join.cpp +95 -47
  115. package/src/duckdb/src/execution/physical_plan/plan_create_index.cpp +2 -1
  116. package/src/duckdb/src/execution/physical_plan/plan_distinct.cpp +5 -8
  117. package/src/duckdb/src/execution/physical_plan/plan_positional_join.cpp +14 -5
  118. package/src/duckdb/src/execution/physical_plan_generator.cpp +3 -0
  119. package/src/duckdb/src/execution/radix_partitioned_hashtable.cpp +23 -15
  120. package/src/duckdb/src/execution/window_segment_tree.cpp +173 -1
  121. package/src/duckdb/src/function/aggregate/algebraic/avg.cpp +0 -6
  122. package/src/duckdb/src/function/aggregate/distributive/bitagg.cpp +99 -95
  123. package/src/duckdb/src/function/aggregate/distributive/bitstring_agg.cpp +269 -0
  124. package/src/duckdb/src/function/aggregate/distributive/bool.cpp +2 -0
  125. package/src/duckdb/src/function/aggregate/distributive/count.cpp +3 -4
  126. package/src/duckdb/src/function/aggregate/distributive/first.cpp +1 -0
  127. package/src/duckdb/src/function/aggregate/distributive/minmax.cpp +2 -0
  128. package/src/duckdb/src/function/aggregate/distributive/sum.cpp +19 -16
  129. package/src/duckdb/src/function/aggregate/distributive_functions.cpp +1 -0
  130. package/src/duckdb/src/function/aggregate/holistic/approximate_quantile.cpp +5 -2
  131. package/src/duckdb/src/function/aggregate/holistic/mode.cpp +1 -1
  132. package/src/duckdb/src/function/aggregate/holistic/quantile.cpp +16 -1
  133. package/src/duckdb/src/function/aggregate/nested/list.cpp +6 -712
  134. package/src/duckdb/src/function/aggregate/sorted_aggregate_function.cpp +138 -45
  135. package/src/duckdb/src/function/cast/bit_cast.cpp +0 -2
  136. package/src/duckdb/src/function/cast/blob_cast.cpp +0 -1
  137. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  138. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  139. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  140. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  141. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  142. package/src/duckdb/src/function/cast/struct_cast.cpp +24 -4
  143. package/src/duckdb/src/function/cast/time_casts.cpp +2 -2
  144. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  145. package/src/duckdb/src/function/cast_rules.cpp +9 -4
  146. package/src/duckdb/src/function/function_binder.cpp +1 -8
  147. package/src/duckdb/src/function/pragma/pragma_queries.cpp +24 -1
  148. package/src/duckdb/src/function/scalar/bit/bitstring.cpp +100 -0
  149. package/src/duckdb/src/function/scalar/date/current.cpp +0 -2
  150. package/src/duckdb/src/function/scalar/date/date_diff.cpp +0 -1
  151. package/src/duckdb/src/function/scalar/date/date_part.cpp +18 -26
  152. package/src/duckdb/src/function/scalar/date/date_sub.cpp +0 -1
  153. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +10 -14
  154. package/src/duckdb/src/function/scalar/generic/stats.cpp +2 -4
  155. package/src/duckdb/src/function/scalar/list/contains_or_position.cpp +4 -146
  156. package/src/duckdb/src/function/scalar/list/flatten.cpp +5 -12
  157. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  158. package/src/duckdb/src/function/scalar/list/list_concat.cpp +8 -12
  159. package/src/duckdb/src/function/scalar/list/list_extract.cpp +5 -12
  160. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +7 -3
  161. package/src/duckdb/src/function/scalar/list/list_sort.cpp +25 -18
  162. package/src/duckdb/src/function/scalar/list/list_value.cpp +6 -10
  163. package/src/duckdb/src/function/scalar/map/map.cpp +47 -1
  164. package/src/duckdb/src/function/scalar/map/map_entries.cpp +61 -0
  165. package/src/duckdb/src/function/scalar/map/map_extract.cpp +68 -26
  166. package/src/duckdb/src/function/scalar/map/map_keys_values.cpp +97 -0
  167. package/src/duckdb/src/function/scalar/math/numeric.cpp +101 -17
  168. package/src/duckdb/src/function/scalar/math_functions.cpp +3 -0
  169. package/src/duckdb/src/function/scalar/nested_functions.cpp +3 -0
  170. package/src/duckdb/src/function/scalar/operators/add.cpp +0 -9
  171. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +29 -48
  172. package/src/duckdb/src/function/scalar/operators/bitwise.cpp +0 -63
  173. package/src/duckdb/src/function/scalar/operators/multiply.cpp +5 -6
  174. package/src/duckdb/src/function/scalar/operators/subtract.cpp +0 -6
  175. package/src/duckdb/src/function/scalar/string/caseconvert.cpp +2 -6
  176. package/src/duckdb/src/function/scalar/string/hex.cpp +201 -0
  177. package/src/duckdb/src/function/scalar/string/instr.cpp +2 -6
  178. package/src/duckdb/src/function/scalar/string/length.cpp +2 -6
  179. package/src/duckdb/src/function/scalar/string/like.cpp +2 -6
  180. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  181. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  182. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  183. package/src/duckdb/src/function/scalar/string/substring.cpp +2 -6
  184. package/src/duckdb/src/function/scalar/string_functions.cpp +2 -0
  185. package/src/duckdb/src/function/scalar/struct/struct_extract.cpp +5 -10
  186. package/src/duckdb/src/function/scalar/struct/struct_insert.cpp +11 -14
  187. package/src/duckdb/src/function/scalar/struct/struct_pack.cpp +6 -7
  188. package/src/duckdb/src/function/table/arrow.cpp +5 -2
  189. package/src/duckdb/src/function/table/arrow_conversion.cpp +25 -1
  190. package/src/duckdb/src/function/table/checkpoint.cpp +5 -1
  191. package/src/duckdb/src/function/table/read_csv.cpp +60 -0
  192. package/src/duckdb/src/function/table/system/duckdb_constraints.cpp +2 -2
  193. package/src/duckdb/src/function/table/system/test_all_types.cpp +2 -2
  194. package/src/duckdb/src/function/table/table_scan.cpp +9 -12
  195. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  196. package/src/duckdb/src/function/table_function.cpp +30 -11
  197. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +6 -0
  198. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/duck_table_entry.hpp +1 -1
  199. package/src/duckdb/src/include/duckdb/catalog/catalog_entry/table_function_catalog_entry.hpp +6 -8
  200. package/src/duckdb/src/include/duckdb/catalog/dependency_list.hpp +3 -0
  201. package/src/duckdb/src/include/duckdb/catalog/duck_catalog.hpp +2 -1
  202. package/src/duckdb/src/include/duckdb/common/box_renderer.hpp +8 -2
  203. package/src/duckdb/src/include/duckdb/common/constants.hpp +0 -19
  204. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  205. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  206. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +7 -4
  207. package/src/duckdb/src/include/duckdb/common/enums/logical_operator_type.hpp +1 -0
  208. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  209. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  210. package/src/duckdb/src/include/duckdb/common/enums/statement_type.hpp +2 -1
  211. package/src/duckdb/src/include/duckdb/common/enums/tableref_type.hpp +2 -1
  212. package/src/duckdb/src/include/duckdb/common/exception.hpp +69 -2
  213. package/src/duckdb/src/include/duckdb/common/field_writer.hpp +12 -4
  214. package/src/duckdb/src/include/duckdb/common/helper.hpp +1 -1
  215. package/src/duckdb/src/include/duckdb/common/{http_stats.hpp → http_state.hpp} +18 -4
  216. package/src/duckdb/src/include/duckdb/common/operator/comparison_operators.hpp +45 -149
  217. package/src/duckdb/src/include/duckdb/common/operator/multiply.hpp +2 -0
  218. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  219. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +6 -1
  220. package/src/duckdb/src/include/duckdb/common/progress_bar/progress_bar.hpp +2 -0
  221. package/src/duckdb/src/include/duckdb/common/serializer/buffered_deserializer.hpp +4 -2
  222. package/src/duckdb/src/include/duckdb/common/serializer/buffered_file_reader.hpp +8 -2
  223. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  224. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  225. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  226. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  227. package/src/duckdb/src/include/duckdb/common/serializer.hpp +13 -0
  228. package/src/duckdb/src/include/duckdb/common/string_util.hpp +27 -0
  229. package/src/duckdb/src/include/duckdb/common/types/bit.hpp +12 -7
  230. package/src/duckdb/src/include/duckdb/common/types/interval.hpp +39 -3
  231. package/src/duckdb/src/include/duckdb/common/types/list_segment.hpp +70 -0
  232. package/src/duckdb/src/include/duckdb/common/types/string_type.hpp +73 -3
  233. package/src/duckdb/src/include/duckdb/common/types/time.hpp +3 -0
  234. package/src/duckdb/src/include/duckdb/common/types/validity_mask.hpp +4 -1
  235. package/src/duckdb/src/include/duckdb/common/types/value.hpp +17 -48
  236. package/src/duckdb/src/include/duckdb/common/types/value_map.hpp +1 -1
  237. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -1
  238. package/src/duckdb/src/include/duckdb/common/types.hpp +45 -8
  239. package/src/duckdb/src/include/duckdb/common/vector_operations/unary_executor.hpp +2 -2
  240. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +35 -20
  241. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +3 -14
  242. package/src/duckdb/src/include/duckdb/execution/operator/aggregate/physical_perfecthash_aggregate.hpp +1 -1
  243. package/src/duckdb/src/include/duckdb/execution/operator/join/physical_cross_product.hpp +2 -0
  244. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_file_handle.hpp +1 -0
  245. package/src/duckdb/src/include/duckdb/execution/operator/persistent/csv_reader_options.hpp +10 -0
  246. package/src/duckdb/src/include/duckdb/execution/operator/projection/physical_projection.hpp +5 -0
  247. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +5 -1
  248. package/src/duckdb/src/include/duckdb/execution/physical_plan_generator.hpp +1 -3
  249. package/src/duckdb/src/include/duckdb/execution/window_segment_tree.hpp +54 -0
  250. package/src/duckdb/src/include/duckdb/function/aggregate/distributive_functions.hpp +5 -0
  251. package/src/duckdb/src/include/duckdb/function/aggregate_function.hpp +18 -6
  252. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  253. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  254. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  255. package/src/duckdb/src/include/duckdb/function/function_binder.hpp +3 -6
  256. package/src/duckdb/src/include/duckdb/function/scalar/bit_functions.hpp +4 -0
  257. package/src/duckdb/src/include/duckdb/function/scalar/list/contains_or_position.hpp +138 -0
  258. package/src/duckdb/src/include/duckdb/function/scalar/math_functions.hpp +8 -0
  259. package/src/duckdb/src/include/duckdb/function/scalar/nested_functions.hpp +59 -0
  260. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  261. package/src/duckdb/src/include/duckdb/function/scalar/string_functions.hpp +4 -0
  262. package/src/duckdb/src/include/duckdb/function/scalar_function.hpp +2 -2
  263. package/src/duckdb/src/include/duckdb/function/table/arrow.hpp +12 -1
  264. package/src/duckdb/src/include/duckdb/function/table_function.hpp +10 -0
  265. package/src/duckdb/src/include/duckdb/main/capi/capi_internal.hpp +2 -0
  266. package/src/duckdb/src/include/duckdb/main/client_config.hpp +2 -0
  267. package/src/duckdb/src/include/duckdb/main/client_data.hpp +3 -3
  268. package/src/duckdb/src/include/duckdb/main/config.hpp +3 -0
  269. package/src/duckdb/src/include/duckdb/main/connection_manager.hpp +2 -0
  270. package/src/duckdb/src/include/duckdb/main/database.hpp +1 -0
  271. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +2 -0
  272. package/src/duckdb/src/include/duckdb/main/prepared_statement.hpp +2 -0
  273. package/src/duckdb/src/include/duckdb/main/relation/explain_relation.hpp +2 -1
  274. package/src/duckdb/src/include/duckdb/main/relation.hpp +2 -1
  275. package/src/duckdb/src/include/duckdb/optimizer/filter_pushdown.hpp +2 -0
  276. package/src/duckdb/src/include/duckdb/optimizer/join_order/cardinality_estimator.hpp +2 -2
  277. package/src/duckdb/src/include/duckdb/optimizer/rule/list.hpp +1 -0
  278. package/src/duckdb/src/include/duckdb/optimizer/rule/ordered_aggregate_optimizer.hpp +24 -0
  279. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +4 -0
  280. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  281. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  282. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  283. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  284. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  285. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  286. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  287. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  288. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  289. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  290. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +4 -2
  291. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  292. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  293. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  294. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  295. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +4 -2
  296. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  297. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  298. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_info.hpp +5 -1
  299. package/src/duckdb/src/include/duckdb/parser/parsed_data/{alter_function_info.hpp → alter_scalar_function_info.hpp} +13 -13
  300. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_function_info.hpp +47 -0
  301. package/src/duckdb/src/include/duckdb/parser/parsed_data/alter_table_info.hpp +6 -0
  302. package/src/duckdb/src/include/duckdb/parser/parsed_data/create_table_function_info.hpp +2 -1
  303. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  304. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  305. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  306. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  307. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  308. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +13 -2
  309. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  310. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  311. package/src/duckdb/src/include/duckdb/parser/statement/multi_statement.hpp +28 -0
  312. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  313. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  314. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  315. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  316. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  317. package/src/duckdb/src/include/duckdb/parser/tableref/list.hpp +1 -0
  318. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +87 -0
  319. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  320. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  321. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  322. package/src/duckdb/src/include/duckdb/parser/tokens.hpp +2 -0
  323. package/src/duckdb/src/include/duckdb/parser/transformer.hpp +33 -0
  324. package/src/duckdb/src/include/duckdb/planner/bind_context.hpp +2 -0
  325. package/src/duckdb/src/include/duckdb/planner/binder.hpp +15 -4
  326. package/src/duckdb/src/include/duckdb/planner/bound_result_modifier.hpp +3 -0
  327. package/src/duckdb/src/include/duckdb/planner/expression/bound_aggregate_expression.hpp +3 -0
  328. package/src/duckdb/src/include/duckdb/planner/expression_binder/base_select_binder.hpp +64 -0
  329. package/src/duckdb/src/include/duckdb/planner/expression_binder/having_binder.hpp +2 -2
  330. package/src/duckdb/src/include/duckdb/planner/expression_binder/order_binder.hpp +4 -1
  331. package/src/duckdb/src/include/duckdb/planner/expression_binder/qualify_binder.hpp +2 -2
  332. package/src/duckdb/src/include/duckdb/planner/expression_binder/select_binder.hpp +9 -38
  333. package/src/duckdb/src/include/duckdb/planner/expression_binder.hpp +1 -1
  334. package/src/duckdb/src/include/duckdb/planner/logical_tokens.hpp +1 -0
  335. package/src/duckdb/src/include/duckdb/planner/operator/list.hpp +1 -0
  336. package/src/duckdb/src/include/duckdb/planner/operator/logical_asof_join.hpp +22 -0
  337. package/src/duckdb/src/include/duckdb/planner/operator/logical_comparison_join.hpp +5 -2
  338. package/src/duckdb/src/include/duckdb/planner/operator/logical_distinct.hpp +3 -0
  339. package/src/duckdb/src/include/duckdb/planner/query_node/bound_select_node.hpp +8 -2
  340. package/src/duckdb/src/include/duckdb/storage/buffer/block_handle.hpp +2 -0
  341. package/src/duckdb/src/include/duckdb/storage/buffer_manager.hpp +76 -44
  342. package/src/duckdb/src/include/duckdb/storage/checkpoint/table_data_writer.hpp +3 -2
  343. package/src/duckdb/src/include/duckdb/storage/checkpoint_manager.hpp +1 -1
  344. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_compress.hpp +2 -2
  345. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_fetch.hpp +1 -1
  346. package/src/duckdb/src/include/duckdb/storage/compression/chimp/chimp_scan.hpp +2 -1
  347. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_compress.hpp +2 -2
  348. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_fetch.hpp +1 -1
  349. package/src/duckdb/src/include/duckdb/storage/compression/patas/patas_scan.hpp +2 -1
  350. package/src/duckdb/src/include/duckdb/storage/data_pointer.hpp +4 -3
  351. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +4 -3
  352. package/src/duckdb/src/include/duckdb/storage/index.hpp +5 -4
  353. package/src/duckdb/src/include/duckdb/storage/meta_block_reader.hpp +7 -0
  354. package/src/duckdb/src/include/duckdb/storage/statistics/base_statistics.hpp +93 -29
  355. package/src/duckdb/src/include/duckdb/storage/statistics/column_statistics.hpp +22 -3
  356. package/src/duckdb/src/include/duckdb/storage/statistics/distinct_statistics.hpp +8 -6
  357. package/src/duckdb/src/include/duckdb/storage/statistics/list_stats.hpp +41 -0
  358. package/src/duckdb/src/include/duckdb/storage/statistics/node_statistics.hpp +26 -0
  359. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +114 -0
  360. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  361. package/src/duckdb/src/include/duckdb/storage/statistics/segment_statistics.hpp +2 -7
  362. package/src/duckdb/src/include/duckdb/storage/statistics/string_stats.hpp +74 -0
  363. package/src/duckdb/src/include/duckdb/storage/statistics/struct_stats.hpp +42 -0
  364. package/src/duckdb/src/include/duckdb/storage/string_uncompressed.hpp +2 -3
  365. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  366. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +21 -7
  367. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  368. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -6
  369. package/src/duckdb/src/include/duckdb/storage/table/column_segment_tree.hpp +18 -0
  370. package/src/duckdb/src/include/duckdb/storage/table/list_column_data.hpp +1 -1
  371. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +6 -3
  372. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +41 -45
  373. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +23 -7
  374. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +35 -0
  375. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +21 -29
  376. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +6 -6
  377. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +281 -26
  378. package/src/duckdb/src/include/duckdb/storage/table/standard_column_data.hpp +0 -4
  379. package/src/duckdb/src/include/duckdb/storage/table/table_statistics.hpp +5 -0
  380. package/src/duckdb/src/include/duckdb/storage/table/update_segment.hpp +0 -1
  381. package/src/duckdb/src/include/duckdb/storage/write_ahead_log.hpp +1 -1
  382. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +6 -3
  383. package/src/duckdb/src/include/duckdb.h +71 -2
  384. package/src/duckdb/src/include/duckdb.hpp +0 -1
  385. package/src/duckdb/src/main/capi/pending-c.cpp +16 -3
  386. package/src/duckdb/src/main/capi/result-c.cpp +27 -1
  387. package/src/duckdb/src/main/capi/stream-c.cpp +25 -0
  388. package/src/duckdb/src/main/capi/table_function-c.cpp +23 -0
  389. package/src/duckdb/src/main/client_context.cpp +38 -34
  390. package/src/duckdb/src/main/client_data.cpp +7 -6
  391. package/src/duckdb/src/main/config.cpp +70 -1
  392. package/src/duckdb/src/main/database.cpp +19 -2
  393. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  394. package/src/duckdb/src/main/prepared_statement.cpp +4 -0
  395. package/src/duckdb/src/main/query_profiler.cpp +17 -15
  396. package/src/duckdb/src/main/relation/explain_relation.cpp +3 -3
  397. package/src/duckdb/src/main/relation.cpp +3 -2
  398. package/src/duckdb/src/main/settings/settings.cpp +20 -8
  399. package/src/duckdb/src/optimizer/column_lifetime_analyzer.cpp +1 -0
  400. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  401. package/src/duckdb/src/optimizer/filter_combiner.cpp +3 -6
  402. package/src/duckdb/src/optimizer/filter_pullup.cpp +3 -1
  403. package/src/duckdb/src/optimizer/filter_pushdown.cpp +14 -8
  404. package/src/duckdb/src/optimizer/join_order/cardinality_estimator.cpp +107 -71
  405. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +32 -12
  406. package/src/duckdb/src/optimizer/optimizer.cpp +1 -0
  407. package/src/duckdb/src/optimizer/pullup/pullup_from_left.cpp +2 -2
  408. package/src/duckdb/src/optimizer/pushdown/pushdown_aggregate.cpp +33 -5
  409. package/src/duckdb/src/optimizer/pushdown/pushdown_cross_product.cpp +1 -1
  410. package/src/duckdb/src/optimizer/pushdown/pushdown_inner_join.cpp +3 -0
  411. package/src/duckdb/src/optimizer/pushdown/pushdown_left_join.cpp +5 -12
  412. package/src/duckdb/src/optimizer/pushdown/pushdown_mark_join.cpp +2 -2
  413. package/src/duckdb/src/optimizer/pushdown/pushdown_single_join.cpp +1 -1
  414. package/src/duckdb/src/optimizer/remove_unused_columns.cpp +1 -0
  415. package/src/duckdb/src/optimizer/rule/move_constants.cpp +10 -4
  416. package/src/duckdb/src/optimizer/rule/ordered_aggregate_optimizer.cpp +30 -0
  417. package/src/duckdb/src/optimizer/rule/regex_optimizations.cpp +9 -2
  418. package/src/duckdb/src/optimizer/statistics/expression/propagate_aggregate.cpp +9 -3
  419. package/src/duckdb/src/optimizer/statistics/expression/propagate_and_compress.cpp +6 -7
  420. package/src/duckdb/src/optimizer/statistics/expression/propagate_cast.cpp +14 -11
  421. package/src/duckdb/src/optimizer/statistics/expression/propagate_columnref.cpp +1 -1
  422. package/src/duckdb/src/optimizer/statistics/expression/propagate_comparison.cpp +13 -15
  423. package/src/duckdb/src/optimizer/statistics/expression/propagate_conjunction.cpp +0 -1
  424. package/src/duckdb/src/optimizer/statistics/expression/propagate_constant.cpp +3 -75
  425. package/src/duckdb/src/optimizer/statistics/expression/propagate_function.cpp +7 -2
  426. package/src/duckdb/src/optimizer/statistics/expression/propagate_operator.cpp +10 -0
  427. package/src/duckdb/src/optimizer/statistics/operator/propagate_aggregate.cpp +2 -3
  428. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +29 -32
  429. package/src/duckdb/src/optimizer/statistics/operator/propagate_join.cpp +5 -5
  430. package/src/duckdb/src/optimizer/statistics/operator/propagate_set_operation.cpp +3 -3
  431. package/src/duckdb/src/optimizer/statistics_propagator.cpp +2 -1
  432. package/src/duckdb/src/optimizer/unnest_rewriter.cpp +2 -2
  433. package/src/duckdb/src/parallel/meta_pipeline.cpp +0 -7
  434. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  435. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  436. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  437. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  438. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  439. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  440. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  441. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +17 -0
  442. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  443. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  444. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  445. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  446. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  447. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  448. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  449. package/src/duckdb/src/parser/expression/star_expression.cpp +26 -6
  450. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  451. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  452. package/src/duckdb/src/parser/parsed_data/alter_info.cpp +7 -3
  453. package/src/duckdb/src/parser/parsed_data/alter_scalar_function_info.cpp +56 -0
  454. package/src/duckdb/src/parser/parsed_data/alter_table_function_info.cpp +51 -0
  455. package/src/duckdb/src/parser/parsed_data/create_scalar_function_info.cpp +3 -2
  456. package/src/duckdb/src/parser/parsed_data/create_table_function_info.cpp +6 -0
  457. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  458. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  459. package/src/duckdb/src/parser/parsed_expression_iterator.cpp +15 -1
  460. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  461. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  462. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  463. package/src/duckdb/src/parser/query_node.cpp +51 -1
  464. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  465. package/src/duckdb/src/parser/statement/multi_statement.cpp +18 -0
  466. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  467. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  468. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  469. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  470. package/src/duckdb/src/parser/tableref/joinref.cpp +29 -0
  471. package/src/duckdb/src/parser/tableref/pivotref.cpp +373 -0
  472. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  473. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  474. package/src/duckdb/src/parser/tableref.cpp +49 -0
  475. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  476. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  477. package/src/duckdb/src/parser/transform/expression/transform_columnref.cpp +17 -2
  478. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +85 -42
  479. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  480. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  481. package/src/duckdb/src/parser/transform/helpers/transform_alias.cpp +12 -6
  482. package/src/duckdb/src/parser/transform/helpers/transform_cte.cpp +24 -0
  483. package/src/duckdb/src/parser/transform/helpers/transform_groupby.cpp +7 -0
  484. package/src/duckdb/src/parser/transform/helpers/transform_orderby.cpp +0 -7
  485. package/src/duckdb/src/parser/transform/helpers/transform_typename.cpp +3 -2
  486. package/src/duckdb/src/parser/transform/statement/transform_create_function.cpp +4 -0
  487. package/src/duckdb/src/parser/transform/statement/transform_create_view.cpp +4 -0
  488. package/src/duckdb/src/parser/transform/statement/transform_pivot_stmt.cpp +179 -0
  489. package/src/duckdb/src/parser/transform/statement/transform_rename.cpp +3 -4
  490. package/src/duckdb/src/parser/transform/statement/transform_select.cpp +8 -0
  491. package/src/duckdb/src/parser/transform/statement/transform_select_node.cpp +2 -3
  492. package/src/duckdb/src/parser/transform/tableref/transform_join.cpp +12 -1
  493. package/src/duckdb/src/parser/transform/tableref/transform_pivot.cpp +121 -0
  494. package/src/duckdb/src/parser/transform/tableref/transform_tableref.cpp +2 -0
  495. package/src/duckdb/src/parser/transformer.cpp +15 -3
  496. package/src/duckdb/src/planner/bind_context.cpp +18 -25
  497. package/src/duckdb/src/planner/binder/expression/bind_aggregate_expression.cpp +9 -7
  498. package/src/duckdb/src/planner/binder/expression/bind_columnref_expression.cpp +4 -3
  499. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +23 -12
  500. package/src/duckdb/src/planner/binder/expression/bind_lambda.cpp +3 -2
  501. package/src/duckdb/src/planner/binder/expression/bind_star_expression.cpp +176 -0
  502. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  503. package/src/duckdb/src/planner/binder/expression/bind_unnest_expression.cpp +163 -24
  504. package/src/duckdb/src/planner/binder/expression/bind_window_expression.cpp +2 -2
  505. package/src/duckdb/src/planner/binder/query_node/bind_select_node.cpp +109 -94
  506. package/src/duckdb/src/planner/binder/query_node/plan_query_node.cpp +11 -0
  507. package/src/duckdb/src/planner/binder/query_node/plan_select_node.cpp +9 -4
  508. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +5 -3
  509. package/src/duckdb/src/planner/binder/statement/bind_create.cpp +3 -2
  510. package/src/duckdb/src/planner/binder/statement/bind_create_table.cpp +10 -1
  511. package/src/duckdb/src/planner/binder/statement/bind_delete.cpp +1 -1
  512. package/src/duckdb/src/planner/binder/statement/bind_insert.cpp +12 -8
  513. package/src/duckdb/src/planner/binder/statement/bind_logical_plan.cpp +17 -0
  514. package/src/duckdb/src/planner/binder/statement/bind_update.cpp +4 -2
  515. package/src/duckdb/src/planner/binder/tableref/bind_joinref.cpp +19 -3
  516. package/src/duckdb/src/planner/binder/tableref/bind_pivot.cpp +366 -0
  517. package/src/duckdb/src/planner/binder/tableref/bind_table_function.cpp +11 -1
  518. package/src/duckdb/src/planner/binder/tableref/plan_cteref.cpp +1 -0
  519. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +61 -13
  520. package/src/duckdb/src/planner/binder.cpp +19 -24
  521. package/src/duckdb/src/planner/bound_result_modifier.cpp +27 -1
  522. package/src/duckdb/src/planner/expression/bound_aggregate_expression.cpp +9 -2
  523. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  524. package/src/duckdb/src/planner/expression/bound_window_expression.cpp +1 -1
  525. package/src/duckdb/src/planner/expression_binder/base_select_binder.cpp +146 -0
  526. package/src/duckdb/src/planner/expression_binder/having_binder.cpp +6 -3
  527. package/src/duckdb/src/planner/expression_binder/qualify_binder.cpp +3 -3
  528. package/src/duckdb/src/planner/expression_binder/select_binder.cpp +1 -132
  529. package/src/duckdb/src/planner/expression_binder.cpp +10 -3
  530. package/src/duckdb/src/planner/expression_iterator.cpp +17 -10
  531. package/src/duckdb/src/planner/filter/constant_filter.cpp +4 -6
  532. package/src/duckdb/src/planner/logical_operator.cpp +7 -2
  533. package/src/duckdb/src/planner/logical_operator_visitor.cpp +6 -0
  534. package/src/duckdb/src/planner/operator/logical_asof_join.cpp +8 -0
  535. package/src/duckdb/src/planner/operator/logical_distinct.cpp +3 -0
  536. package/src/duckdb/src/planner/planner.cpp +2 -1
  537. package/src/duckdb/src/planner/pragma_handler.cpp +10 -2
  538. package/src/duckdb/src/planner/subquery/flatten_dependent_join.cpp +3 -1
  539. package/src/duckdb/src/storage/buffer_manager.cpp +44 -46
  540. package/src/duckdb/src/storage/checkpoint/row_group_writer.cpp +1 -1
  541. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +4 -15
  542. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +10 -4
  543. package/src/duckdb/src/storage/checkpoint_manager.cpp +9 -3
  544. package/src/duckdb/src/storage/compression/bitpacking.cpp +29 -25
  545. package/src/duckdb/src/storage/compression/fixed_size_uncompressed.cpp +45 -46
  546. package/src/duckdb/src/storage/compression/numeric_constant.cpp +10 -11
  547. package/src/duckdb/src/storage/compression/patas.cpp +1 -1
  548. package/src/duckdb/src/storage/compression/rle.cpp +20 -15
  549. package/src/duckdb/src/storage/compression/validity_uncompressed.cpp +6 -6
  550. package/src/duckdb/src/storage/data_table.cpp +23 -23
  551. package/src/duckdb/src/storage/index.cpp +12 -1
  552. package/src/duckdb/src/storage/local_storage.cpp +27 -23
  553. package/src/duckdb/src/storage/meta_block_reader.cpp +22 -0
  554. package/src/duckdb/src/storage/statistics/base_statistics.cpp +373 -128
  555. package/src/duckdb/src/storage/statistics/column_statistics.cpp +57 -3
  556. package/src/duckdb/src/storage/statistics/distinct_statistics.cpp +8 -9
  557. package/src/duckdb/src/storage/statistics/list_stats.cpp +121 -0
  558. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +591 -0
  559. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  560. package/src/duckdb/src/storage/statistics/segment_statistics.cpp +2 -11
  561. package/src/duckdb/src/storage/statistics/string_stats.cpp +273 -0
  562. package/src/duckdb/src/storage/statistics/struct_stats.cpp +133 -0
  563. package/src/duckdb/src/storage/storage_info.cpp +2 -2
  564. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +4 -10
  565. package/src/duckdb/src/storage/table/column_data.cpp +118 -62
  566. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +10 -9
  567. package/src/duckdb/src/storage/table/column_segment.cpp +30 -45
  568. package/src/duckdb/src/storage/table/list_column_data.cpp +50 -71
  569. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  570. package/src/duckdb/src/storage/table/row_group.cpp +213 -143
  571. package/src/duckdb/src/storage/table/row_group_collection.cpp +151 -105
  572. package/src/duckdb/src/storage/table/scan_state.cpp +45 -33
  573. package/src/duckdb/src/storage/table/standard_column_data.cpp +11 -12
  574. package/src/duckdb/src/storage/table/struct_column_data.cpp +27 -34
  575. package/src/duckdb/src/storage/table/table_statistics.cpp +27 -7
  576. package/src/duckdb/src/storage/table/update_segment.cpp +23 -18
  577. package/src/duckdb/src/storage/wal_replay.cpp +8 -5
  578. package/src/duckdb/src/storage/write_ahead_log.cpp +2 -2
  579. package/src/duckdb/src/transaction/commit_state.cpp +11 -7
  580. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  581. package/src/duckdb/third_party/libpg_query/include/nodes/nodes.hpp +35 -0
  582. package/src/duckdb/third_party/libpg_query/include/nodes/parsenodes.hpp +36 -2
  583. package/src/duckdb/third_party/libpg_query/include/nodes/primnodes.hpp +3 -3
  584. package/src/duckdb/third_party/libpg_query/include/parser/gram.hpp +1022 -530
  585. package/src/duckdb/third_party/libpg_query/include/parser/kwlist.hpp +8 -0
  586. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +24462 -22828
  587. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  588. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  589. package/src/duckdb/ub_extension_icu_third_party_icu_i18n.cpp +4 -4
  590. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  591. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  592. package/src/duckdb/ub_src_common_types.cpp +2 -0
  593. package/src/duckdb/ub_src_execution_physical_plan.cpp +2 -0
  594. package/src/duckdb/ub_src_function_aggregate_distributive.cpp +2 -0
  595. package/src/duckdb/ub_src_function_scalar_bit.cpp +2 -0
  596. package/src/duckdb/ub_src_function_scalar_map.cpp +4 -0
  597. package/src/duckdb/ub_src_function_scalar_string.cpp +2 -0
  598. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  599. package/src/duckdb/ub_src_main_capi.cpp +2 -0
  600. package/src/duckdb/ub_src_optimizer_rule.cpp +2 -0
  601. package/src/duckdb/ub_src_parser.cpp +2 -0
  602. package/src/duckdb/ub_src_parser_parsed_data.cpp +4 -2
  603. package/src/duckdb/ub_src_parser_statement.cpp +2 -0
  604. package/src/duckdb/ub_src_parser_tableref.cpp +2 -0
  605. package/src/duckdb/ub_src_parser_transform_statement.cpp +2 -0
  606. package/src/duckdb/ub_src_parser_transform_tableref.cpp +2 -0
  607. package/src/duckdb/ub_src_planner_binder_expression.cpp +2 -0
  608. package/src/duckdb/ub_src_planner_binder_tableref.cpp +2 -0
  609. package/src/duckdb/ub_src_planner_expression_binder.cpp +2 -0
  610. package/src/duckdb/ub_src_planner_operator.cpp +2 -0
  611. package/src/duckdb/ub_src_storage_statistics.cpp +6 -6
  612. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  613. package/src/duckdb_node.hpp +2 -1
  614. package/src/statement.cpp +5 -5
  615. package/src/utils.cpp +27 -2
  616. package/test/extension.test.ts +44 -26
  617. package/test/syntax_error.test.ts +3 -1
  618. package/filelist.cache +0 -0
  619. package/src/duckdb/src/include/duckdb/main/loadable_extension.hpp +0 -59
  620. package/src/duckdb/src/include/duckdb/storage/statistics/list_statistics.hpp +0 -36
  621. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_statistics.hpp +0 -75
  622. package/src/duckdb/src/include/duckdb/storage/statistics/string_statistics.hpp +0 -49
  623. package/src/duckdb/src/include/duckdb/storage/statistics/struct_statistics.hpp +0 -36
  624. package/src/duckdb/src/include/duckdb/storage/statistics/validity_statistics.hpp +0 -45
  625. package/src/duckdb/src/parser/parsed_data/alter_function_info.cpp +0 -55
  626. package/src/duckdb/src/storage/statistics/list_statistics.cpp +0 -94
  627. package/src/duckdb/src/storage/statistics/numeric_statistics.cpp +0 -307
  628. package/src/duckdb/src/storage/statistics/string_statistics.cpp +0 -220
  629. package/src/duckdb/src/storage/statistics/struct_statistics.cpp +0 -108
  630. package/src/duckdb/src/storage/statistics/validity_statistics.cpp +0 -91
  631. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -1,7 +1,9 @@
1
1
  #include "duckdb/common/types.hpp"
2
2
 
3
3
  #include "duckdb/catalog/catalog.hpp"
4
+ #include "duckdb/catalog/catalog_entry/schema_catalog_entry.hpp"
4
5
  #include "duckdb/catalog/catalog_entry/type_catalog_entry.hpp"
6
+ #include "duckdb/catalog/catalog_search_path.hpp"
5
7
  #include "duckdb/catalog/default/default_types.hpp"
6
8
  #include "duckdb/common/exception.hpp"
7
9
  #include "duckdb/common/field_writer.hpp"
@@ -17,9 +19,18 @@
17
19
  #include "duckdb/common/types/vector.hpp"
18
20
  #include "duckdb/common/unordered_map.hpp"
19
21
  #include "duckdb/function/cast_rules.hpp"
22
+ #include "duckdb/main/attached_database.hpp"
23
+ #include "duckdb/main/client_context.hpp"
24
+ #include "duckdb/main/client_data.hpp"
25
+ #include "duckdb/main/database.hpp"
26
+ #include "duckdb/main/database_manager.hpp"
20
27
  #include "duckdb/parser/keyword_helper.hpp"
21
28
  #include "duckdb/parser/parser.hpp"
22
29
 
30
+ #include "duckdb/common/serializer/format_deserializer.hpp"
31
+ #include "duckdb/common/serializer/enum_serializer.hpp"
32
+ #include "duckdb/common/serializer/format_serializer.hpp"
33
+
23
34
  #include <cmath>
24
35
 
25
36
  namespace duckdb {
@@ -320,95 +331,8 @@ bool TypeIsInteger(PhysicalType type) {
320
331
  return (type >= PhysicalType::UINT8 && type <= PhysicalType::INT64) || type == PhysicalType::INT128;
321
332
  }
322
333
 
323
- // LCOV_EXCL_START
324
334
  string LogicalTypeIdToString(LogicalTypeId id) {
325
- switch (id) {
326
- case LogicalTypeId::BOOLEAN:
327
- return "BOOLEAN";
328
- case LogicalTypeId::TINYINT:
329
- return "TINYINT";
330
- case LogicalTypeId::SMALLINT:
331
- return "SMALLINT";
332
- case LogicalTypeId::INTEGER:
333
- return "INTEGER";
334
- case LogicalTypeId::BIGINT:
335
- return "BIGINT";
336
- case LogicalTypeId::HUGEINT:
337
- return "HUGEINT";
338
- case LogicalTypeId::UUID:
339
- return "UUID";
340
- case LogicalTypeId::UTINYINT:
341
- return "UTINYINT";
342
- case LogicalTypeId::USMALLINT:
343
- return "USMALLINT";
344
- case LogicalTypeId::UINTEGER:
345
- return "UINTEGER";
346
- case LogicalTypeId::UBIGINT:
347
- return "UBIGINT";
348
- case LogicalTypeId::DATE:
349
- return "DATE";
350
- case LogicalTypeId::TIME:
351
- return "TIME";
352
- case LogicalTypeId::TIMESTAMP:
353
- return "TIMESTAMP";
354
- case LogicalTypeId::TIMESTAMP_MS:
355
- return "TIMESTAMP_MS";
356
- case LogicalTypeId::TIMESTAMP_NS:
357
- return "TIMESTAMP_NS";
358
- case LogicalTypeId::TIMESTAMP_SEC:
359
- return "TIMESTAMP_S";
360
- case LogicalTypeId::TIMESTAMP_TZ:
361
- return "TIMESTAMP WITH TIME ZONE";
362
- case LogicalTypeId::TIME_TZ:
363
- return "TIME WITH TIME ZONE";
364
- case LogicalTypeId::FLOAT:
365
- return "FLOAT";
366
- case LogicalTypeId::DOUBLE:
367
- return "DOUBLE";
368
- case LogicalTypeId::DECIMAL:
369
- return "DECIMAL";
370
- case LogicalTypeId::VARCHAR:
371
- return "VARCHAR";
372
- case LogicalTypeId::BLOB:
373
- return "BLOB";
374
- case LogicalTypeId::CHAR:
375
- return "CHAR";
376
- case LogicalTypeId::INTERVAL:
377
- return "INTERVAL";
378
- case LogicalTypeId::SQLNULL:
379
- return "NULL";
380
- case LogicalTypeId::ANY:
381
- return "ANY";
382
- case LogicalTypeId::VALIDITY:
383
- return "VALIDITY";
384
- case LogicalTypeId::STRUCT:
385
- return "STRUCT";
386
- case LogicalTypeId::LIST:
387
- return "LIST";
388
- case LogicalTypeId::MAP:
389
- return "MAP";
390
- case LogicalTypeId::POINTER:
391
- return "POINTER";
392
- case LogicalTypeId::TABLE:
393
- return "TABLE";
394
- case LogicalTypeId::LAMBDA:
395
- return "LAMBDA";
396
- case LogicalTypeId::INVALID:
397
- return "INVALID";
398
- case LogicalTypeId::UNION:
399
- return "UNION";
400
- case LogicalTypeId::UNKNOWN:
401
- return "UNKNOWN";
402
- case LogicalTypeId::ENUM:
403
- return "ENUM";
404
- case LogicalTypeId::AGGREGATE_STATE:
405
- return "AGGREGATE_STATE";
406
- case LogicalTypeId::USER:
407
- return "USER";
408
- case LogicalTypeId::BIT:
409
- return "BIT";
410
- }
411
- return "UNDEFINED";
335
+ return EnumSerializer::EnumToString(id);
412
336
  }
413
337
 
414
338
  string LogicalType::ToString() const {
@@ -515,7 +439,7 @@ LogicalType GetUserTypeRecursive(const LogicalType &type, ClientContext &context
515
439
  for (auto &child : StructType::GetChildTypes(type)) {
516
440
  children.emplace_back(child.first, GetUserTypeRecursive(child.second, context));
517
441
  }
518
- return LogicalType::STRUCT(std::move(children));
442
+ return LogicalType::STRUCT(children);
519
443
  }
520
444
  if (type.id() == LogicalTypeId::LIST) {
521
445
  return LogicalType::LIST(GetUserTypeRecursive(ListType::GetChildType(type), context));
@@ -766,12 +690,12 @@ LogicalType LogicalType::MaxLogicalType(const LogicalType &left, const LogicalTy
766
690
  if (type_id == LogicalTypeId::LIST) {
767
691
  // list: perform max recursively on child type
768
692
  auto new_child = MaxLogicalType(ListType::GetChildType(left), ListType::GetChildType(right));
769
- return LogicalType::LIST(std::move(new_child));
693
+ return LogicalType::LIST(new_child);
770
694
  }
771
695
  if (type_id == LogicalTypeId::MAP) {
772
696
  // list: perform max recursively on child type
773
697
  auto new_child = MaxLogicalType(ListType::GetChildType(left), ListType::GetChildType(right));
774
- return LogicalType::MAP(std::move(new_child));
698
+ return LogicalType::MAP(new_child);
775
699
  }
776
700
  if (type_id == LogicalTypeId::STRUCT) {
777
701
  // struct: perform recursively
@@ -785,10 +709,10 @@ LogicalType LogicalType::MaxLogicalType(const LogicalType &left, const LogicalTy
785
709
  child_list_t<LogicalType> child_types;
786
710
  for (idx_t i = 0; i < left_child_types.size(); i++) {
787
711
  auto child_type = MaxLogicalType(left_child_types[i].second, right_child_types[i].second);
788
- child_types.push_back(make_pair(left_child_types[i].first, std::move(child_type)));
712
+ child_types.emplace_back(left_child_types[i].first, std::move(child_type));
789
713
  }
790
714
 
791
- return LogicalType::STRUCT(std::move(child_types));
715
+ return LogicalType::STRUCT(child_types);
792
716
  }
793
717
  if (type_id == LogicalTypeId::UNION) {
794
718
  auto left_member_count = UnionType::GetMemberCount(left);
@@ -797,7 +721,7 @@ LogicalType LogicalType::MaxLogicalType(const LogicalType &left, const LogicalTy
797
721
  // return the "larger" type, with the most members
798
722
  return left_member_count > right_member_count ? left : right;
799
723
  }
800
- // otherwise, keep left, dont try to meld the two together.
724
+ // otherwise, keep left, don't try to meld the two together.
801
725
  return left;
802
726
  }
803
727
  // types are equal but no extra specifier: just return the type
@@ -838,17 +762,6 @@ bool ApproxEqual(double ldecimal, double rdecimal) {
838
762
  //===--------------------------------------------------------------------===//
839
763
  // Extra Type Info
840
764
  //===--------------------------------------------------------------------===//
841
- enum class ExtraTypeInfoType : uint8_t {
842
- INVALID_TYPE_INFO = 0,
843
- GENERIC_TYPE_INFO = 1,
844
- DECIMAL_TYPE_INFO = 2,
845
- STRING_TYPE_INFO = 3,
846
- LIST_TYPE_INFO = 4,
847
- STRUCT_TYPE_INFO = 5,
848
- ENUM_TYPE_INFO = 6,
849
- USER_TYPE_INFO = 7,
850
- AGGREGATE_STATE_TYPE_INFO = 8
851
- };
852
765
 
853
766
  struct ExtraTypeInfo {
854
767
  explicit ExtraTypeInfo(ExtraTypeInfoType type) : type(type) {
@@ -887,12 +800,16 @@ public:
887
800
  return alias == other_p->alias && EqualsInternal(other_p);
888
801
  }
889
802
  //! Serializes a ExtraTypeInfo to a stand-alone binary blob
890
- virtual void Serialize(FieldWriter &writer) const {};
803
+ virtual void Serialize(FieldWriter &writer) const {
804
+ }
891
805
  //! Serializes a ExtraTypeInfo to a stand-alone binary blob
892
806
  static void Serialize(ExtraTypeInfo *info, FieldWriter &writer);
893
807
  //! Deserializes a blob back into an ExtraTypeInfo
894
808
  static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader);
895
809
 
810
+ virtual void FormatSerialize(FormatSerializer &serializer) const;
811
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source);
812
+
896
813
  protected:
897
814
  virtual bool EqualsInternal(ExtraTypeInfo *other_p) const {
898
815
  // Do nothing
@@ -941,6 +858,10 @@ TypeCatalogEntry *LogicalType::GetCatalog(const LogicalType &type) {
941
858
  return ((ExtraTypeInfo &)*info).catalog_entry;
942
859
  }
943
860
 
861
+ ExtraTypeInfoType LogicalType::GetExtraTypeInfoType(const ExtraTypeInfo &type) {
862
+ return type.type;
863
+ }
864
+
944
865
  //===--------------------------------------------------------------------===//
945
866
  // Decimal Type
946
867
  //===--------------------------------------------------------------------===//
@@ -959,6 +880,18 @@ public:
959
880
  writer.WriteField<uint8_t>(scale);
960
881
  }
961
882
 
883
+ void FormatSerialize(FormatSerializer &serializer) const override {
884
+ ExtraTypeInfo::FormatSerialize(serializer);
885
+ serializer.WriteProperty("width", width);
886
+ serializer.WriteProperty("scale", scale);
887
+ }
888
+
889
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
890
+ auto width = source.ReadProperty<uint8_t>("width");
891
+ auto scale = source.ReadProperty<uint8_t>("scale");
892
+ return make_shared<DecimalTypeInfo>(width, scale);
893
+ }
894
+
962
895
  static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
963
896
  auto width = reader.ReadRequired<uint8_t>();
964
897
  auto scale = reader.ReadRequired<uint8_t>();
@@ -1016,6 +949,16 @@ public:
1016
949
  return make_shared<StringTypeInfo>(std::move(collation));
1017
950
  }
1018
951
 
952
+ void FormatSerialize(FormatSerializer &serializer) const override {
953
+ ExtraTypeInfo::FormatSerialize(serializer);
954
+ serializer.WriteProperty("collation", collation);
955
+ }
956
+
957
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
958
+ auto collation = source.ReadProperty<string>("collation");
959
+ return make_shared<StringTypeInfo>(std::move(collation));
960
+ }
961
+
1019
962
  protected:
1020
963
  bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1021
964
  // collation info has no impact on equality
@@ -1057,11 +1000,21 @@ public:
1057
1000
  writer.WriteSerializable(child_type);
1058
1001
  }
1059
1002
 
1003
+ void FormatSerialize(FormatSerializer &serializer) const override {
1004
+ ExtraTypeInfo::FormatSerialize(serializer);
1005
+ serializer.WriteProperty("child_type", child_type);
1006
+ }
1007
+
1060
1008
  static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1061
1009
  auto child_type = reader.ReadRequiredSerializable<LogicalType, LogicalType>();
1062
1010
  return make_shared<ListTypeInfo>(std::move(child_type));
1063
1011
  }
1064
1012
 
1013
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
1014
+ auto child_type = source.ReadProperty<LogicalType>("child_type");
1015
+ return make_shared<ListTypeInfo>(std::move(child_type));
1016
+ }
1017
+
1065
1018
  protected:
1066
1019
  bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1067
1020
  auto &other = (ListTypeInfo &)*other_p;
@@ -1076,8 +1029,8 @@ const LogicalType &ListType::GetChildType(const LogicalType &type) {
1076
1029
  return ((ListTypeInfo &)*info).child_type;
1077
1030
  }
1078
1031
 
1079
- LogicalType LogicalType::LIST(LogicalType child) {
1080
- auto info = make_shared<ListTypeInfo>(std::move(child));
1032
+ LogicalType LogicalType::LIST(const LogicalType &child) {
1033
+ auto info = make_shared<ListTypeInfo>(child);
1081
1034
  return LogicalType(LogicalTypeId::LIST, std::move(info));
1082
1035
  }
1083
1036
 
@@ -1101,6 +1054,11 @@ public:
1101
1054
  }
1102
1055
  }
1103
1056
 
1057
+ void FormatSerialize(FormatSerializer &serializer) const override {
1058
+ ExtraTypeInfo::FormatSerialize(serializer);
1059
+ serializer.WriteProperty("child_types", child_types);
1060
+ }
1061
+
1104
1062
  static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1105
1063
  child_list_t<LogicalType> child_list;
1106
1064
  auto child_types_size = reader.ReadRequired<uint32_t>();
@@ -1108,11 +1066,16 @@ public:
1108
1066
  for (uint32_t i = 0; i < child_types_size; i++) {
1109
1067
  auto name = source.Read<string>();
1110
1068
  auto type = LogicalType::Deserialize(source);
1111
- child_list.push_back(make_pair(std::move(name), std::move(type)));
1069
+ child_list.emplace_back(std::move(name), std::move(type));
1112
1070
  }
1113
1071
  return make_shared<StructTypeInfo>(std::move(child_list));
1114
1072
  }
1115
1073
 
1074
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &deserializer) {
1075
+ auto child_types = deserializer.ReadProperty<child_list_t<LogicalType>>("child_types");
1076
+ return make_shared<StructTypeInfo>(std::move(child_types));
1077
+ }
1078
+
1116
1079
  protected:
1117
1080
  bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1118
1081
  auto &other = (StructTypeInfo &)*other_p;
@@ -1138,6 +1101,21 @@ public:
1138
1101
  }
1139
1102
  }
1140
1103
 
1104
+ void FormatSerialize(FormatSerializer &serializer) const override {
1105
+ ExtraTypeInfo::FormatSerialize(serializer);
1106
+ serializer.WriteProperty("function_name", state_type.function_name);
1107
+ serializer.WriteProperty("return_type", state_type.return_type);
1108
+ serializer.WriteProperty("bound_argument_types", state_type.bound_argument_types);
1109
+ }
1110
+
1111
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
1112
+ auto function_name = source.ReadProperty<string>("function_name");
1113
+ auto return_type = source.ReadProperty<LogicalType>("return_type");
1114
+ auto bound_argument_types = source.ReadProperty<vector<LogicalType>>("bound_argument_types");
1115
+ return make_shared<AggregateStateTypeInfo>(
1116
+ aggregate_state_t(std::move(function_name), std::move(return_type), std::move(bound_argument_types)));
1117
+ }
1118
+
1141
1119
  static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1142
1120
  auto &source = reader.GetSource();
1143
1121
 
@@ -1207,8 +1185,8 @@ idx_t StructType::GetChildCount(const LogicalType &type) {
1207
1185
  return StructType::GetChildTypes(type).size();
1208
1186
  }
1209
1187
 
1210
- LogicalType LogicalType::STRUCT(child_list_t<LogicalType> children) {
1211
- auto info = make_shared<StructTypeInfo>(std::move(children));
1188
+ LogicalType LogicalType::STRUCT(const child_list_t<LogicalType> &children) {
1189
+ auto info = make_shared<StructTypeInfo>(children);
1212
1190
  return LogicalType(LogicalTypeId::STRUCT, std::move(info));
1213
1191
  }
1214
1192
 
@@ -1220,16 +1198,16 @@ LogicalType LogicalType::AGGREGATE_STATE(aggregate_state_t state_type) { // NOLI
1220
1198
  //===--------------------------------------------------------------------===//
1221
1199
  // Map Type
1222
1200
  //===--------------------------------------------------------------------===//
1223
- LogicalType LogicalType::MAP(LogicalType child) {
1224
- auto info = make_shared<ListTypeInfo>(std::move(child));
1201
+ LogicalType LogicalType::MAP(const LogicalType &child) {
1202
+ auto info = make_shared<ListTypeInfo>(child);
1225
1203
  return LogicalType(LogicalTypeId::MAP, std::move(info));
1226
1204
  }
1227
1205
 
1228
1206
  LogicalType LogicalType::MAP(LogicalType key, LogicalType value) {
1229
1207
  child_list_t<LogicalType> child_types;
1230
- child_types.push_back({"key", std::move(key)});
1231
- child_types.push_back({"value", std::move(value)});
1232
- return LogicalType::MAP(LogicalType::STRUCT(std::move(child_types)));
1208
+ child_types.emplace_back("key", std::move(key));
1209
+ child_types.emplace_back("value", std::move(value));
1210
+ return LogicalType::MAP(LogicalType::STRUCT(child_types));
1233
1211
  }
1234
1212
 
1235
1213
  const LogicalType &MapType::KeyType(const LogicalType &type) {
@@ -1247,7 +1225,7 @@ const LogicalType &MapType::ValueType(const LogicalType &type) {
1247
1225
  //===--------------------------------------------------------------------===//
1248
1226
 
1249
1227
  LogicalType LogicalType::UNION(child_list_t<LogicalType> members) {
1250
- D_ASSERT(members.size() > 0);
1228
+ D_ASSERT(!members.empty());
1251
1229
  D_ASSERT(members.size() <= UnionType::MAX_UNION_MEMBERS);
1252
1230
  // union types always have a hidden "tag" field in front
1253
1231
  members.insert(members.begin(), {"", LogicalType::TINYINT});
@@ -1270,7 +1248,7 @@ const string &UnionType::GetMemberName(const LogicalType &type, idx_t index) {
1270
1248
  }
1271
1249
 
1272
1250
  idx_t UnionType::GetMemberCount(const LogicalType &type) {
1273
- // dont count the "tag" field
1251
+ // don't count the "tag" field
1274
1252
  return StructType::GetChildTypes(type).size() - 1;
1275
1253
  }
1276
1254
  const child_list_t<LogicalType> UnionType::CopyMemberTypes(const LogicalType &type) {
@@ -1294,11 +1272,21 @@ public:
1294
1272
  writer.WriteString(user_type_name);
1295
1273
  }
1296
1274
 
1275
+ void FormatSerialize(FormatSerializer &serializer) const override {
1276
+ ExtraTypeInfo::FormatSerialize(serializer);
1277
+ serializer.WriteProperty("user_type_name", user_type_name);
1278
+ }
1279
+
1297
1280
  static shared_ptr<ExtraTypeInfo> Deserialize(FieldReader &reader) {
1298
1281
  auto enum_name = reader.ReadRequired<string>();
1299
1282
  return make_shared<UserTypeInfo>(std::move(enum_name));
1300
1283
  }
1301
1284
 
1285
+ static shared_ptr<ExtraTypeInfo> FormatDeserialize(FormatDeserializer &source) {
1286
+ auto enum_name = source.ReadProperty<string>("user_type_name");
1287
+ return make_shared<UserTypeInfo>(std::move(enum_name));
1288
+ }
1289
+
1302
1290
  protected:
1303
1291
  bool EqualsInternal(ExtraTypeInfo *other_p) const override {
1304
1292
  auto &other = (UserTypeInfo &)*other_p;
@@ -1326,13 +1314,27 @@ enum EnumDictType : uint8_t { INVALID = 0, VECTOR_DICT = 1 };
1326
1314
 
1327
1315
  struct EnumTypeInfo : public ExtraTypeInfo {
1328
1316
  explicit EnumTypeInfo(string enum_name_p, Vector &values_insert_order_p, idx_t dict_size_p)
1329
- : ExtraTypeInfo(ExtraTypeInfoType::ENUM_TYPE_INFO), dict_type(EnumDictType::VECTOR_DICT),
1330
- enum_name(std::move(enum_name_p)), values_insert_order(values_insert_order_p), dict_size(dict_size_p) {
1331
- }
1332
- EnumDictType dict_type;
1333
- string enum_name;
1334
- Vector values_insert_order;
1335
- idx_t dict_size;
1317
+ : ExtraTypeInfo(ExtraTypeInfoType::ENUM_TYPE_INFO), values_insert_order(values_insert_order_p),
1318
+ dict_type(EnumDictType::VECTOR_DICT), enum_name(std::move(enum_name_p)), dict_size(dict_size_p) {
1319
+ }
1320
+
1321
+ const EnumDictType &GetEnumDictType() {
1322
+ return dict_type;
1323
+ };
1324
+ const string &GetEnumName() {
1325
+ return enum_name;
1326
+ };
1327
+ const string GetSchemaName() const {
1328
+ return catalog_entry ? catalog_entry->schema->name : "";
1329
+ };
1330
+ const Vector &GetValuesInsertOrder() {
1331
+ return values_insert_order;
1332
+ };
1333
+ const idx_t &GetDictSize() {
1334
+ return dict_size;
1335
+ };
1336
+ EnumTypeInfo(const EnumTypeInfo &) = delete;
1337
+ EnumTypeInfo &operator=(const EnumTypeInfo &) = delete;
1336
1338
 
1337
1339
  protected:
1338
1340
  // Equalities are only used in enums with different catalog entries
@@ -1362,12 +1364,45 @@ protected:
1362
1364
  if (dict_type != EnumDictType::VECTOR_DICT) {
1363
1365
  throw InternalException("Cannot serialize non-vector dictionary ENUM types");
1364
1366
  }
1365
- writer.WriteField<uint32_t>(dict_size);
1366
- writer.WriteString(enum_name);
1367
- ((Vector &)values_insert_order).Serialize(dict_size, writer.GetSerializer());
1367
+ bool serialize_internals = GetSchemaName().empty() || writer.GetSerializer().is_query_plan;
1368
+ EnumType::Serialize(writer, *this, serialize_internals);
1369
+ }
1370
+
1371
+ void FormatSerialize(FormatSerializer &serializer) const override {
1372
+ ExtraTypeInfo::FormatSerialize(serializer);
1373
+ serializer.WriteProperty("dict_size", dict_size);
1374
+ serializer.WriteProperty("enum_name", enum_name);
1375
+ ((Vector &)values_insert_order).FormatSerialize(serializer, dict_size);
1368
1376
  }
1377
+ Vector values_insert_order;
1378
+
1379
+ private:
1380
+ EnumDictType dict_type;
1381
+ string enum_name;
1382
+ idx_t dict_size;
1369
1383
  };
1370
1384
 
1385
+ // If this type is primarily stored in the catalog or not. Enums from Pandas/Factors are not in the catalog.
1386
+
1387
+ void EnumType::Serialize(FieldWriter &writer, const ExtraTypeInfo &type_info, bool serialize_internals) {
1388
+ D_ASSERT(type_info.type == ExtraTypeInfoType::ENUM_TYPE_INFO);
1389
+ auto &enum_info = (EnumTypeInfo &)type_info;
1390
+ // Store Schema Name
1391
+ writer.WriteString(enum_info.GetSchemaName());
1392
+ // Store Enum Name
1393
+ writer.WriteString(enum_info.GetEnumName());
1394
+ // Store If we are serializing the internals
1395
+ writer.WriteField<bool>(serialize_internals);
1396
+ if (serialize_internals) {
1397
+ // We must serialize the internals
1398
+ auto dict_size = enum_info.GetDictSize();
1399
+ // Store Dictionary Size
1400
+ writer.WriteField<uint32_t>(dict_size);
1401
+ // Store Vector Order By Insertion
1402
+ ((Vector &)enum_info.GetValuesInsertOrder()).Serialize(dict_size, writer.GetSerializer());
1403
+ }
1404
+ }
1405
+
1371
1406
  template <class T>
1372
1407
  struct EnumTypeInfoTemplated : public EnumTypeInfo {
1373
1408
  explicit EnumTypeInfoTemplated(const string &enum_name_p, Vector &values_insert_order_p, idx_t size_p)
@@ -1391,13 +1426,28 @@ struct EnumTypeInfoTemplated : public EnumTypeInfo {
1391
1426
  }
1392
1427
  }
1393
1428
 
1394
- static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size) {
1395
- auto enum_name = reader.ReadRequired<string>();
1429
+ static shared_ptr<EnumTypeInfoTemplated> Deserialize(FieldReader &reader, uint32_t size, string enum_name) {
1430
+
1396
1431
  Vector values_insert_order(LogicalType::VARCHAR, size);
1397
1432
  values_insert_order.Deserialize(size, reader.GetSource());
1398
1433
  return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
1399
1434
  }
1400
1435
 
1436
+ static shared_ptr<EnumTypeInfoTemplated> FormatDeserialize(FormatDeserializer &source, uint32_t size) {
1437
+ auto enum_name = source.ReadProperty<string>("enum_name");
1438
+ Vector values_insert_order(LogicalType::VARCHAR, size);
1439
+ values_insert_order.FormatDeserialize(source, size);
1440
+ return make_shared<EnumTypeInfoTemplated>(std::move(enum_name), values_insert_order, size);
1441
+ }
1442
+
1443
+ string_map_t<T> &GetValues() {
1444
+ return values;
1445
+ }
1446
+
1447
+ EnumTypeInfoTemplated(const EnumTypeInfoTemplated &) = delete;
1448
+ EnumTypeInfoTemplated &operator=(const EnumTypeInfoTemplated &) = delete;
1449
+
1450
+ private:
1401
1451
  string_map_t<T> values;
1402
1452
  };
1403
1453
 
@@ -1405,7 +1455,7 @@ const string &EnumType::GetTypeName(const LogicalType &type) {
1405
1455
  D_ASSERT(type.id() == LogicalTypeId::ENUM);
1406
1456
  auto info = type.AuxInfo();
1407
1457
  D_ASSERT(info);
1408
- return ((EnumTypeInfo &)*info).enum_name;
1458
+ return ((EnumTypeInfo &)*info).GetEnumName();
1409
1459
  }
1410
1460
 
1411
1461
  static PhysicalType EnumVectorDictType(idx_t size) {
@@ -1454,11 +1504,11 @@ int64_t EnumType::GetPos(const LogicalType &type, const string_t &key) {
1454
1504
  auto info = type.AuxInfo();
1455
1505
  switch (type.InternalType()) {
1456
1506
  case PhysicalType::UINT8:
1457
- return TemplatedGetPos(((EnumTypeInfoTemplated<uint8_t> &)*info).values, key);
1507
+ return TemplatedGetPos(((EnumTypeInfoTemplated<uint8_t> &)*info).GetValues(), key);
1458
1508
  case PhysicalType::UINT16:
1459
- return TemplatedGetPos(((EnumTypeInfoTemplated<uint16_t> &)*info).values, key);
1509
+ return TemplatedGetPos(((EnumTypeInfoTemplated<uint16_t> &)*info).GetValues(), key);
1460
1510
  case PhysicalType::UINT32:
1461
- return TemplatedGetPos(((EnumTypeInfoTemplated<uint32_t> &)*info).values, key);
1511
+ return TemplatedGetPos(((EnumTypeInfoTemplated<uint32_t> &)*info).GetValues(), key);
1462
1512
  default:
1463
1513
  throw InternalException("ENUM can only have unsigned integers (except UINT64) as physical types");
1464
1514
  }
@@ -1466,22 +1516,22 @@ int64_t EnumType::GetPos(const LogicalType &type, const string_t &key) {
1466
1516
 
1467
1517
  const string EnumType::GetValue(const Value &val) {
1468
1518
  auto info = val.type().AuxInfo();
1469
- auto &values_insert_order = ((EnumTypeInfo &)*info).values_insert_order;
1519
+ auto &values_insert_order = ((EnumTypeInfo &)*info).GetValuesInsertOrder();
1470
1520
  return StringValue::Get(values_insert_order.GetValue(val.GetValue<uint32_t>()));
1471
1521
  }
1472
1522
 
1473
- Vector &EnumType::GetValuesInsertOrder(const LogicalType &type) {
1523
+ const Vector &EnumType::GetValuesInsertOrder(const LogicalType &type) {
1474
1524
  D_ASSERT(type.id() == LogicalTypeId::ENUM);
1475
1525
  auto info = type.AuxInfo();
1476
1526
  D_ASSERT(info);
1477
- return ((EnumTypeInfo &)*info).values_insert_order;
1527
+ return ((EnumTypeInfo &)*info).GetValuesInsertOrder();
1478
1528
  }
1479
1529
 
1480
1530
  idx_t EnumType::GetSize(const LogicalType &type) {
1481
1531
  D_ASSERT(type.id() == LogicalTypeId::ENUM);
1482
1532
  auto info = type.AuxInfo();
1483
1533
  D_ASSERT(info);
1484
- return ((EnumTypeInfo &)*info).dict_size;
1534
+ return ((EnumTypeInfo &)*info).GetDictSize();
1485
1535
  }
1486
1536
 
1487
1537
  void EnumType::SetCatalog(LogicalType &type, TypeCatalogEntry *catalog_entry) {
@@ -1497,13 +1547,18 @@ TypeCatalogEntry *EnumType::GetCatalog(const LogicalType &type) {
1497
1547
  return ((EnumTypeInfo &)*info).catalog_entry;
1498
1548
  }
1499
1549
 
1550
+ string EnumType::GetSchemaName(const LogicalType &type) {
1551
+ auto catalog_entry = EnumType::GetCatalog(type);
1552
+ return catalog_entry ? catalog_entry->schema->name : "";
1553
+ }
1554
+
1500
1555
  PhysicalType EnumType::GetPhysicalType(const LogicalType &type) {
1501
1556
  D_ASSERT(type.id() == LogicalTypeId::ENUM);
1502
1557
  auto aux_info = type.AuxInfo();
1503
1558
  D_ASSERT(aux_info);
1504
1559
  auto &info = (EnumTypeInfo &)*aux_info;
1505
- D_ASSERT(info.dict_type == EnumDictType::VECTOR_DICT);
1506
- return EnumVectorDictType(info.dict_size);
1560
+ D_ASSERT(info.GetEnumDictType() == EnumDictType::VECTOR_DICT);
1561
+ return EnumVectorDictType(info.GetDictSize());
1507
1562
  }
1508
1563
 
1509
1564
  //===--------------------------------------------------------------------===//
@@ -1519,6 +1574,70 @@ void ExtraTypeInfo::Serialize(ExtraTypeInfo *info, FieldWriter &writer) {
1519
1574
  writer.WriteString(info->alias);
1520
1575
  }
1521
1576
  }
1577
+ void ExtraTypeInfo::FormatSerialize(FormatSerializer &serializer) const {
1578
+ serializer.WriteProperty("type", type);
1579
+ serializer.WriteProperty("alias", alias);
1580
+ }
1581
+
1582
+ shared_ptr<ExtraTypeInfo> ExtraTypeInfo::FormatDeserialize(FormatDeserializer &deserializer) {
1583
+ auto type = deserializer.ReadProperty<ExtraTypeInfoType>("type");
1584
+
1585
+ shared_ptr<ExtraTypeInfo> result;
1586
+ switch (type) {
1587
+ case ExtraTypeInfoType::INVALID_TYPE_INFO: {
1588
+ string alias;
1589
+ deserializer.ReadOptionalProperty("alias", alias);
1590
+ if (!alias.empty()) {
1591
+ return make_shared<ExtraTypeInfo>(type, alias);
1592
+ }
1593
+ return nullptr;
1594
+ }
1595
+ case ExtraTypeInfoType::GENERIC_TYPE_INFO: {
1596
+ result = make_shared<ExtraTypeInfo>(type);
1597
+ } break;
1598
+ case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
1599
+ result = DecimalTypeInfo::FormatDeserialize(deserializer);
1600
+ break;
1601
+ case ExtraTypeInfoType::STRING_TYPE_INFO:
1602
+ result = StringTypeInfo::FormatDeserialize(deserializer);
1603
+ break;
1604
+ case ExtraTypeInfoType::LIST_TYPE_INFO:
1605
+ result = ListTypeInfo::FormatDeserialize(deserializer);
1606
+ break;
1607
+ case ExtraTypeInfoType::STRUCT_TYPE_INFO:
1608
+ result = StructTypeInfo::FormatDeserialize(deserializer);
1609
+ break;
1610
+ case ExtraTypeInfoType::USER_TYPE_INFO:
1611
+ result = UserTypeInfo::FormatDeserialize(deserializer);
1612
+ break;
1613
+ case ExtraTypeInfoType::ENUM_TYPE_INFO: {
1614
+ auto enum_size = deserializer.ReadProperty<uint32_t>("enum_size");
1615
+ auto enum_internal_type = EnumVectorDictType(enum_size);
1616
+ switch (enum_internal_type) {
1617
+ case PhysicalType::UINT8:
1618
+ result = EnumTypeInfoTemplated<uint8_t>::FormatDeserialize(deserializer, enum_size);
1619
+ break;
1620
+ case PhysicalType::UINT16:
1621
+ result = EnumTypeInfoTemplated<uint16_t>::FormatDeserialize(deserializer, enum_size);
1622
+ break;
1623
+ case PhysicalType::UINT32:
1624
+ result = EnumTypeInfoTemplated<uint32_t>::FormatDeserialize(deserializer, enum_size);
1625
+ break;
1626
+ default:
1627
+ throw InternalException("Invalid Physical Type for ENUMs");
1628
+ }
1629
+ } break;
1630
+ case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
1631
+ result = AggregateStateTypeInfo::FormatDeserialize(deserializer);
1632
+ break;
1633
+
1634
+ default:
1635
+ throw InternalException("Unimplemented type info in ExtraTypeInfo::Deserialize");
1636
+ }
1637
+ deserializer.ReadOptionalPropertyOrDefault("alias", result->alias, string());
1638
+ return result;
1639
+ }
1640
+
1522
1641
  shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
1523
1642
  auto type = reader.ReadRequired<ExtraTypeInfoType>();
1524
1643
  shared_ptr<ExtraTypeInfo> extra_info;
@@ -1549,20 +1668,40 @@ shared_ptr<ExtraTypeInfo> ExtraTypeInfo::Deserialize(FieldReader &reader) {
1549
1668
  extra_info = UserTypeInfo::Deserialize(reader);
1550
1669
  break;
1551
1670
  case ExtraTypeInfoType::ENUM_TYPE_INFO: {
1552
- auto enum_size = reader.ReadRequired<uint32_t>();
1553
- auto enum_internal_type = EnumVectorDictType(enum_size);
1554
- switch (enum_internal_type) {
1555
- case PhysicalType::UINT8:
1556
- extra_info = EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size);
1557
- break;
1558
- case PhysicalType::UINT16:
1559
- extra_info = EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size);
1560
- break;
1561
- case PhysicalType::UINT32:
1562
- extra_info = EnumTypeInfoTemplated<uint32_t>::Deserialize(reader, enum_size);
1671
+ auto schema_name = reader.ReadRequired<string>();
1672
+ auto enum_name = reader.ReadRequired<string>();
1673
+ auto deserialize_internals = reader.ReadRequired<bool>();
1674
+ if (!deserialize_internals) {
1675
+ // this means the enum should already be in the catalog.
1676
+ auto &client_context = reader.GetSource().GetContext();
1677
+ // See if the serializer has a catalog
1678
+ auto catalog = reader.GetSource().GetCatalog();
1679
+ if (catalog) {
1680
+ auto enum_type = catalog->GetType(client_context, schema_name, enum_name, true);
1681
+ if (enum_type != LogicalType::INVALID) {
1682
+ extra_info = enum_type.GetAuxInfoShrPtr();
1683
+ }
1684
+ }
1685
+ if (!extra_info) {
1686
+ throw InternalException("Could not find ENUM in the Catalog to deserialize");
1687
+ }
1563
1688
  break;
1564
- default:
1565
- throw InternalException("Invalid Physical Type for ENUMs");
1689
+ } else {
1690
+ auto enum_size = reader.ReadRequired<uint32_t>();
1691
+ auto enum_internal_type = EnumVectorDictType(enum_size);
1692
+ switch (enum_internal_type) {
1693
+ case PhysicalType::UINT8:
1694
+ extra_info = EnumTypeInfoTemplated<uint8_t>::Deserialize(reader, enum_size, enum_name);
1695
+ break;
1696
+ case PhysicalType::UINT16:
1697
+ extra_info = EnumTypeInfoTemplated<uint16_t>::Deserialize(reader, enum_size, enum_name);
1698
+ break;
1699
+ case PhysicalType::UINT32:
1700
+ extra_info = EnumTypeInfoTemplated<uint32_t>::Deserialize(reader, enum_size, enum_name);
1701
+ break;
1702
+ default:
1703
+ throw InternalException("Invalid Physical Type for ENUMs");
1704
+ }
1566
1705
  }
1567
1706
  } break;
1568
1707
  case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
@@ -1592,6 +1731,15 @@ void LogicalType::Serialize(Serializer &serializer) const {
1592
1731
  writer.Finalize();
1593
1732
  }
1594
1733
 
1734
+ void LogicalType::SerializeEnumType(Serializer &serializer) const {
1735
+ FieldWriter writer(serializer);
1736
+ writer.WriteField<LogicalTypeId>(id_);
1737
+ writer.WriteField<ExtraTypeInfoType>(type_info_->type);
1738
+ EnumType::Serialize(writer, *type_info_, true);
1739
+ writer.WriteString(type_info_->alias);
1740
+ writer.Finalize();
1741
+ }
1742
+
1595
1743
  LogicalType LogicalType::Deserialize(Deserializer &source) {
1596
1744
  FieldReader reader(source);
1597
1745
  auto id = reader.ReadRequired<LogicalTypeId>();
@@ -1601,6 +1749,18 @@ LogicalType LogicalType::Deserialize(Deserializer &source) {
1601
1749
  return LogicalType(id, std::move(info));
1602
1750
  }
1603
1751
 
1752
+ void LogicalType::FormatSerialize(FormatSerializer &serializer) const {
1753
+ serializer.WriteProperty("id", id_);
1754
+ serializer.WriteOptionalProperty("type_info", type_info_.get());
1755
+ }
1756
+
1757
+ LogicalType LogicalType::FormatDeserialize(FormatDeserializer &deserializer) {
1758
+ auto id = deserializer.ReadProperty<LogicalTypeId>("id");
1759
+ auto info = deserializer.ReadOptionalProperty<shared_ptr<ExtraTypeInfo>>("type_info");
1760
+
1761
+ return LogicalType(id, std::move(info));
1762
+ }
1763
+
1604
1764
  bool LogicalType::EqualTypeInfo(const LogicalType &rhs) const {
1605
1765
  if (type_info_.get() == rhs.type_info_.get()) {
1606
1766
  return true;