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,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
 
@@ -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