duckdb 0.7.2-dev717.0 → 0.7.2-dev832.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 (132) 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/common/enums/expression_type.cpp +8 -222
  13. package/src/duckdb/src/common/enums/join_type.cpp +3 -22
  14. package/src/duckdb/src/common/exception.cpp +2 -2
  15. package/src/duckdb/src/common/serializer/enum_serializer.cpp +1172 -0
  16. package/src/duckdb/src/common/types/value.cpp +117 -0
  17. package/src/duckdb/src/common/types/vector.cpp +140 -1
  18. package/src/duckdb/src/common/types.cpp +166 -89
  19. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  20. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  21. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  22. package/src/duckdb/src/function/table/arrow_conversion.cpp +7 -1
  23. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  24. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  25. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  26. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  27. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -0
  28. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  29. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  30. package/src/duckdb/src/include/duckdb/common/exception.hpp +40 -9
  31. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +3 -0
  32. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  33. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  34. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  35. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  36. package/src/duckdb/src/include/duckdb/common/string_util.hpp +12 -0
  37. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -0
  38. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -0
  39. package/src/duckdb/src/include/duckdb/common/types.hpp +8 -2
  40. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  41. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
  42. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  43. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  44. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  45. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  46. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  47. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  48. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  49. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  50. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  51. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  52. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  53. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -0
  54. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  55. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  56. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  57. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  58. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +2 -0
  59. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  60. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  61. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  62. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  63. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  64. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  65. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  66. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +11 -1
  67. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  68. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  69. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  70. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  71. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  72. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  73. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  74. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +9 -0
  75. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  76. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  77. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  78. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  79. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  80. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  81. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -3
  82. package/src/duckdb/src/optimizer/rule/move_constants.cpp +2 -2
  83. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -1
  84. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  85. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  86. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  87. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  88. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  89. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  90. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  91. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +15 -0
  92. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  93. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  94. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  95. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  96. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  97. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  98. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  99. package/src/duckdb/src/parser/expression/star_expression.cpp +20 -0
  100. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  101. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  102. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  103. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  104. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  105. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  106. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  107. package/src/duckdb/src/parser/query_node.cpp +50 -0
  108. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  109. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  110. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  111. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  112. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  113. package/src/duckdb/src/parser/tableref/joinref.cpp +25 -0
  114. package/src/duckdb/src/parser/tableref/pivotref.cpp +53 -0
  115. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  116. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  117. package/src/duckdb/src/parser/tableref.cpp +46 -0
  118. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  119. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  120. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  121. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  122. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +1 -1
  123. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  124. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  125. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  126. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  127. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  128. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  129. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  130. package/src/duckdb/ub_src_parser.cpp +2 -0
  131. package/src/utils.cpp +12 -0
  132. package/test/extension.test.ts +44 -26
@@ -3,6 +3,9 @@
3
3
  #include "duckdb/common/types/hash.hpp"
4
4
  #include "duckdb/common/string_util.hpp"
5
5
 
6
+ #include "duckdb/common/serializer/format_serializer.hpp"
7
+ #include "duckdb/common/serializer/format_deserializer.hpp"
8
+
6
9
  namespace duckdb {
7
10
 
8
11
  LambdaExpression::LambdaExpression(unique_ptr<ParsedExpression> lhs, unique_ptr<ParsedExpression> expr)
@@ -41,4 +44,17 @@ unique_ptr<ParsedExpression> LambdaExpression::Deserialize(ExpressionType type,
41
44
  return make_unique<LambdaExpression>(std::move(lhs), std::move(expr));
42
45
  }
43
46
 
47
+ void LambdaExpression::FormatSerialize(FormatSerializer &serializer) const {
48
+ ParsedExpression::FormatSerialize(serializer);
49
+ serializer.WriteProperty("lhs", *lhs);
50
+ serializer.WriteProperty("expr", *expr);
51
+ }
52
+
53
+ unique_ptr<ParsedExpression> LambdaExpression::FormatDeserialize(ExpressionType type,
54
+ FormatDeserializer &deserializer) {
55
+ auto lhs = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("lhs");
56
+ auto expr = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("expr");
57
+ return make_unique<LambdaExpression>(std::move(lhs), std::move(expr));
58
+ }
59
+
44
60
  } // namespace duckdb
@@ -3,6 +3,9 @@
3
3
  #include "duckdb/common/exception.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
5
 
6
+ #include "duckdb/common/serializer/format_serializer.hpp"
7
+ #include "duckdb/common/serializer/format_deserializer.hpp"
8
+
6
9
  namespace duckdb {
7
10
 
8
11
  OperatorExpression::OperatorExpression(ExpressionType type, unique_ptr<ParsedExpression> left,
@@ -55,4 +58,16 @@ unique_ptr<ParsedExpression> OperatorExpression::Deserialize(ExpressionType type
55
58
  return std::move(expression);
56
59
  }
57
60
 
61
+ void OperatorExpression::FormatSerialize(FormatSerializer &serializer) const {
62
+ ParsedExpression::FormatSerialize(serializer);
63
+ serializer.WriteProperty("children", children);
64
+ }
65
+
66
+ unique_ptr<ParsedExpression> OperatorExpression::FormatDeserialize(ExpressionType type,
67
+ FormatDeserializer &deserializer) {
68
+ auto expression = make_unique<OperatorExpression>(type);
69
+ expression->children = deserializer.ReadProperty<vector<unique_ptr<ParsedExpression>>>("children");
70
+ return std::move(expression);
71
+ }
72
+
58
73
  } // namespace duckdb
@@ -5,6 +5,9 @@
5
5
  #include "duckdb/common/types/hash.hpp"
6
6
  #include "duckdb/common/to_string.hpp"
7
7
 
8
+ #include "duckdb/common/serializer/format_serializer.hpp"
9
+ #include "duckdb/common/serializer/format_deserializer.hpp"
10
+
8
11
  namespace duckdb {
9
12
 
10
13
  ParameterExpression::ParameterExpression()
@@ -41,4 +44,16 @@ unique_ptr<ParsedExpression> ParameterExpression::Deserialize(ExpressionType typ
41
44
  return std::move(expression);
42
45
  }
43
46
 
47
+ void ParameterExpression::FormatSerialize(FormatSerializer &serializer) const {
48
+ ParsedExpression::FormatSerialize(serializer);
49
+ serializer.WriteProperty("parameter_nr", parameter_nr);
50
+ }
51
+
52
+ unique_ptr<ParsedExpression> ParameterExpression::FormatDeserialize(ExpressionType type,
53
+ FormatDeserializer &deserializer) {
54
+ auto expression = make_unique<ParameterExpression>();
55
+ expression->parameter_nr = deserializer.ReadProperty<idx_t>("parameter_nr");
56
+ return std::move(expression);
57
+ }
58
+
44
59
  } // namespace duckdb
@@ -5,6 +5,9 @@
5
5
  #include "duckdb/common/types/hash.hpp"
6
6
  #include "duckdb/common/to_string.hpp"
7
7
 
8
+ #include "duckdb/common/serializer/format_serializer.hpp"
9
+ #include "duckdb/common/serializer/format_deserializer.hpp"
10
+
8
11
  namespace duckdb {
9
12
 
10
13
  PositionalReferenceExpression::PositionalReferenceExpression(idx_t index)
@@ -40,4 +43,15 @@ unique_ptr<ParsedExpression> PositionalReferenceExpression::Deserialize(Expressi
40
43
  return std::move(expression);
41
44
  }
42
45
 
46
+ void PositionalReferenceExpression::FormatSerialize(FormatSerializer &serializer) const {
47
+ ParsedExpression::FormatSerialize(serializer);
48
+ serializer.WriteProperty("index", index);
49
+ }
50
+
51
+ unique_ptr<ParsedExpression> PositionalReferenceExpression::FormatDeserialize(ExpressionType type,
52
+ FormatDeserializer &deserializer) {
53
+ auto expression = make_unique<PositionalReferenceExpression>(deserializer.ReadProperty<idx_t>("index"));
54
+ return std::move(expression);
55
+ }
56
+
43
57
  } // namespace duckdb
@@ -3,6 +3,9 @@
3
3
  #include "duckdb/common/exception.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
5
 
6
+ #include "duckdb/common/serializer/format_serializer.hpp"
7
+ #include "duckdb/common/serializer/format_deserializer.hpp"
8
+
6
9
  namespace duckdb {
7
10
 
8
11
  StarExpression::StarExpression(string relation_name_p)
@@ -128,4 +131,21 @@ unique_ptr<ParsedExpression> StarExpression::Copy() const {
128
131
  return std::move(copy);
129
132
  }
130
133
 
134
+ void StarExpression::FormatSerialize(FormatSerializer &serializer) const {
135
+ ParsedExpression::FormatSerialize(serializer);
136
+ serializer.WriteProperty("relation_name", relation_name);
137
+ serializer.WriteProperty("exclude_list", exclude_list);
138
+ serializer.WriteProperty("replace_list", replace_list);
139
+ serializer.WriteProperty("columns", columns);
140
+ }
141
+
142
+ unique_ptr<ParsedExpression> StarExpression::FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer) {
143
+ auto result = make_unique<StarExpression>();
144
+ deserializer.ReadProperty("relation_name", result->relation_name);
145
+ deserializer.ReadProperty("exclude_list", result->exclude_list);
146
+ deserializer.ReadProperty("replace_list", result->replace_list);
147
+ deserializer.ReadProperty("columns", result->columns);
148
+ return std::move(result);
149
+ }
150
+
131
151
  } // namespace duckdb
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/exception.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
6
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -72,4 +74,22 @@ unique_ptr<ParsedExpression> SubqueryExpression::Deserialize(ExpressionType type
72
74
  return std::move(expression);
73
75
  }
74
76
 
77
+ void SubqueryExpression::FormatSerialize(FormatSerializer &serializer) const {
78
+ ParsedExpression::FormatSerialize(serializer);
79
+ serializer.WriteProperty("subquery_type", subquery_type);
80
+ serializer.WriteProperty("subquery", *subquery.get());
81
+ serializer.WriteOptionalProperty("child", child);
82
+ serializer.WriteProperty("comparison_type", comparison_type);
83
+ }
84
+
85
+ unique_ptr<ParsedExpression> SubqueryExpression::FormatDeserialize(ExpressionType type,
86
+ FormatDeserializer &deserializer) {
87
+ auto expression = make_unique<SubqueryExpression>();
88
+ deserializer.ReadProperty("subquery_type", expression->subquery_type);
89
+ deserializer.ReadProperty("subquery", expression->subquery);
90
+ deserializer.ReadOptionalProperty("child", expression->child);
91
+ deserializer.ReadProperty("comparison_type", expression->comparison_type);
92
+ return std::move(expression);
93
+ }
94
+
75
95
  } // namespace duckdb
@@ -4,6 +4,10 @@
4
4
  #include "duckdb/common/field_writer.hpp"
5
5
  #include "duckdb/common/string_util.hpp"
6
6
 
7
+ #include "duckdb/common/serializer/enum_serializer.hpp"
8
+ #include "duckdb/common/serializer/format_serializer.hpp"
9
+ #include "duckdb/common/serializer/format_deserializer.hpp"
10
+
7
11
  namespace duckdb {
8
12
 
9
13
  WindowExpression::WindowExpression(ExpressionType type, string catalog_name, string schema, const string &function_name)
@@ -139,6 +143,45 @@ void WindowExpression::Serialize(FieldWriter &writer) const {
139
143
  writer.WriteString(catalog);
140
144
  }
141
145
 
146
+ void WindowExpression::FormatSerialize(FormatSerializer &serializer) const {
147
+ ParsedExpression::FormatSerialize(serializer);
148
+ serializer.WriteProperty("function_name", function_name);
149
+ serializer.WriteProperty("schema", schema);
150
+ serializer.WriteProperty("children", children);
151
+ serializer.WriteProperty("partitions", partitions);
152
+ serializer.WriteProperty("orders", orders);
153
+ serializer.WriteProperty("start", start);
154
+ serializer.WriteProperty("end", end);
155
+ serializer.WriteOptionalProperty("start_expr", start_expr);
156
+ serializer.WriteOptionalProperty("end_expr", end_expr);
157
+ serializer.WriteOptionalProperty("offset_expr", offset_expr);
158
+ serializer.WriteOptionalProperty("default_expr", default_expr);
159
+ serializer.WriteProperty("ignore_nulls", ignore_nulls);
160
+ serializer.WriteOptionalProperty("filter_expr", filter_expr);
161
+ serializer.WriteProperty("catalog", catalog);
162
+ }
163
+
164
+ unique_ptr<ParsedExpression> WindowExpression::FormatDeserialize(ExpressionType type,
165
+ FormatDeserializer &deserializer) {
166
+ auto function_name = deserializer.ReadProperty<string>("function_name");
167
+ auto schema = deserializer.ReadProperty<string>("schema");
168
+ auto expr = make_unique<WindowExpression>(type, INVALID_CATALOG, std::move(schema), function_name);
169
+
170
+ deserializer.ReadProperty("children", expr->children);
171
+ deserializer.ReadProperty("partitions", expr->partitions);
172
+ deserializer.ReadProperty("orders", expr->orders);
173
+ deserializer.ReadProperty("start", expr->start);
174
+ deserializer.ReadProperty("end", expr->end);
175
+ deserializer.ReadOptionalProperty("start_expr", expr->start_expr);
176
+ deserializer.ReadOptionalProperty("end_expr", expr->end_expr);
177
+ deserializer.ReadOptionalProperty("offset_expr", expr->offset_expr);
178
+ deserializer.ReadOptionalProperty("default_expr", expr->default_expr);
179
+ deserializer.ReadProperty("ignore_nulls", expr->ignore_nulls);
180
+ deserializer.ReadOptionalProperty("filter_expr", expr->filter_expr);
181
+ deserializer.ReadProperty("catalog", expr->catalog);
182
+ return std::move(expr);
183
+ }
184
+
142
185
  unique_ptr<ParsedExpression> WindowExpression::Deserialize(ExpressionType type, FieldReader &reader) {
143
186
  auto function_name = reader.ReadRequired<string>();
144
187
  auto schema = reader.ReadRequired<string>();
@@ -1,19 +1,13 @@
1
1
  #include "duckdb/parser/parsed_data/sample_options.hpp"
2
2
  #include "duckdb/common/field_writer.hpp"
3
+ #include "duckdb/common/serializer/enum_serializer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
3
6
 
4
7
  namespace duckdb {
5
8
 
6
9
  string SampleMethodToString(SampleMethod method) {
7
- switch (method) {
8
- case SampleMethod::SYSTEM_SAMPLE:
9
- return "System";
10
- case SampleMethod::BERNOULLI_SAMPLE:
11
- return "Bernoulli";
12
- case SampleMethod::RESERVOIR_SAMPLE:
13
- return "Reservoir";
14
- default:
15
- return "Unknown";
16
- }
10
+ return EnumSerializer::EnumToString(method);
17
11
  }
18
12
 
19
13
  void SampleOptions::Serialize(Serializer &serializer) {
@@ -25,6 +19,24 @@ void SampleOptions::Serialize(Serializer &serializer) {
25
19
  writer.Finalize();
26
20
  }
27
21
 
22
+ void SampleOptions::FormatSerialize(FormatSerializer &serializer) const {
23
+ serializer.WriteProperty("sample_size", sample_size);
24
+ serializer.WriteProperty("is_percentage", is_percentage);
25
+ serializer.WriteProperty("method", method);
26
+ serializer.WriteProperty("seed", seed);
27
+ }
28
+
29
+ std::unique_ptr<SampleOptions> SampleOptions::FormatDeserialize(FormatDeserializer &deserializer) {
30
+ auto result = make_unique<SampleOptions>();
31
+
32
+ deserializer.ReadProperty("sample_size", result->sample_size);
33
+ deserializer.ReadProperty("is_percentage", result->is_percentage);
34
+ deserializer.ReadProperty("method", result->method);
35
+ deserializer.ReadProperty("seed", result->seed);
36
+
37
+ return result;
38
+ }
39
+
28
40
  unique_ptr<SampleOptions> SampleOptions::Deserialize(Deserializer &source) {
29
41
  auto result = make_unique<SampleOptions>();
30
42
 
@@ -5,6 +5,8 @@
5
5
  #include "duckdb/common/types/hash.hpp"
6
6
  #include "duckdb/parser/expression/list.hpp"
7
7
  #include "duckdb/parser/parsed_expression_iterator.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
 
@@ -107,6 +109,76 @@ void ParsedExpression::Serialize(Serializer &serializer) const {
107
109
  writer.Finalize();
108
110
  }
109
111
 
112
+ void ParsedExpression::FormatSerialize(FormatSerializer &serializer) const {
113
+ serializer.WriteProperty("class", GetExpressionClass());
114
+ serializer.WriteProperty("type", type);
115
+ serializer.WriteProperty("alias", alias);
116
+ }
117
+
118
+ unique_ptr<ParsedExpression> ParsedExpression::FormatDeserialize(FormatDeserializer &deserializer) {
119
+ auto expression_class = deserializer.ReadProperty<ExpressionClass>("class");
120
+ auto type = deserializer.ReadProperty<ExpressionType>("type");
121
+ auto alias = deserializer.ReadProperty<string>("alias");
122
+ unique_ptr<ParsedExpression> result;
123
+ switch (expression_class) {
124
+ case ExpressionClass::BETWEEN:
125
+ result = BetweenExpression::FormatDeserialize(type, deserializer);
126
+ break;
127
+ case ExpressionClass::CASE:
128
+ result = CaseExpression::FormatDeserialize(type, deserializer);
129
+ break;
130
+ case ExpressionClass::CAST:
131
+ result = CastExpression::FormatDeserialize(type, deserializer);
132
+ break;
133
+ case ExpressionClass::COLLATE:
134
+ result = CollateExpression::FormatDeserialize(type, deserializer);
135
+ break;
136
+ case ExpressionClass::COLUMN_REF:
137
+ result = ColumnRefExpression::FormatDeserialize(type, deserializer);
138
+ break;
139
+ case ExpressionClass::COMPARISON:
140
+ result = ComparisonExpression::FormatDeserialize(type, deserializer);
141
+ break;
142
+ case ExpressionClass::CONJUNCTION:
143
+ result = ConjunctionExpression::FormatDeserialize(type, deserializer);
144
+ break;
145
+ case ExpressionClass::CONSTANT:
146
+ result = ConstantExpression::FormatDeserialize(type, deserializer);
147
+ break;
148
+ case ExpressionClass::DEFAULT:
149
+ result = make_unique<DefaultExpression>();
150
+ break;
151
+ case ExpressionClass::FUNCTION:
152
+ result = FunctionExpression::FormatDeserialize(type, deserializer);
153
+ break;
154
+ case ExpressionClass::LAMBDA:
155
+ result = LambdaExpression::FormatDeserialize(type, deserializer);
156
+ break;
157
+ case ExpressionClass::OPERATOR:
158
+ result = OperatorExpression::FormatDeserialize(type, deserializer);
159
+ break;
160
+ case ExpressionClass::PARAMETER:
161
+ result = ParameterExpression::FormatDeserialize(type, deserializer);
162
+ break;
163
+ case ExpressionClass::POSITIONAL_REFERENCE:
164
+ result = PositionalReferenceExpression::FormatDeserialize(type, deserializer);
165
+ break;
166
+ case ExpressionClass::STAR:
167
+ result = StarExpression::FormatDeserialize(type, deserializer);
168
+ break;
169
+ case ExpressionClass::SUBQUERY:
170
+ result = SubqueryExpression::FormatDeserialize(type, deserializer);
171
+ break;
172
+ case ExpressionClass::WINDOW:
173
+ result = WindowExpression::FormatDeserialize(type, deserializer);
174
+ break;
175
+ default:
176
+ throw SerializationException("Unsupported type for expression deserialization!");
177
+ }
178
+ result->alias = alias;
179
+ return result;
180
+ }
181
+
110
182
  unique_ptr<ParsedExpression> ParsedExpression::Deserialize(Deserializer &source) {
111
183
  FieldReader reader(source);
112
184
  auto expression_class = reader.ReadRequired<ExpressionClass>();
@@ -1,5 +1,7 @@
1
1
  #include "duckdb/parser/query_node/recursive_cte_node.hpp"
2
2
  #include "duckdb/common/field_writer.hpp"
3
+ #include "duckdb/common/serializer/format_serializer.hpp"
4
+ #include "duckdb/common/serializer/format_deserializer.hpp"
3
5
 
4
6
  namespace duckdb {
5
7
 
@@ -64,4 +66,23 @@ unique_ptr<QueryNode> RecursiveCTENode::Deserialize(FieldReader &reader) {
64
66
  return std::move(result);
65
67
  }
66
68
 
69
+ void RecursiveCTENode::FormatSerialize(FormatSerializer &serializer) const {
70
+ QueryNode::FormatSerialize(serializer);
71
+ serializer.WriteProperty("cte_name", ctename);
72
+ serializer.WriteProperty("union_all", union_all);
73
+ serializer.WriteProperty("left", *left);
74
+ serializer.WriteProperty("right", *right);
75
+ serializer.WriteProperty("aliases", aliases);
76
+ }
77
+
78
+ unique_ptr<QueryNode> RecursiveCTENode::FormatDeserialize(FormatDeserializer &deserializer) {
79
+ auto result = make_unique<RecursiveCTENode>();
80
+ deserializer.ReadProperty("cte_name", result->ctename);
81
+ deserializer.ReadProperty("union_all", result->union_all);
82
+ deserializer.ReadProperty("left", result->left);
83
+ deserializer.ReadProperty("right", result->right);
84
+ deserializer.ReadProperty("aliases", result->aliases);
85
+ return std::move(result);
86
+ }
87
+
67
88
  } // namespace duckdb
@@ -2,6 +2,8 @@
2
2
  #include "duckdb/parser/expression_util.hpp"
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
 
@@ -192,6 +194,35 @@ void SelectNode::Serialize(FieldWriter &writer) const {
192
194
  writer.WriteOptional(qualify);
193
195
  }
194
196
 
197
+ void SelectNode::FormatSerialize(FormatSerializer &serializer) const {
198
+ QueryNode::FormatSerialize(serializer);
199
+ serializer.WriteProperty("select_list", select_list);
200
+ serializer.WriteOptionalProperty("from_table", from_table);
201
+ serializer.WriteOptionalProperty("where_clause", where_clause);
202
+ serializer.WriteProperty("group_expressions", groups.group_expressions);
203
+ serializer.WriteProperty("group_sets", groups.grouping_sets);
204
+ serializer.WriteProperty("aggregate_handling", aggregate_handling);
205
+ serializer.WriteOptionalProperty("having", having);
206
+ serializer.WriteOptionalProperty("sample", sample);
207
+ serializer.WriteOptionalProperty("qualify", qualify);
208
+ }
209
+
210
+ unique_ptr<QueryNode> SelectNode::FormatDeserialize(FormatDeserializer &deserializer) {
211
+ auto result = make_unique<SelectNode>();
212
+
213
+ deserializer.ReadProperty("select_list", result->select_list);
214
+ deserializer.ReadOptionalProperty("from_table", result->from_table);
215
+ deserializer.ReadOptionalProperty("where_clause", result->where_clause);
216
+ deserializer.ReadProperty("group_expressions", result->groups.group_expressions);
217
+ deserializer.ReadProperty("group_sets", result->groups.grouping_sets);
218
+ deserializer.ReadProperty("aggregate_handling", result->aggregate_handling);
219
+ deserializer.ReadOptionalProperty("having", result->having);
220
+ deserializer.ReadOptionalProperty("sample", result->sample);
221
+ deserializer.ReadOptionalProperty("qualify", result->qualify);
222
+
223
+ return std::move(result);
224
+ }
225
+
195
226
  unique_ptr<QueryNode> SelectNode::Deserialize(FieldReader &reader) {
196
227
  auto result = make_unique<SelectNode>();
197
228
  result->select_list = reader.ReadRequiredSerializableList<ParsedExpression>();
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/query_node/set_operation_node.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
 
@@ -81,4 +83,19 @@ unique_ptr<QueryNode> SetOperationNode::Deserialize(FieldReader &reader) {
81
83
  return std::move(result);
82
84
  }
83
85
 
86
+ void SetOperationNode::FormatSerialize(duckdb::FormatSerializer &serializer) const {
87
+ QueryNode::FormatSerialize(serializer);
88
+ serializer.WriteProperty("set_op_type", setop_type);
89
+ serializer.WriteProperty("left", *left);
90
+ serializer.WriteProperty("right", *right);
91
+ }
92
+
93
+ unique_ptr<QueryNode> SetOperationNode::FormatDeserialize(duckdb::FormatDeserializer &deserializer) {
94
+ auto result = make_unique<SetOperationNode>();
95
+ deserializer.ReadProperty("set_op_type", result->setop_type);
96
+ deserializer.ReadProperty("left", result->left);
97
+ deserializer.ReadProperty("right", result->right);
98
+ return std::move(result);
99
+ }
100
+
84
101
  } // namespace duckdb
@@ -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