duckdb 0.7.2-dev717.0 → 0.7.2-dev865.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 (179) hide show
  1. package/binding.gyp +2 -0
  2. package/lib/duckdb.d.ts +12 -1
  3. package/lib/duckdb.js +19 -0
  4. package/package.json +1 -1
  5. package/src/duckdb/extension/json/include/json_common.hpp +1 -0
  6. package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
  7. package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
  8. package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
  9. package/src/duckdb/extension/json/json_functions.cpp +1 -0
  10. package/src/duckdb/extension/json/json_scan.cpp +2 -2
  11. package/src/duckdb/extension/json/json_serializer.cpp +217 -0
  12. package/src/duckdb/src/catalog/catalog.cpp +21 -5
  13. package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
  14. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  15. package/src/duckdb/src/common/exception.cpp +2 -2
  16. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1172 -0
  17. package/src/duckdb/src/common/types/value.cpp +117 -93
  18. package/src/duckdb/src/common/types/vector.cpp +140 -1
  19. package/src/duckdb/src/common/types.cpp +166 -89
  20. package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
  21. package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +5 -8
  22. package/src/duckdb/src/function/scalar/date/date_part.cpp +2 -2
  23. package/src/duckdb/src/function/scalar/date/date_trunc.cpp +2 -2
  24. package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
  25. package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +4 -0
  26. package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +8 -8
  27. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  28. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  29. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  30. package/src/duckdb/src/function/table/arrow_conversion.cpp +7 -1
  31. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  32. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  33. package/src/duckdb/src/include/duckdb/catalog/catalog.hpp +3 -0
  34. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  35. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  36. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -0
  37. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  38. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  39. package/src/duckdb/src/include/duckdb/common/exception.hpp +40 -9
  40. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +3 -0
  41. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  42. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  43. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  44. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  45. package/src/duckdb/src/include/duckdb/common/string_util.hpp +12 -0
  46. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -31
  47. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -0
  48. package/src/duckdb/src/include/duckdb/common/types.hpp +8 -2
  49. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  50. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
  51. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  52. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  53. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  54. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  55. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  56. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  57. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  58. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  59. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  60. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  61. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  62. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -0
  63. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  64. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  65. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  66. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  67. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +2 -0
  68. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  69. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  70. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  71. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  72. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  73. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  74. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  75. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +11 -1
  76. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  77. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  78. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  79. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  80. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  81. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  82. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  83. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +9 -0
  84. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  85. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  86. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  87. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats.hpp +9 -52
  88. package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
  89. package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
  90. package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
  91. package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
  92. package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -3
  93. package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +4 -1
  94. package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +6 -3
  95. package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +5 -3
  96. package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
  97. package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +8 -1
  98. package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
  99. package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
  100. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  101. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  102. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  103. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -3
  104. package/src/duckdb/src/optimizer/rule/move_constants.cpp +2 -2
  105. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -1
  106. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  107. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  108. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  109. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  110. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  111. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  112. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  113. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +15 -0
  114. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  115. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  116. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  117. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  118. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  119. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  120. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  121. package/src/duckdb/src/parser/expression/star_expression.cpp +20 -0
  122. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  123. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  124. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  125. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  126. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  127. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  128. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  129. package/src/duckdb/src/parser/query_node.cpp +50 -0
  130. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  131. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  132. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  133. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  134. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  135. package/src/duckdb/src/parser/tableref/joinref.cpp +25 -0
  136. package/src/duckdb/src/parser/tableref/pivotref.cpp +53 -0
  137. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  138. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  139. package/src/duckdb/src/parser/tableref.cpp +46 -0
  140. package/src/duckdb/src/parser/transform/expression/transform_array_access.cpp +11 -0
  141. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  142. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  143. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  144. package/src/duckdb/src/planner/binder/expression/bind_function_expression.cpp +22 -4
  145. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  146. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +1 -1
  147. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  148. package/src/duckdb/src/storage/checkpoint/table_data_reader.cpp +3 -11
  149. package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +6 -0
  150. package/src/duckdb/src/storage/checkpoint_manager.cpp +1 -0
  151. package/src/duckdb/src/storage/compression/numeric_constant.cpp +2 -2
  152. package/src/duckdb/src/storage/data_table.cpp +1 -1
  153. package/src/duckdb/src/storage/statistics/numeric_stats.cpp +145 -83
  154. package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
  155. package/src/duckdb/src/storage/storage_info.cpp +1 -1
  156. package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +1 -6
  157. package/src/duckdb/src/storage/table/column_data.cpp +29 -35
  158. package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +5 -5
  159. package/src/duckdb/src/storage/table/column_segment.cpp +8 -7
  160. package/src/duckdb/src/storage/table/list_column_data.cpp +2 -1
  161. package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
  162. package/src/duckdb/src/storage/table/row_group.cpp +9 -9
  163. package/src/duckdb/src/storage/table/row_group_collection.cpp +82 -66
  164. package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
  165. package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -0
  166. package/src/duckdb/src/storage/table/struct_column_data.cpp +1 -0
  167. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  168. package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11780 -11512
  169. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  170. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  171. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  172. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  173. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  174. package/src/duckdb/ub_src_parser.cpp +2 -0
  175. package/src/duckdb/ub_src_storage_statistics.cpp +2 -0
  176. package/src/duckdb/ub_src_storage_table.cpp +0 -2
  177. package/src/utils.cpp +12 -0
  178. package/test/extension.test.ts +44 -26
  179. package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -5,6 +5,8 @@
5
5
  #include "duckdb/parser/query_node/recursive_cte_node.hpp"
6
6
  #include "duckdb/common/limits.hpp"
7
7
  #include "duckdb/common/field_writer.hpp"
8
+ #include "duckdb/common/serializer/format_serializer.hpp"
9
+ #include "duckdb/common/serializer/format_deserializer.hpp"
8
10
 
9
11
  namespace duckdb {
10
12
 
@@ -65,6 +67,16 @@ string CommonTableExpressionMap::ToString() const {
65
67
  return result;
66
68
  }
67
69
 
70
+ void CommonTableExpressionMap::FormatSerialize(FormatSerializer &serializer) const {
71
+ serializer.WriteProperty("map", map);
72
+ }
73
+
74
+ CommonTableExpressionMap CommonTableExpressionMap::FormatDeserialize(FormatDeserializer &deserializer) {
75
+ auto result = CommonTableExpressionMap();
76
+ deserializer.ReadProperty("map", result.map);
77
+ return result;
78
+ }
79
+
68
80
  string QueryNode::ResultModifiersToString() const {
69
81
  string result;
70
82
  for (idx_t modifier_idx = 0; modifier_idx < modifiers.size(); modifier_idx++) {
@@ -155,6 +167,7 @@ void QueryNode::Serialize(Serializer &main_serializer) const {
155
167
  writer.WriteField<QueryNodeType>(type);
156
168
  writer.WriteSerializableList(modifiers);
157
169
  // cte_map
170
+
158
171
  writer.WriteField<uint32_t>((uint32_t)cte_map.map.size());
159
172
  auto &serializer = writer.GetSerializer();
160
173
  for (auto &cte : cte_map.map) {
@@ -163,9 +176,46 @@ void QueryNode::Serialize(Serializer &main_serializer) const {
163
176
  cte.second->query->Serialize(serializer);
164
177
  }
165
178
  Serialize(writer);
179
+
166
180
  writer.Finalize();
167
181
  }
168
182
 
183
+ // Children should call the base method before their own.
184
+ void QueryNode::FormatSerialize(FormatSerializer &serializer) const {
185
+ serializer.WriteProperty("type", type);
186
+ serializer.WriteProperty("modifiers", modifiers);
187
+ serializer.WriteProperty("cte_map", cte_map);
188
+ }
189
+
190
+ unique_ptr<QueryNode> QueryNode::FormatDeserialize(FormatDeserializer &deserializer) {
191
+
192
+ auto type = deserializer.ReadProperty<QueryNodeType>("type");
193
+
194
+ auto modifiers = deserializer.ReadProperty<vector<unique_ptr<ResultModifier>>>("modifiers");
195
+ auto cte_map = deserializer.ReadProperty<CommonTableExpressionMap>("cte_map");
196
+
197
+ unique_ptr<QueryNode> result;
198
+
199
+ switch (type) {
200
+ case QueryNodeType::SELECT_NODE:
201
+ result = SelectNode::FormatDeserialize(deserializer);
202
+ break;
203
+ case QueryNodeType::SET_OPERATION_NODE:
204
+ result = SetOperationNode::FormatDeserialize(deserializer);
205
+ break;
206
+ case QueryNodeType::RECURSIVE_CTE_NODE:
207
+ result = RecursiveCTENode::FormatDeserialize(deserializer);
208
+ break;
209
+ default:
210
+ throw SerializationException("Could not deserialize Query Node: unknown type!");
211
+ }
212
+
213
+ result->type = type;
214
+ result->modifiers = std::move(modifiers);
215
+ result->cte_map = std::move(cte_map);
216
+ return result;
217
+ }
218
+
169
219
  unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &main_source) {
170
220
  FieldReader reader(main_source);
171
221
 
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/result_modifier.hpp"
2
2
  #include "duckdb/common/field_writer.hpp"
3
3
  #include "duckdb/parser/expression_util.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -18,6 +20,33 @@ void ResultModifier::Serialize(Serializer &serializer) const {
18
20
  writer.Finalize();
19
21
  }
20
22
 
23
+ void ResultModifier::FormatSerialize(FormatSerializer &serializer) const {
24
+ serializer.WriteProperty("type", type);
25
+ }
26
+
27
+ std::unique_ptr<ResultModifier> ResultModifier::FormatDeserialize(FormatDeserializer &deserializer) {
28
+ auto type = deserializer.ReadProperty<ResultModifierType>("type");
29
+
30
+ unique_ptr<ResultModifier> result;
31
+ switch (type) {
32
+ case ResultModifierType::LIMIT_MODIFIER:
33
+ result = LimitModifier::FormatDeserialize(deserializer);
34
+ break;
35
+ case ResultModifierType::ORDER_MODIFIER:
36
+ result = OrderModifier::FormatDeserialize(deserializer);
37
+ break;
38
+ case ResultModifierType::DISTINCT_MODIFIER:
39
+ result = DistinctModifier::FormatDeserialize(deserializer);
40
+ break;
41
+ case ResultModifierType::LIMIT_PERCENT_MODIFIER:
42
+ result = LimitPercentModifier::FormatDeserialize(deserializer);
43
+ break;
44
+ default:
45
+ throw InternalException("Unrecognized ResultModifierType for Deserialization");
46
+ }
47
+ return result;
48
+ }
49
+
21
50
  unique_ptr<ResultModifier> ResultModifier::Deserialize(Deserializer &source) {
22
51
  FieldReader reader(source);
23
52
  auto type = reader.ReadRequired<ResultModifierType>();
@@ -73,6 +102,16 @@ void LimitModifier::Serialize(FieldWriter &writer) const {
73
102
  writer.WriteOptional(offset);
74
103
  }
75
104
 
105
+ void LimitModifier::FormatSerialize(FormatSerializer &serializer) const {
106
+ ResultModifier::FormatSerialize(serializer);
107
+ serializer.WriteOptionalProperty("limit", limit);
108
+ serializer.WriteOptionalProperty("offset", offset);
109
+ }
110
+
111
+ unique_ptr<ResultModifier> LimitModifier::FormatDeserialize(FormatDeserializer &deserializer) {
112
+ throw NotImplementedException("err");
113
+ }
114
+
76
115
  unique_ptr<ResultModifier> LimitModifier::Deserialize(FieldReader &reader) {
77
116
  auto mod = make_unique<LimitModifier>();
78
117
  mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
@@ -103,6 +142,16 @@ void DistinctModifier::Serialize(FieldWriter &writer) const {
103
142
  writer.WriteSerializableList(distinct_on_targets);
104
143
  }
105
144
 
145
+ void DistinctModifier::FormatSerialize(duckdb::FormatSerializer &serializer) const {
146
+ ResultModifier::FormatSerialize(serializer);
147
+ serializer.WriteProperty("distinct_on_targets", distinct_on_targets);
148
+ }
149
+
150
+ unique_ptr<ResultModifier> DistinctModifier::FormatDeserialize(FormatDeserializer &deserializer) {
151
+ auto mod = make_unique<DistinctModifier>();
152
+ throw NotImplementedException("");
153
+ }
154
+
106
155
  unique_ptr<ResultModifier> DistinctModifier::Deserialize(FieldReader &reader) {
107
156
  auto mod = make_unique<DistinctModifier>();
108
157
  mod->distinct_on_targets = reader.ReadRequiredSerializableList<ParsedExpression>();
@@ -170,6 +219,16 @@ void OrderByNode::Serialize(Serializer &serializer) const {
170
219
  writer.Finalize();
171
220
  }
172
221
 
222
+ void OrderByNode::FormatSerialize(FormatSerializer &serializer) const {
223
+ serializer.WriteProperty("type", type);
224
+ serializer.WriteProperty("null_order", null_order);
225
+ serializer.WriteProperty("expression", expression);
226
+ }
227
+
228
+ OrderByNode OrderByNode::FormatDeserialize(FormatDeserializer &deserializer) {
229
+ throw NotImplementedException("err");
230
+ }
231
+
173
232
  OrderByNode OrderByNode::Deserialize(Deserializer &source) {
174
233
  FieldReader reader(source);
175
234
  auto type = reader.ReadRequired<OrderType>();
@@ -183,6 +242,14 @@ void OrderModifier::Serialize(FieldWriter &writer) const {
183
242
  writer.WriteRegularSerializableList(orders);
184
243
  }
185
244
 
245
+ void OrderModifier::FormatSerialize(FormatSerializer &serializer) const {
246
+ ResultModifier::FormatSerialize(serializer);
247
+ serializer.WriteProperty("orders", orders);
248
+ }
249
+ unique_ptr<ResultModifier> OrderModifier::FormatDeserialize(FormatDeserializer &deserializer) {
250
+ throw NotImplementedException("err");
251
+ }
252
+
186
253
  unique_ptr<ResultModifier> OrderModifier::Deserialize(FieldReader &reader) {
187
254
  auto mod = make_unique<OrderModifier>();
188
255
  mod->orders = reader.ReadRequiredSerializableList<OrderByNode, OrderByNode>();
@@ -219,6 +286,12 @@ void LimitPercentModifier::Serialize(FieldWriter &writer) const {
219
286
  writer.WriteOptional(offset);
220
287
  }
221
288
 
289
+ void LimitPercentModifier::FormatSerialize(FormatSerializer &serializer) const {
290
+ ResultModifier::FormatSerialize(serializer);
291
+ serializer.WriteProperty("limit", limit);
292
+ serializer.WriteProperty("offset", offset);
293
+ }
294
+
222
295
  unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader) {
223
296
  auto mod = make_unique<LimitPercentModifier>();
224
297
  mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
@@ -226,4 +299,9 @@ unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader
226
299
  return std::move(mod);
227
300
  }
228
301
 
302
+ unique_ptr<ResultModifier> LimitPercentModifier::FormatDeserialize(FormatDeserializer &deserializer) {
303
+ auto mod = make_unique<LimitPercentModifier>();
304
+ throw NotImplementedException("err");
305
+ }
306
+
229
307
  } // namespace duckdb
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/statement/select_statement.hpp"
2
2
 
3
3
  #include "duckdb/common/serializer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -15,12 +17,22 @@ void SelectStatement::Serialize(Serializer &serializer) const {
15
17
  node->Serialize(serializer);
16
18
  }
17
19
 
20
+ void SelectStatement::FormatSerialize(FormatSerializer &serializer) const {
21
+ node->FormatSerialize(serializer);
22
+ }
23
+
18
24
  unique_ptr<SelectStatement> SelectStatement::Deserialize(Deserializer &source) {
19
25
  auto result = make_unique<SelectStatement>();
20
26
  result->node = QueryNode::Deserialize(source);
21
27
  return result;
22
28
  }
23
29
 
30
+ unique_ptr<SelectStatement> SelectStatement::FormatDeserialize(FormatDeserializer &deserializer) {
31
+ auto result = make_unique<SelectStatement>();
32
+ deserializer.ReadProperty("node", result->node);
33
+ return result;
34
+ }
35
+
24
36
  bool SelectStatement::Equals(const SQLStatement *other_p) const {
25
37
  if (type != other_p->type) {
26
38
  return false;
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/field_writer.hpp"
4
4
  #include "duckdb/parser/keyword_helper.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -29,6 +31,25 @@ void BaseTableRef::Serialize(FieldWriter &writer) const {
29
31
  writer.WriteString(catalog_name);
30
32
  }
31
33
 
34
+ void BaseTableRef::FormatSerialize(FormatSerializer &serializer) const {
35
+ TableRef::FormatSerialize(serializer);
36
+ serializer.WriteProperty("schema_name", schema_name);
37
+ serializer.WriteProperty("table_name", table_name);
38
+ serializer.WriteProperty("column_name_alias", column_name_alias);
39
+ serializer.WriteProperty("catalog_name", catalog_name);
40
+ }
41
+
42
+ unique_ptr<TableRef> BaseTableRef::FormatDeserialize(FormatDeserializer &deserializer) {
43
+ auto result = make_unique<BaseTableRef>();
44
+
45
+ deserializer.ReadProperty("schema_name", result->schema_name);
46
+ deserializer.ReadProperty("table_name", result->table_name);
47
+ deserializer.ReadProperty("column_name_alias", result->column_name_alias);
48
+ deserializer.ReadProperty("catalog_name", result->catalog_name);
49
+
50
+ return std::move(result);
51
+ }
52
+
32
53
  unique_ptr<TableRef> BaseTableRef::Deserialize(FieldReader &reader) {
33
54
  auto result = make_unique<BaseTableRef>();
34
55
 
@@ -23,4 +23,8 @@ unique_ptr<TableRef> EmptyTableRef::Deserialize(FieldReader &reader) {
23
23
  return make_unique<EmptyTableRef>();
24
24
  }
25
25
 
26
+ unique_ptr<TableRef> EmptyTableRef::FormatDeserialize(FormatDeserializer &source) {
27
+ return make_unique<EmptyTableRef>();
28
+ }
29
+
26
30
  } // namespace duckdb
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/tableref/expressionlistref.hpp"
2
2
 
3
3
  #include "duckdb/common/field_writer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -73,6 +75,21 @@ void ExpressionListRef::Serialize(FieldWriter &writer) const {
73
75
  }
74
76
  }
75
77
 
78
+ void ExpressionListRef::FormatSerialize(FormatSerializer &serializer) const {
79
+ TableRef::FormatSerialize(serializer);
80
+ serializer.WriteProperty("expected_names", expected_names);
81
+ serializer.WriteProperty("expected_types", expected_types);
82
+ serializer.WriteProperty("values", values);
83
+ }
84
+
85
+ unique_ptr<TableRef> ExpressionListRef::FormatDeserialize(FormatDeserializer &source) {
86
+ auto result = make_unique<ExpressionListRef>();
87
+ source.ReadProperty("expected_names", result->expected_names);
88
+ source.ReadProperty("expected_types", result->expected_types);
89
+ source.ReadProperty("values", result->values);
90
+ return std::move(result);
91
+ }
92
+
76
93
  unique_ptr<TableRef> ExpressionListRef::Deserialize(FieldReader &reader) {
77
94
  auto result = make_unique<ExpressionListRef>();
78
95
  // value list
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/limits.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -82,6 +84,29 @@ void JoinRef::Serialize(FieldWriter &writer) const {
82
84
  writer.WriteList<string>(using_columns);
83
85
  }
84
86
 
87
+ void JoinRef::FormatSerialize(FormatSerializer &serializer) const {
88
+ TableRef::FormatSerialize(serializer);
89
+ serializer.WriteProperty("left", *left);
90
+ serializer.WriteProperty("right", *right);
91
+ serializer.WriteOptionalProperty("condition", condition);
92
+ serializer.WriteProperty("join_type", type);
93
+ serializer.WriteProperty("ref_type", ref_type);
94
+ serializer.WriteProperty("using_columns", using_columns);
95
+ }
96
+
97
+ unique_ptr<TableRef> JoinRef::FormatDeserialize(FormatDeserializer &source) {
98
+ auto result = make_unique<JoinRef>(JoinRefType::REGULAR);
99
+
100
+ source.ReadProperty("left", result->left);
101
+ source.ReadProperty("right", result->right);
102
+ source.ReadOptionalProperty("condition", result->condition);
103
+ source.ReadProperty("join_type", result->type);
104
+ source.ReadProperty("ref_type", result->ref_type);
105
+ source.ReadProperty("using_columns", result->using_columns);
106
+
107
+ return std::move(result);
108
+ }
109
+
85
110
  unique_ptr<TableRef> JoinRef::Deserialize(FieldReader &reader) {
86
111
  auto result = make_unique<JoinRef>(JoinRefType::REGULAR);
87
112
  result->left = reader.ReadRequiredSerializable<TableRef>();
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/limits.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -107,6 +109,12 @@ void PivotColumn::Serialize(Serializer &serializer) const {
107
109
  writer.Finalize();
108
110
  }
109
111
 
112
+ void PivotColumn::FormatSerialize(FormatSerializer &serializer) const {
113
+ serializer.WriteProperty("names", names);
114
+ serializer.WriteProperty("entries", entries);
115
+ serializer.WriteProperty("pivot_enum", pivot_enum);
116
+ }
117
+
110
118
  PivotColumn PivotColumn::Deserialize(Deserializer &source) {
111
119
  PivotColumn result;
112
120
  FieldReader reader(source);
@@ -117,6 +125,14 @@ PivotColumn PivotColumn::Deserialize(Deserializer &source) {
117
125
  return result;
118
126
  }
119
127
 
128
+ PivotColumn PivotColumn::FormatDeserialize(FormatDeserializer &source) {
129
+ PivotColumn result;
130
+ source.ReadProperty("names", result.names);
131
+ source.ReadProperty("entries", result.entries);
132
+ source.ReadProperty("pivot_enum", result.pivot_enum);
133
+ return result;
134
+ }
135
+
120
136
  //===--------------------------------------------------------------------===//
121
137
  // PivotColumnEntry
122
138
  //===--------------------------------------------------------------------===//
@@ -136,6 +152,12 @@ void PivotColumnEntry::Serialize(Serializer &serializer) const {
136
152
  writer.Finalize();
137
153
  }
138
154
 
155
+ void PivotColumnEntry::FormatSerialize(FormatSerializer &serializer) const {
156
+ serializer.WriteProperty("values", values);
157
+ serializer.WriteOptionalProperty("star_expr", star_expr);
158
+ serializer.WriteProperty("alias", alias);
159
+ }
160
+
139
161
  PivotColumnEntry PivotColumnEntry::Deserialize(Deserializer &source) {
140
162
  PivotColumnEntry result;
141
163
  FieldReader reader(source);
@@ -146,6 +168,14 @@ PivotColumnEntry PivotColumnEntry::Deserialize(Deserializer &source) {
146
168
  return result;
147
169
  }
148
170
 
171
+ PivotColumnEntry PivotColumnEntry::FormatDeserialize(FormatDeserializer &source) {
172
+ PivotColumnEntry result;
173
+ source.ReadProperty("values", result.values);
174
+ source.ReadOptionalProperty("star_expr", result.star_expr);
175
+ source.ReadProperty("alias", result.alias);
176
+ return result;
177
+ }
178
+
149
179
  //===--------------------------------------------------------------------===//
150
180
  // PivotRef
151
181
  //===--------------------------------------------------------------------===//
@@ -281,6 +311,17 @@ void PivotRef::Serialize(FieldWriter &writer) const {
281
311
  writer.WriteField<bool>(include_nulls);
282
312
  }
283
313
 
314
+ void PivotRef::FormatSerialize(FormatSerializer &serializer) const {
315
+ TableRef::FormatSerialize(serializer);
316
+ serializer.WriteProperty("source", source);
317
+ serializer.WriteProperty("aggregates", aggregates);
318
+ serializer.WriteProperty("unpivot_names", unpivot_names);
319
+ serializer.WriteProperty("pivots", pivots);
320
+ serializer.WriteProperty("groups", groups);
321
+ serializer.WriteProperty("column_name_alias", column_name_alias);
322
+ serializer.WriteProperty("include_nulls", include_nulls);
323
+ }
324
+
284
325
  unique_ptr<TableRef> PivotRef::Deserialize(FieldReader &reader) {
285
326
  auto result = make_unique<PivotRef>();
286
327
  result->source = reader.ReadRequiredSerializable<TableRef>();
@@ -293,4 +334,16 @@ unique_ptr<TableRef> PivotRef::Deserialize(FieldReader &reader) {
293
334
  return std::move(result);
294
335
  }
295
336
 
337
+ unique_ptr<TableRef> PivotRef::FormatDeserialize(FormatDeserializer &source) {
338
+ auto result = make_unique<PivotRef>();
339
+ source.ReadProperty("source", result->source);
340
+ source.ReadProperty("aggregates", result->aggregates);
341
+ source.ReadProperty("unpivot_names", result->unpivot_names);
342
+ source.ReadProperty("pivots", result->pivots);
343
+ source.ReadProperty("groups", result->groups);
344
+ source.ReadProperty("column_name_alias", result->column_name_alias);
345
+ source.ReadProperty("include_nulls", result->include_nulls);
346
+ return std::move(result);
347
+ }
348
+
296
349
  } // namespace duckdb
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/limits.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -35,6 +37,19 @@ void SubqueryRef::Serialize(FieldWriter &writer) const {
35
37
  writer.WriteList<string>(column_name_alias);
36
38
  }
37
39
 
40
+ void SubqueryRef::FormatSerialize(FormatSerializer &serializer) const {
41
+ TableRef::FormatSerialize(serializer);
42
+ serializer.WriteProperty("subquery", subquery);
43
+ serializer.WriteProperty("column_name_alias", column_name_alias);
44
+ }
45
+
46
+ unique_ptr<TableRef> SubqueryRef::FormatDeserialize(FormatDeserializer &deserializer) {
47
+ auto subquery = deserializer.ReadProperty<unique_ptr<SelectStatement>>("subquery");
48
+ auto result = make_unique<SubqueryRef>(std::move(subquery));
49
+ deserializer.ReadProperty("column_name_alias", result->column_name_alias);
50
+ return std::move(result);
51
+ }
52
+
38
53
  unique_ptr<TableRef> SubqueryRef::Deserialize(FieldReader &reader) {
39
54
  auto subquery = reader.ReadRequiredSerializable<SelectStatement>();
40
55
  auto result = make_unique<SubqueryRef>(std::move(subquery));
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/tableref/table_function_ref.hpp"
2
2
  #include "duckdb/common/vector.hpp"
3
3
  #include "duckdb/common/field_writer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -25,6 +27,21 @@ void TableFunctionRef::Serialize(FieldWriter &writer) const {
25
27
  writer.WriteList<string>(column_name_alias);
26
28
  }
27
29
 
30
+ void TableFunctionRef::FormatSerialize(FormatSerializer &serializer) const {
31
+ TableRef::FormatSerialize(serializer);
32
+ serializer.WriteProperty("function", function);
33
+ serializer.WriteProperty("alias", alias);
34
+ serializer.WriteProperty("column_name_alias", column_name_alias);
35
+ }
36
+
37
+ unique_ptr<TableRef> TableFunctionRef::FormatDeserialize(FormatDeserializer &deserializer) {
38
+ auto result = make_unique<TableFunctionRef>();
39
+ deserializer.ReadProperty("function", result->function);
40
+ deserializer.ReadProperty("alias", result->alias);
41
+ deserializer.ReadProperty("column_name_alias", result->column_name_alias);
42
+ return std::move(result);
43
+ }
44
+
28
45
  unique_ptr<TableRef> TableFunctionRef::Deserialize(FieldReader &reader) {
29
46
  auto result = make_unique<TableFunctionRef>();
30
47
  result->function = reader.ReadRequiredSerializable<ParsedExpression>();
@@ -3,6 +3,8 @@
3
3
  #include "duckdb/common/printer.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
5
  #include "duckdb/parser/tableref/list.hpp"
6
+ #include "duckdb/common/serializer/format_serializer.hpp"
7
+ #include "duckdb/common/serializer/format_deserializer.hpp"
6
8
  #include "duckdb/common/to_string.hpp"
7
9
 
8
10
  namespace duckdb {
@@ -52,6 +54,50 @@ void TableRef::Serialize(Serializer &serializer) const {
52
54
  writer.Finalize();
53
55
  }
54
56
 
57
+ void TableRef::FormatSerialize(FormatSerializer &serializer) const {
58
+ serializer.WriteProperty("type", type);
59
+ serializer.WriteProperty("alias", alias);
60
+ serializer.WriteOptionalProperty("sample", sample);
61
+ }
62
+
63
+ unique_ptr<TableRef> TableRef::FormatDeserialize(FormatDeserializer &deserializer) {
64
+ auto type = deserializer.ReadProperty<TableReferenceType>("type");
65
+ auto alias = deserializer.ReadProperty<string>("alias");
66
+ auto sample = deserializer.ReadOptionalProperty<unique_ptr<SampleOptions>>("sample");
67
+
68
+ unique_ptr<TableRef> result;
69
+
70
+ switch (type) {
71
+ case TableReferenceType::BASE_TABLE:
72
+ result = BaseTableRef::FormatDeserialize(deserializer);
73
+ break;
74
+ case TableReferenceType::JOIN:
75
+ result = JoinRef::FormatDeserialize(deserializer);
76
+ break;
77
+ case TableReferenceType::SUBQUERY:
78
+ result = SubqueryRef::FormatDeserialize(deserializer);
79
+ break;
80
+ case TableReferenceType::TABLE_FUNCTION:
81
+ result = TableFunctionRef::FormatDeserialize(deserializer);
82
+ break;
83
+ case TableReferenceType::EMPTY:
84
+ result = EmptyTableRef::FormatDeserialize(deserializer);
85
+ break;
86
+ case TableReferenceType::EXPRESSION_LIST:
87
+ result = ExpressionListRef::FormatDeserialize(deserializer);
88
+ break;
89
+ case TableReferenceType::PIVOT:
90
+ result = PivotRef::FormatDeserialize(deserializer);
91
+ break;
92
+ case TableReferenceType::CTE:
93
+ case TableReferenceType::INVALID:
94
+ throw InternalException("Unsupported type for TableRef::FormatDeserialize");
95
+ }
96
+ result->alias = alias;
97
+ result->sample = std::move(sample);
98
+ return result;
99
+ }
100
+
55
101
  unique_ptr<TableRef> TableRef::Deserialize(Deserializer &source) {
56
102
  FieldReader reader(source);
57
103
 
@@ -49,6 +49,17 @@ unique_ptr<ParsedExpression> Transformer::TransformArrayAccess(duckdb_libpgquery
49
49
  result = make_unique<OperatorExpression>(ExpressionType::STRUCT_EXTRACT, std::move(children));
50
50
  break;
51
51
  }
52
+ case duckdb_libpgquery::T_PGFuncCall: {
53
+ auto func = (duckdb_libpgquery::PGFuncCall *)target;
54
+ auto function = TransformFuncCall(func);
55
+ if (function->type != ExpressionType::FUNCTION) {
56
+ throw ParserException("%s.%s() call must be a function", result->ToString(), function->ToString());
57
+ }
58
+ auto &f = (FunctionExpression &)*function;
59
+ f.children.insert(f.children.begin(), std::move(result));
60
+ result = std::move(function);
61
+ break;
62
+ }
52
63
  default:
53
64
  throw NotImplementedException("Unimplemented subscript type");
54
65
  }
@@ -37,7 +37,7 @@ unique_ptr<ParsedExpression> Transformer::TransformBoolExpr(duckdb_libpgquery::P
37
37
  next->type <= ExpressionType::COMPARE_GREATERTHANOREQUALTO) {
38
38
  // NOT on a comparison: we can negate the comparison
39
39
  // e.g. NOT(x > y) is equivalent to x <= y
40
- next->type = NegateComparisionExpression(next->type);
40
+ next->type = NegateComparisonExpression(next->type);
41
41
  result = std::move(next);
42
42
  } else {
43
43
  result = make_unique<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(next));
@@ -84,7 +84,7 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
84
84
  // ALL sublink is equivalent to NOT(ANY) with inverted comparison
85
85
  // e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
86
86
  // first invert the comparison type
87
- subquery_expr->comparison_type = NegateComparisionExpression(subquery_expr->comparison_type);
87
+ subquery_expr->comparison_type = NegateComparisonExpression(subquery_expr->comparison_type);
88
88
  return make_unique<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(subquery_expr));
89
89
  }
90
90
  return std::move(subquery_expr);
@@ -44,7 +44,7 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
44
44
  // ALL sublink is equivalent to NOT(ANY) with inverted comparison
45
45
  // e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
46
46
  // first invert the comparison type
47
- subquery_expr->comparison_type = NegateComparisionExpression(subquery_expr->comparison_type);
47
+ subquery_expr->comparison_type = NegateComparisonExpression(subquery_expr->comparison_type);
48
48
  return make_unique<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(subquery_expr));
49
49
  }
50
50
  break;
@@ -38,10 +38,28 @@ BindResult ExpressionBinder::BindExpression(FunctionExpression &function, idx_t
38
38
  "function has to be called in a FROM clause (similar to a table).",
39
39
  function.function_name)));
40
40
  }
41
- // not a table function - search again without if_exists to throw the error
42
- Catalog::GetEntry(context, CatalogType::SCALAR_FUNCTION_ENTRY, function.catalog, function.schema,
43
- function.function_name, false, error_context);
44
- throw InternalException("Catalog::GetEntry for scalar function did not throw a second time");
41
+ // not a table function - check if the schema is set
42
+ if (!function.schema.empty()) {
43
+ // the schema is set - check if we can turn this the schema into a column ref
44
+ string error;
45
+ unique_ptr<ColumnRefExpression> colref;
46
+ if (function.catalog.empty()) {
47
+ colref = make_unique<ColumnRefExpression>(function.schema);
48
+ } else {
49
+ colref = make_unique<ColumnRefExpression>(function.schema, function.catalog);
50
+ }
51
+ auto new_colref = QualifyColumnName(*colref, error);
52
+ if (error.empty()) {
53
+ // we can! transform this into a function call on the column
54
+ // i.e. "x.lower()" becomes "lower(x)"
55
+ function.children.insert(function.children.begin(), std::move(colref));
56
+ function.catalog = INVALID_CATALOG;
57
+ function.schema = INVALID_SCHEMA;
58
+ }
59
+ }
60
+ // rebind the function
61
+ func = Catalog::GetEntry(context, CatalogType::SCALAR_FUNCTION_ENTRY, function.catalog, function.schema,
62
+ function.function_name, false, error_context);
45
63
  }
46
64
 
47
65
  if (func->type != CatalogType::AGGREGATE_FUNCTION_ENTRY &&
@@ -32,6 +32,10 @@ public:
32
32
  void Serialize(FieldWriter &writer) const override {
33
33
  throw InternalException("Cannot serialize bound subquery node");
34
34
  }
35
+
36
+ void FormatSerialize(FormatSerializer &serializer) const override {
37
+ throw InternalException("Cannot serialize bound subquery node");
38
+ }
35
39
  };
36
40
 
37
41
  BindResult ExpressionBinder::BindExpression(SubqueryExpression &expr, idx_t depth) {