duckdb 0.7.2-dev654.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 (161) 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 +2 -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 +12 -4
  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/column_data_collection_segment.cpp +11 -6
  17. package/src/duckdb/src/common/types/value.cpp +117 -0
  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/common/vector_operations/vector_cast.cpp +2 -1
  21. package/src/duckdb/src/execution/aggregate_hashtable.cpp +10 -5
  22. package/src/duckdb/src/execution/expression_executor/execute_cast.cpp +2 -1
  23. package/src/duckdb/src/execution/index/art/art.cpp +5 -5
  24. package/src/duckdb/src/execution/operator/persistent/base_csv_reader.cpp +3 -0
  25. package/src/duckdb/src/execution/partitionable_hashtable.cpp +14 -2
  26. package/src/duckdb/src/function/cast/cast_function_set.cpp +1 -1
  27. package/src/duckdb/src/function/cast/enum_casts.cpp +25 -3
  28. package/src/duckdb/src/function/cast/list_casts.cpp +17 -4
  29. package/src/duckdb/src/function/cast/map_cast.cpp +5 -2
  30. package/src/duckdb/src/function/cast/string_cast.cpp +36 -10
  31. package/src/duckdb/src/function/cast/struct_cast.cpp +23 -3
  32. package/src/duckdb/src/function/cast/union_casts.cpp +33 -7
  33. package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
  34. package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
  35. package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
  36. package/src/duckdb/src/function/table/arrow_conversion.cpp +7 -1
  37. package/src/duckdb/src/function/table/table_scan.cpp +1 -1
  38. package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
  39. package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
  40. package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
  41. package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -0
  42. package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
  43. package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
  44. package/src/duckdb/src/include/duckdb/common/exception.hpp +40 -9
  45. package/src/duckdb/src/include/duckdb/common/optional_ptr.hpp +45 -0
  46. package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +3 -0
  47. package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
  48. package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
  49. package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
  50. package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
  51. package/src/duckdb/src/include/duckdb/common/string_util.hpp +12 -0
  52. package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -0
  53. package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -0
  54. package/src/duckdb/src/include/duckdb/common/types.hpp +8 -2
  55. package/src/duckdb/src/include/duckdb/execution/aggregate_hashtable.hpp +1 -0
  56. package/src/duckdb/src/include/duckdb/execution/index/art/art.hpp +2 -2
  57. package/src/duckdb/src/include/duckdb/execution/partitionable_hashtable.hpp +3 -0
  58. package/src/duckdb/src/include/duckdb/function/cast/bound_cast_data.hpp +84 -0
  59. package/src/duckdb/src/include/duckdb/function/cast/cast_function_set.hpp +2 -2
  60. package/src/duckdb/src/include/duckdb/function/cast/default_casts.hpp +28 -64
  61. package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
  62. package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
  63. package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
  64. package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
  65. package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
  66. package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
  67. package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
  68. package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
  69. package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
  70. package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
  71. package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
  72. package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
  73. package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
  74. package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -0
  75. package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
  76. package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
  77. package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
  78. package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
  79. package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +2 -0
  80. package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
  81. package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
  82. package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
  83. package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
  84. package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
  85. package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
  86. package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
  87. package/src/duckdb/src/include/duckdb/parser/query_node.hpp +11 -1
  88. package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
  89. package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
  90. package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
  91. package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
  92. package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
  93. package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
  94. package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
  95. package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +9 -0
  96. package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
  97. package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
  98. package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
  99. package/src/duckdb/src/include/duckdb/storage/data_table.hpp +2 -2
  100. package/src/duckdb/src/include/duckdb/storage/index.hpp +4 -3
  101. package/src/duckdb/src/include/duckdb/transaction/local_storage.hpp +2 -2
  102. package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
  103. package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
  104. package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
  105. package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -3
  106. package/src/duckdb/src/optimizer/rule/move_constants.cpp +2 -2
  107. package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -1
  108. package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
  109. package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
  110. package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
  111. package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
  112. package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
  113. package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
  114. package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
  115. package/src/duckdb/src/parser/expression/conjunction_expression.cpp +15 -0
  116. package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
  117. package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
  118. package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
  119. package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
  120. package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
  121. package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
  122. package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
  123. package/src/duckdb/src/parser/expression/star_expression.cpp +20 -0
  124. package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
  125. package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
  126. package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
  127. package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
  128. package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
  129. package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
  130. package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
  131. package/src/duckdb/src/parser/query_node.cpp +50 -0
  132. package/src/duckdb/src/parser/result_modifier.cpp +78 -0
  133. package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
  134. package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
  135. package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
  136. package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
  137. package/src/duckdb/src/parser/tableref/joinref.cpp +25 -0
  138. package/src/duckdb/src/parser/tableref/pivotref.cpp +53 -0
  139. package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
  140. package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
  141. package/src/duckdb/src/parser/tableref.cpp +46 -0
  142. package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
  143. package/src/duckdb/src/parser/transform/expression/transform_function.cpp +1 -1
  144. package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
  145. package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
  146. package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
  147. package/src/duckdb/src/planner/binder/statement/bind_copy.cpp +3 -1
  148. package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +1 -1
  149. package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
  150. package/src/duckdb/src/storage/data_table.cpp +15 -13
  151. package/src/duckdb/src/storage/index.cpp +12 -1
  152. package/src/duckdb/src/storage/local_storage.cpp +20 -23
  153. package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
  154. package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
  155. package/src/duckdb/third_party/re2/re2/re2.h +2 -0
  156. package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
  157. package/src/duckdb/ub_src_common_serializer.cpp +2 -0
  158. package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
  159. package/src/duckdb/ub_src_parser.cpp +2 -0
  160. package/src/utils.cpp +12 -0
  161. package/test/extension.test.ts +44 -26
@@ -1,5 +1,7 @@
1
1
  #include "duckdb/parser/expression/between_expression.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
 
@@ -45,4 +47,19 @@ unique_ptr<ParsedExpression> BetweenExpression::Deserialize(ExpressionType type,
45
47
  return make_unique<BetweenExpression>(std::move(input), std::move(lower), std::move(upper));
46
48
  }
47
49
 
50
+ void BetweenExpression::FormatSerialize(FormatSerializer &serializer) const {
51
+ ParsedExpression::FormatSerialize(serializer);
52
+ serializer.WriteProperty("input", *input);
53
+ serializer.WriteProperty("lower", *lower);
54
+ serializer.WriteProperty("upper", *upper);
55
+ }
56
+
57
+ unique_ptr<ParsedExpression> BetweenExpression::FormatDeserialize(ExpressionType type,
58
+ FormatDeserializer &deserializer) {
59
+ auto input = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("input");
60
+ auto lower = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("lower");
61
+ auto upper = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("upper");
62
+ return make_unique<BetweenExpression>(std::move(input), std::move(lower), std::move(upper));
63
+ }
64
+
48
65
  } // namespace duckdb
@@ -3,8 +3,23 @@
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
 
11
+ void CaseCheck::FormatSerialize(FormatSerializer &serializer) const {
12
+ serializer.WriteProperty("when_expr", when_expr);
13
+ serializer.WriteProperty("then_expr", then_expr);
14
+ }
15
+
16
+ CaseCheck CaseCheck::FormatDeserialize(FormatDeserializer &deserializer) {
17
+ CaseCheck check;
18
+ deserializer.ReadProperty("when_expr", check.when_expr);
19
+ deserializer.ReadProperty("then_expr", check.then_expr);
20
+ return check;
21
+ }
22
+
8
23
  CaseExpression::CaseExpression() : ParsedExpression(ExpressionType::CASE_EXPR, ExpressionClass::CASE) {
9
24
  }
10
25
 
@@ -69,4 +84,17 @@ unique_ptr<ParsedExpression> CaseExpression::Deserialize(ExpressionType type, Fi
69
84
  return std::move(result);
70
85
  }
71
86
 
87
+ void CaseExpression::FormatSerialize(FormatSerializer &serializer) const {
88
+ ParsedExpression::FormatSerialize(serializer);
89
+ serializer.WriteProperty("case_checks", case_checks);
90
+ serializer.WriteProperty("else_expr", *else_expr);
91
+ }
92
+
93
+ unique_ptr<ParsedExpression> CaseExpression::FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer) {
94
+ auto result = make_unique<CaseExpression>();
95
+ deserializer.ReadProperty("case_checks", result->case_checks);
96
+ deserializer.ReadProperty("else_expr", result->else_expr);
97
+ return std::move(result);
98
+ }
99
+
72
100
  } // 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
  CastExpression::CastExpression(LogicalType target, unique_ptr<ParsedExpression> child, bool try_cast_p)
@@ -48,4 +51,18 @@ unique_ptr<ParsedExpression> CastExpression::Deserialize(ExpressionType type, Fi
48
51
  return make_unique_base<ParsedExpression, CastExpression>(cast_type, std::move(child), try_cast);
49
52
  }
50
53
 
54
+ void CastExpression::FormatSerialize(FormatSerializer &serializer) const {
55
+ ParsedExpression::FormatSerialize(serializer);
56
+ serializer.WriteProperty("child", *child);
57
+ serializer.WriteProperty("cast_type", cast_type);
58
+ serializer.WriteProperty("try_cast", try_cast);
59
+ }
60
+
61
+ unique_ptr<ParsedExpression> CastExpression::FormatDeserialize(ExpressionType type, FormatDeserializer &deserializer) {
62
+ auto child = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("child");
63
+ auto cast_type = deserializer.ReadProperty<LogicalType>("cast_type");
64
+ auto try_cast = deserializer.ReadProperty<bool>("try_cast");
65
+ return make_unique_base<ParsedExpression, CastExpression>(cast_type, std::move(child), try_cast);
66
+ }
67
+
51
68
  } // 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
  CollateExpression::CollateExpression(string collation_p, unique_ptr<ParsedExpression> child)
@@ -42,4 +45,17 @@ unique_ptr<ParsedExpression> CollateExpression::Deserialize(ExpressionType type,
42
45
  return make_unique_base<ParsedExpression, CollateExpression>(collation, std::move(child));
43
46
  }
44
47
 
48
+ void CollateExpression::FormatSerialize(FormatSerializer &serializer) const {
49
+ ParsedExpression::FormatSerialize(serializer);
50
+ serializer.WriteProperty("child", *child);
51
+ serializer.WriteProperty("collation", collation);
52
+ }
53
+
54
+ unique_ptr<ParsedExpression> CollateExpression::FormatDeserialize(ExpressionType type,
55
+ FormatDeserializer &deserializer) {
56
+ auto child = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("child");
57
+ auto collation = deserializer.ReadProperty<string>("collation");
58
+ return make_unique_base<ParsedExpression, CollateExpression>(collation, std::move(child));
59
+ }
60
+
45
61
  } // namespace duckdb
@@ -5,6 +5,9 @@
5
5
  #include "duckdb/common/string_util.hpp"
6
6
  #include "duckdb/parser/qualified_name.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
  ColumnRefExpression::ColumnRefExpression(string column_name, string table_name)
@@ -100,4 +103,16 @@ unique_ptr<ParsedExpression> ColumnRefExpression::Deserialize(ExpressionType typ
100
103
  return std::move(expression);
101
104
  }
102
105
 
106
+ void ColumnRefExpression::FormatSerialize(FormatSerializer &serializer) const {
107
+ ParsedExpression::FormatSerialize(serializer);
108
+ serializer.WriteProperty("column_names", column_names);
109
+ }
110
+
111
+ unique_ptr<ParsedExpression> ColumnRefExpression::FormatDeserialize(ExpressionType type,
112
+ FormatDeserializer &deserializer) {
113
+ auto column_names = deserializer.ReadProperty<vector<string>>("column_names");
114
+ auto expression = make_unique<ColumnRefExpression>(std::move(column_names));
115
+ return std::move(expression);
116
+ }
117
+
103
118
  } // namespace duckdb
@@ -4,6 +4,9 @@
4
4
  #include "duckdb/common/field_writer.hpp"
5
5
  #include "duckdb/parser/expression/cast_expression.hpp"
6
6
 
7
+ #include "duckdb/common/serializer/format_serializer.hpp"
8
+ #include "duckdb/common/serializer/format_deserializer.hpp"
9
+
7
10
  namespace duckdb {
8
11
 
9
12
  ComparisonExpression::ComparisonExpression(ExpressionType type, unique_ptr<ParsedExpression> left,
@@ -42,4 +45,17 @@ unique_ptr<ParsedExpression> ComparisonExpression::Deserialize(ExpressionType ty
42
45
  return make_unique<ComparisonExpression>(type, std::move(left_child), std::move(right_child));
43
46
  }
44
47
 
48
+ void ComparisonExpression::FormatSerialize(FormatSerializer &serializer) const {
49
+ ParsedExpression::FormatSerialize(serializer);
50
+ serializer.WriteProperty("left", *left);
51
+ serializer.WriteProperty("right", *right);
52
+ }
53
+
54
+ unique_ptr<ParsedExpression> ComparisonExpression::FormatDeserialize(ExpressionType type,
55
+ FormatDeserializer &deserializer) {
56
+ auto left = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("left");
57
+ auto right = deserializer.ReadProperty<unique_ptr<ParsedExpression>>("right");
58
+ return make_unique<ComparisonExpression>(type, std::move(left), std::move(right));
59
+ }
60
+
45
61
  } // namespace duckdb
@@ -3,6 +3,9 @@
3
3
  #include "duckdb/common/field_writer.hpp"
4
4
  #include "duckdb/parser/expression_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
  ConjunctionExpression::ConjunctionExpression(ExpressionType type)
@@ -65,4 +68,16 @@ unique_ptr<ParsedExpression> ConjunctionExpression::Deserialize(ExpressionType t
65
68
  return std::move(result);
66
69
  }
67
70
 
71
+ void ConjunctionExpression::FormatSerialize(FormatSerializer &serializer) const {
72
+ ParsedExpression::FormatSerialize(serializer);
73
+ serializer.WriteProperty("children", children);
74
+ }
75
+
76
+ unique_ptr<ParsedExpression> ConjunctionExpression::FormatDeserialize(ExpressionType type,
77
+ FormatDeserializer &deserializer) {
78
+ auto result = make_unique<ConjunctionExpression>(type);
79
+ result->children = deserializer.ReadProperty<vector<unique_ptr<ParsedExpression>>>("children");
80
+ return std::move(result);
81
+ }
82
+
68
83
  } // namespace duckdb
@@ -5,6 +5,9 @@
5
5
  #include "duckdb/common/types/hash.hpp"
6
6
  #include "duckdb/common/value_operations/value_operations.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
  ConstantExpression::ConstantExpression(Value val)
@@ -38,4 +41,15 @@ unique_ptr<ParsedExpression> ConstantExpression::Deserialize(ExpressionType type
38
41
  return make_unique<ConstantExpression>(std::move(value));
39
42
  }
40
43
 
44
+ void ConstantExpression::FormatSerialize(FormatSerializer &serializer) const {
45
+ ParsedExpression::FormatSerialize(serializer);
46
+ serializer.WriteProperty("value", value);
47
+ }
48
+
49
+ unique_ptr<ParsedExpression> ConstantExpression::FormatDeserialize(ExpressionType type,
50
+ FormatDeserializer &deserializer) {
51
+ auto value = deserializer.ReadProperty<Value>("value");
52
+ return make_unique<ConstantExpression>(std::move(value));
53
+ }
54
+
41
55
  } // namespace duckdb
@@ -2,6 +2,9 @@
2
2
 
3
3
  #include "duckdb/common/exception.hpp"
4
4
 
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
7
+
5
8
  namespace duckdb {
6
9
 
7
10
  DefaultExpression::DefaultExpression() : ParsedExpression(ExpressionType::VALUE_DEFAULT, ExpressionClass::DEFAULT) {
@@ -24,4 +27,8 @@ unique_ptr<ParsedExpression> DefaultExpression::Deserialize(ExpressionType type,
24
27
  return make_unique<DefaultExpression>();
25
28
  }
26
29
 
30
+ void DefaultExpression::FormatSerialize(FormatSerializer &serializer) const {
31
+ ParsedExpression::FormatSerialize(serializer);
32
+ }
33
+
27
34
  } // namespace duckdb
@@ -6,6 +6,9 @@
6
6
  #include "duckdb/common/field_writer.hpp"
7
7
  #include "duckdb/common/types/hash.hpp"
8
8
 
9
+ #include "duckdb/common/serializer/format_serializer.hpp"
10
+ #include "duckdb/common/serializer/format_deserializer.hpp"
11
+
9
12
  namespace duckdb {
10
13
 
11
14
  FunctionExpression::FunctionExpression(string catalog, string schema, const string &function_name,
@@ -122,4 +125,36 @@ void FunctionExpression::Verify() const {
122
125
  D_ASSERT(!function_name.empty());
123
126
  }
124
127
 
128
+ void FunctionExpression::FormatSerialize(FormatSerializer &serializer) const {
129
+ ParsedExpression::FormatSerialize(serializer);
130
+ serializer.WriteProperty("function_name", function_name);
131
+ serializer.WriteProperty("schema", schema);
132
+ serializer.WriteProperty("children", children);
133
+ serializer.WriteOptionalProperty("filter", filter);
134
+ serializer.WriteProperty("order_bys", (ResultModifier &)*order_bys);
135
+ serializer.WriteProperty("distinct", distinct);
136
+ serializer.WriteProperty("is_operator", is_operator);
137
+ serializer.WriteProperty("export_state", export_state);
138
+ serializer.WriteProperty("catalog", catalog);
139
+ }
140
+
141
+ unique_ptr<ParsedExpression> FunctionExpression::FormatDeserialize(ExpressionType type,
142
+ FormatDeserializer &deserializer) {
143
+ auto function_name = deserializer.ReadProperty<string>("function_name");
144
+ auto schema = deserializer.ReadProperty<string>("schema");
145
+ auto children = deserializer.ReadProperty<vector<unique_ptr<ParsedExpression>>>("children");
146
+ auto filter = deserializer.ReadOptionalProperty<unique_ptr<ParsedExpression>>("filter");
147
+ auto order_bys = unique_ptr_cast<ResultModifier, OrderModifier>(
148
+ deserializer.ReadProperty<unique_ptr<ResultModifier>>("order_bys"));
149
+ auto distinct = deserializer.ReadProperty<bool>("distinct");
150
+ auto is_operator = deserializer.ReadProperty<bool>("is_operator");
151
+ auto export_state = deserializer.ReadProperty<bool>("export_state");
152
+ auto catalog = deserializer.ReadProperty<string>("catalog");
153
+
154
+ unique_ptr<FunctionExpression> function;
155
+ function = make_unique<FunctionExpression>(catalog, schema, function_name, std::move(children), std::move(filter),
156
+ std::move(order_bys), distinct, is_operator, export_state);
157
+ return std::move(function);
158
+ }
159
+
125
160
  } // namespace duckdb
@@ -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