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
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/result_modifier.hpp"
2
2
  #include "duckdb/common/field_writer.hpp"
3
3
  #include "duckdb/parser/expression_util.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -18,6 +20,33 @@ void ResultModifier::Serialize(Serializer &serializer) const {
18
20
  writer.Finalize();
19
21
  }
20
22
 
23
+ void ResultModifier::FormatSerialize(FormatSerializer &serializer) const {
24
+ serializer.WriteProperty("type", type);
25
+ }
26
+
27
+ std::unique_ptr<ResultModifier> ResultModifier::FormatDeserialize(FormatDeserializer &deserializer) {
28
+ auto type = deserializer.ReadProperty<ResultModifierType>("type");
29
+
30
+ unique_ptr<ResultModifier> result;
31
+ switch (type) {
32
+ case ResultModifierType::LIMIT_MODIFIER:
33
+ result = LimitModifier::FormatDeserialize(deserializer);
34
+ break;
35
+ case ResultModifierType::ORDER_MODIFIER:
36
+ result = OrderModifier::FormatDeserialize(deserializer);
37
+ break;
38
+ case ResultModifierType::DISTINCT_MODIFIER:
39
+ result = DistinctModifier::FormatDeserialize(deserializer);
40
+ break;
41
+ case ResultModifierType::LIMIT_PERCENT_MODIFIER:
42
+ result = LimitPercentModifier::FormatDeserialize(deserializer);
43
+ break;
44
+ default:
45
+ throw InternalException("Unrecognized ResultModifierType for Deserialization");
46
+ }
47
+ return result;
48
+ }
49
+
21
50
  unique_ptr<ResultModifier> ResultModifier::Deserialize(Deserializer &source) {
22
51
  FieldReader reader(source);
23
52
  auto type = reader.ReadRequired<ResultModifierType>();
@@ -73,6 +102,16 @@ void LimitModifier::Serialize(FieldWriter &writer) const {
73
102
  writer.WriteOptional(offset);
74
103
  }
75
104
 
105
+ void LimitModifier::FormatSerialize(FormatSerializer &serializer) const {
106
+ ResultModifier::FormatSerialize(serializer);
107
+ serializer.WriteOptionalProperty("limit", limit);
108
+ serializer.WriteOptionalProperty("offset", offset);
109
+ }
110
+
111
+ unique_ptr<ResultModifier> LimitModifier::FormatDeserialize(FormatDeserializer &deserializer) {
112
+ throw NotImplementedException("err");
113
+ }
114
+
76
115
  unique_ptr<ResultModifier> LimitModifier::Deserialize(FieldReader &reader) {
77
116
  auto mod = make_unique<LimitModifier>();
78
117
  mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
@@ -103,6 +142,16 @@ void DistinctModifier::Serialize(FieldWriter &writer) const {
103
142
  writer.WriteSerializableList(distinct_on_targets);
104
143
  }
105
144
 
145
+ void DistinctModifier::FormatSerialize(duckdb::FormatSerializer &serializer) const {
146
+ ResultModifier::FormatSerialize(serializer);
147
+ serializer.WriteProperty("distinct_on_targets", distinct_on_targets);
148
+ }
149
+
150
+ unique_ptr<ResultModifier> DistinctModifier::FormatDeserialize(FormatDeserializer &deserializer) {
151
+ auto mod = make_unique<DistinctModifier>();
152
+ throw NotImplementedException("");
153
+ }
154
+
106
155
  unique_ptr<ResultModifier> DistinctModifier::Deserialize(FieldReader &reader) {
107
156
  auto mod = make_unique<DistinctModifier>();
108
157
  mod->distinct_on_targets = reader.ReadRequiredSerializableList<ParsedExpression>();
@@ -170,6 +219,16 @@ void OrderByNode::Serialize(Serializer &serializer) const {
170
219
  writer.Finalize();
171
220
  }
172
221
 
222
+ void OrderByNode::FormatSerialize(FormatSerializer &serializer) const {
223
+ serializer.WriteProperty("type", type);
224
+ serializer.WriteProperty("null_order", null_order);
225
+ serializer.WriteProperty("expression", expression);
226
+ }
227
+
228
+ OrderByNode OrderByNode::FormatDeserialize(FormatDeserializer &deserializer) {
229
+ throw NotImplementedException("err");
230
+ }
231
+
173
232
  OrderByNode OrderByNode::Deserialize(Deserializer &source) {
174
233
  FieldReader reader(source);
175
234
  auto type = reader.ReadRequired<OrderType>();
@@ -183,6 +242,14 @@ void OrderModifier::Serialize(FieldWriter &writer) const {
183
242
  writer.WriteRegularSerializableList(orders);
184
243
  }
185
244
 
245
+ void OrderModifier::FormatSerialize(FormatSerializer &serializer) const {
246
+ ResultModifier::FormatSerialize(serializer);
247
+ serializer.WriteProperty("orders", orders);
248
+ }
249
+ unique_ptr<ResultModifier> OrderModifier::FormatDeserialize(FormatDeserializer &deserializer) {
250
+ throw NotImplementedException("err");
251
+ }
252
+
186
253
  unique_ptr<ResultModifier> OrderModifier::Deserialize(FieldReader &reader) {
187
254
  auto mod = make_unique<OrderModifier>();
188
255
  mod->orders = reader.ReadRequiredSerializableList<OrderByNode, OrderByNode>();
@@ -219,6 +286,12 @@ void LimitPercentModifier::Serialize(FieldWriter &writer) const {
219
286
  writer.WriteOptional(offset);
220
287
  }
221
288
 
289
+ void LimitPercentModifier::FormatSerialize(FormatSerializer &serializer) const {
290
+ ResultModifier::FormatSerialize(serializer);
291
+ serializer.WriteProperty("limit", limit);
292
+ serializer.WriteProperty("offset", offset);
293
+ }
294
+
222
295
  unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader) {
223
296
  auto mod = make_unique<LimitPercentModifier>();
224
297
  mod->limit = reader.ReadOptional<ParsedExpression>(nullptr);
@@ -226,4 +299,9 @@ unique_ptr<ResultModifier> LimitPercentModifier::Deserialize(FieldReader &reader
226
299
  return std::move(mod);
227
300
  }
228
301
 
302
+ unique_ptr<ResultModifier> LimitPercentModifier::FormatDeserialize(FormatDeserializer &deserializer) {
303
+ auto mod = make_unique<LimitPercentModifier>();
304
+ throw NotImplementedException("err");
305
+ }
306
+
229
307
  } // namespace duckdb
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/statement/select_statement.hpp"
2
2
 
3
3
  #include "duckdb/common/serializer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -15,12 +17,22 @@ void SelectStatement::Serialize(Serializer &serializer) const {
15
17
  node->Serialize(serializer);
16
18
  }
17
19
 
20
+ void SelectStatement::FormatSerialize(FormatSerializer &serializer) const {
21
+ node->FormatSerialize(serializer);
22
+ }
23
+
18
24
  unique_ptr<SelectStatement> SelectStatement::Deserialize(Deserializer &source) {
19
25
  auto result = make_unique<SelectStatement>();
20
26
  result->node = QueryNode::Deserialize(source);
21
27
  return result;
22
28
  }
23
29
 
30
+ unique_ptr<SelectStatement> SelectStatement::FormatDeserialize(FormatDeserializer &deserializer) {
31
+ auto result = make_unique<SelectStatement>();
32
+ deserializer.ReadProperty("node", result->node);
33
+ return result;
34
+ }
35
+
24
36
  bool SelectStatement::Equals(const SQLStatement *other_p) const {
25
37
  if (type != other_p->type) {
26
38
  return false;
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/field_writer.hpp"
4
4
  #include "duckdb/parser/keyword_helper.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -29,6 +31,25 @@ void BaseTableRef::Serialize(FieldWriter &writer) const {
29
31
  writer.WriteString(catalog_name);
30
32
  }
31
33
 
34
+ void BaseTableRef::FormatSerialize(FormatSerializer &serializer) const {
35
+ TableRef::FormatSerialize(serializer);
36
+ serializer.WriteProperty("schema_name", schema_name);
37
+ serializer.WriteProperty("table_name", table_name);
38
+ serializer.WriteProperty("column_name_alias", column_name_alias);
39
+ serializer.WriteProperty("catalog_name", catalog_name);
40
+ }
41
+
42
+ unique_ptr<TableRef> BaseTableRef::FormatDeserialize(FormatDeserializer &deserializer) {
43
+ auto result = make_unique<BaseTableRef>();
44
+
45
+ deserializer.ReadProperty("schema_name", result->schema_name);
46
+ deserializer.ReadProperty("table_name", result->table_name);
47
+ deserializer.ReadProperty("column_name_alias", result->column_name_alias);
48
+ deserializer.ReadProperty("catalog_name", result->catalog_name);
49
+
50
+ return std::move(result);
51
+ }
52
+
32
53
  unique_ptr<TableRef> BaseTableRef::Deserialize(FieldReader &reader) {
33
54
  auto result = make_unique<BaseTableRef>();
34
55
 
@@ -23,4 +23,8 @@ unique_ptr<TableRef> EmptyTableRef::Deserialize(FieldReader &reader) {
23
23
  return make_unique<EmptyTableRef>();
24
24
  }
25
25
 
26
+ unique_ptr<TableRef> EmptyTableRef::FormatDeserialize(FormatDeserializer &source) {
27
+ return make_unique<EmptyTableRef>();
28
+ }
29
+
26
30
  } // namespace duckdb
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/tableref/expressionlistref.hpp"
2
2
 
3
3
  #include "duckdb/common/field_writer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -73,6 +75,21 @@ void ExpressionListRef::Serialize(FieldWriter &writer) const {
73
75
  }
74
76
  }
75
77
 
78
+ void ExpressionListRef::FormatSerialize(FormatSerializer &serializer) const {
79
+ TableRef::FormatSerialize(serializer);
80
+ serializer.WriteProperty("expected_names", expected_names);
81
+ serializer.WriteProperty("expected_types", expected_types);
82
+ serializer.WriteProperty("values", values);
83
+ }
84
+
85
+ unique_ptr<TableRef> ExpressionListRef::FormatDeserialize(FormatDeserializer &source) {
86
+ auto result = make_unique<ExpressionListRef>();
87
+ source.ReadProperty("expected_names", result->expected_names);
88
+ source.ReadProperty("expected_types", result->expected_types);
89
+ source.ReadProperty("values", result->values);
90
+ return std::move(result);
91
+ }
92
+
76
93
  unique_ptr<TableRef> ExpressionListRef::Deserialize(FieldReader &reader) {
77
94
  auto result = make_unique<ExpressionListRef>();
78
95
  // value list
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/limits.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -82,6 +84,29 @@ void JoinRef::Serialize(FieldWriter &writer) const {
82
84
  writer.WriteList<string>(using_columns);
83
85
  }
84
86
 
87
+ void JoinRef::FormatSerialize(FormatSerializer &serializer) const {
88
+ TableRef::FormatSerialize(serializer);
89
+ serializer.WriteProperty("left", *left);
90
+ serializer.WriteProperty("right", *right);
91
+ serializer.WriteOptionalProperty("condition", condition);
92
+ serializer.WriteProperty("join_type", type);
93
+ serializer.WriteProperty("ref_type", ref_type);
94
+ serializer.WriteProperty("using_columns", using_columns);
95
+ }
96
+
97
+ unique_ptr<TableRef> JoinRef::FormatDeserialize(FormatDeserializer &source) {
98
+ auto result = make_unique<JoinRef>(JoinRefType::REGULAR);
99
+
100
+ source.ReadProperty("left", result->left);
101
+ source.ReadProperty("right", result->right);
102
+ source.ReadOptionalProperty("condition", result->condition);
103
+ source.ReadProperty("join_type", result->type);
104
+ source.ReadProperty("ref_type", result->ref_type);
105
+ source.ReadProperty("using_columns", result->using_columns);
106
+
107
+ return std::move(result);
108
+ }
109
+
85
110
  unique_ptr<TableRef> JoinRef::Deserialize(FieldReader &reader) {
86
111
  auto result = make_unique<JoinRef>(JoinRefType::REGULAR);
87
112
  result->left = reader.ReadRequiredSerializable<TableRef>();
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/limits.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -107,6 +109,12 @@ void PivotColumn::Serialize(Serializer &serializer) const {
107
109
  writer.Finalize();
108
110
  }
109
111
 
112
+ void PivotColumn::FormatSerialize(FormatSerializer &serializer) const {
113
+ serializer.WriteProperty("names", names);
114
+ serializer.WriteProperty("entries", entries);
115
+ serializer.WriteProperty("pivot_enum", pivot_enum);
116
+ }
117
+
110
118
  PivotColumn PivotColumn::Deserialize(Deserializer &source) {
111
119
  PivotColumn result;
112
120
  FieldReader reader(source);
@@ -117,6 +125,14 @@ PivotColumn PivotColumn::Deserialize(Deserializer &source) {
117
125
  return result;
118
126
  }
119
127
 
128
+ PivotColumn PivotColumn::FormatDeserialize(FormatDeserializer &source) {
129
+ PivotColumn result;
130
+ source.ReadProperty("names", result.names);
131
+ source.ReadProperty("entries", result.entries);
132
+ source.ReadProperty("pivot_enum", result.pivot_enum);
133
+ return result;
134
+ }
135
+
120
136
  //===--------------------------------------------------------------------===//
121
137
  // PivotColumnEntry
122
138
  //===--------------------------------------------------------------------===//
@@ -136,6 +152,12 @@ void PivotColumnEntry::Serialize(Serializer &serializer) const {
136
152
  writer.Finalize();
137
153
  }
138
154
 
155
+ void PivotColumnEntry::FormatSerialize(FormatSerializer &serializer) const {
156
+ serializer.WriteProperty("values", values);
157
+ serializer.WriteOptionalProperty("star_expr", star_expr);
158
+ serializer.WriteProperty("alias", alias);
159
+ }
160
+
139
161
  PivotColumnEntry PivotColumnEntry::Deserialize(Deserializer &source) {
140
162
  PivotColumnEntry result;
141
163
  FieldReader reader(source);
@@ -146,6 +168,14 @@ PivotColumnEntry PivotColumnEntry::Deserialize(Deserializer &source) {
146
168
  return result;
147
169
  }
148
170
 
171
+ PivotColumnEntry PivotColumnEntry::FormatDeserialize(FormatDeserializer &source) {
172
+ PivotColumnEntry result;
173
+ source.ReadProperty("values", result.values);
174
+ source.ReadOptionalProperty("star_expr", result.star_expr);
175
+ source.ReadProperty("alias", result.alias);
176
+ return result;
177
+ }
178
+
149
179
  //===--------------------------------------------------------------------===//
150
180
  // PivotRef
151
181
  //===--------------------------------------------------------------------===//
@@ -281,6 +311,17 @@ void PivotRef::Serialize(FieldWriter &writer) const {
281
311
  writer.WriteField<bool>(include_nulls);
282
312
  }
283
313
 
314
+ void PivotRef::FormatSerialize(FormatSerializer &serializer) const {
315
+ TableRef::FormatSerialize(serializer);
316
+ serializer.WriteProperty("source", source);
317
+ serializer.WriteProperty("aggregates", aggregates);
318
+ serializer.WriteProperty("unpivot_names", unpivot_names);
319
+ serializer.WriteProperty("pivots", pivots);
320
+ serializer.WriteProperty("groups", groups);
321
+ serializer.WriteProperty("column_name_alias", column_name_alias);
322
+ serializer.WriteProperty("include_nulls", include_nulls);
323
+ }
324
+
284
325
  unique_ptr<TableRef> PivotRef::Deserialize(FieldReader &reader) {
285
326
  auto result = make_unique<PivotRef>();
286
327
  result->source = reader.ReadRequiredSerializable<TableRef>();
@@ -293,4 +334,16 @@ unique_ptr<TableRef> PivotRef::Deserialize(FieldReader &reader) {
293
334
  return std::move(result);
294
335
  }
295
336
 
337
+ unique_ptr<TableRef> PivotRef::FormatDeserialize(FormatDeserializer &source) {
338
+ auto result = make_unique<PivotRef>();
339
+ source.ReadProperty("source", result->source);
340
+ source.ReadProperty("aggregates", result->aggregates);
341
+ source.ReadProperty("unpivot_names", result->unpivot_names);
342
+ source.ReadProperty("pivots", result->pivots);
343
+ source.ReadProperty("groups", result->groups);
344
+ source.ReadProperty("column_name_alias", result->column_name_alias);
345
+ source.ReadProperty("include_nulls", result->include_nulls);
346
+ return std::move(result);
347
+ }
348
+
296
349
  } // namespace duckdb
@@ -2,6 +2,8 @@
2
2
 
3
3
  #include "duckdb/common/limits.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
+ #include "duckdb/common/serializer/format_serializer.hpp"
6
+ #include "duckdb/common/serializer/format_deserializer.hpp"
5
7
 
6
8
  namespace duckdb {
7
9
 
@@ -35,6 +37,19 @@ void SubqueryRef::Serialize(FieldWriter &writer) const {
35
37
  writer.WriteList<string>(column_name_alias);
36
38
  }
37
39
 
40
+ void SubqueryRef::FormatSerialize(FormatSerializer &serializer) const {
41
+ TableRef::FormatSerialize(serializer);
42
+ serializer.WriteProperty("subquery", subquery);
43
+ serializer.WriteProperty("column_name_alias", column_name_alias);
44
+ }
45
+
46
+ unique_ptr<TableRef> SubqueryRef::FormatDeserialize(FormatDeserializer &deserializer) {
47
+ auto subquery = deserializer.ReadProperty<unique_ptr<SelectStatement>>("subquery");
48
+ auto result = make_unique<SubqueryRef>(std::move(subquery));
49
+ deserializer.ReadProperty("column_name_alias", result->column_name_alias);
50
+ return std::move(result);
51
+ }
52
+
38
53
  unique_ptr<TableRef> SubqueryRef::Deserialize(FieldReader &reader) {
39
54
  auto subquery = reader.ReadRequiredSerializable<SelectStatement>();
40
55
  auto result = make_unique<SubqueryRef>(std::move(subquery));
@@ -1,6 +1,8 @@
1
1
  #include "duckdb/parser/tableref/table_function_ref.hpp"
2
2
  #include "duckdb/common/vector.hpp"
3
3
  #include "duckdb/common/field_writer.hpp"
4
+ #include "duckdb/common/serializer/format_serializer.hpp"
5
+ #include "duckdb/common/serializer/format_deserializer.hpp"
4
6
 
5
7
  namespace duckdb {
6
8
 
@@ -25,6 +27,21 @@ void TableFunctionRef::Serialize(FieldWriter &writer) const {
25
27
  writer.WriteList<string>(column_name_alias);
26
28
  }
27
29
 
30
+ void TableFunctionRef::FormatSerialize(FormatSerializer &serializer) const {
31
+ TableRef::FormatSerialize(serializer);
32
+ serializer.WriteProperty("function", function);
33
+ serializer.WriteProperty("alias", alias);
34
+ serializer.WriteProperty("column_name_alias", column_name_alias);
35
+ }
36
+
37
+ unique_ptr<TableRef> TableFunctionRef::FormatDeserialize(FormatDeserializer &deserializer) {
38
+ auto result = make_unique<TableFunctionRef>();
39
+ deserializer.ReadProperty("function", result->function);
40
+ deserializer.ReadProperty("alias", result->alias);
41
+ deserializer.ReadProperty("column_name_alias", result->column_name_alias);
42
+ return std::move(result);
43
+ }
44
+
28
45
  unique_ptr<TableRef> TableFunctionRef::Deserialize(FieldReader &reader) {
29
46
  auto result = make_unique<TableFunctionRef>();
30
47
  result->function = reader.ReadRequiredSerializable<ParsedExpression>();
@@ -3,6 +3,8 @@
3
3
  #include "duckdb/common/printer.hpp"
4
4
  #include "duckdb/common/field_writer.hpp"
5
5
  #include "duckdb/parser/tableref/list.hpp"
6
+ #include "duckdb/common/serializer/format_serializer.hpp"
7
+ #include "duckdb/common/serializer/format_deserializer.hpp"
6
8
  #include "duckdb/common/to_string.hpp"
7
9
 
8
10
  namespace duckdb {
@@ -52,6 +54,50 @@ void TableRef::Serialize(Serializer &serializer) const {
52
54
  writer.Finalize();
53
55
  }
54
56
 
57
+ void TableRef::FormatSerialize(FormatSerializer &serializer) const {
58
+ serializer.WriteProperty("type", type);
59
+ serializer.WriteProperty("alias", alias);
60
+ serializer.WriteOptionalProperty("sample", sample);
61
+ }
62
+
63
+ unique_ptr<TableRef> TableRef::FormatDeserialize(FormatDeserializer &deserializer) {
64
+ auto type = deserializer.ReadProperty<TableReferenceType>("type");
65
+ auto alias = deserializer.ReadProperty<string>("alias");
66
+ auto sample = deserializer.ReadOptionalProperty<unique_ptr<SampleOptions>>("sample");
67
+
68
+ unique_ptr<TableRef> result;
69
+
70
+ switch (type) {
71
+ case TableReferenceType::BASE_TABLE:
72
+ result = BaseTableRef::FormatDeserialize(deserializer);
73
+ break;
74
+ case TableReferenceType::JOIN:
75
+ result = JoinRef::FormatDeserialize(deserializer);
76
+ break;
77
+ case TableReferenceType::SUBQUERY:
78
+ result = SubqueryRef::FormatDeserialize(deserializer);
79
+ break;
80
+ case TableReferenceType::TABLE_FUNCTION:
81
+ result = TableFunctionRef::FormatDeserialize(deserializer);
82
+ break;
83
+ case TableReferenceType::EMPTY:
84
+ result = EmptyTableRef::FormatDeserialize(deserializer);
85
+ break;
86
+ case TableReferenceType::EXPRESSION_LIST:
87
+ result = ExpressionListRef::FormatDeserialize(deserializer);
88
+ break;
89
+ case TableReferenceType::PIVOT:
90
+ result = PivotRef::FormatDeserialize(deserializer);
91
+ break;
92
+ case TableReferenceType::CTE:
93
+ case TableReferenceType::INVALID:
94
+ throw InternalException("Unsupported type for TableRef::FormatDeserialize");
95
+ }
96
+ result->alias = alias;
97
+ result->sample = std::move(sample);
98
+ return result;
99
+ }
100
+
55
101
  unique_ptr<TableRef> TableRef::Deserialize(Deserializer &source) {
56
102
  FieldReader reader(source);
57
103
 
@@ -37,7 +37,7 @@ unique_ptr<ParsedExpression> Transformer::TransformBoolExpr(duckdb_libpgquery::P
37
37
  next->type <= ExpressionType::COMPARE_GREATERTHANOREQUALTO) {
38
38
  // NOT on a comparison: we can negate the comparison
39
39
  // e.g. NOT(x > y) is equivalent to x <= y
40
- next->type = NegateComparisionExpression(next->type);
40
+ next->type = NegateComparisonExpression(next->type);
41
41
  result = std::move(next);
42
42
  } else {
43
43
  result = make_unique<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(next));
@@ -84,7 +84,7 @@ unique_ptr<ParsedExpression> Transformer::TransformAExprInternal(duckdb_libpgque
84
84
  // ALL sublink is equivalent to NOT(ANY) with inverted comparison
85
85
  // e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
86
86
  // first invert the comparison type
87
- subquery_expr->comparison_type = NegateComparisionExpression(subquery_expr->comparison_type);
87
+ subquery_expr->comparison_type = NegateComparisonExpression(subquery_expr->comparison_type);
88
88
  return make_unique<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(subquery_expr));
89
89
  }
90
90
  return std::move(subquery_expr);
@@ -44,7 +44,7 @@ unique_ptr<ParsedExpression> Transformer::TransformSubquery(duckdb_libpgquery::P
44
44
  // ALL sublink is equivalent to NOT(ANY) with inverted comparison
45
45
  // e.g. [= ALL()] is equivalent to [NOT(<> ANY())]
46
46
  // first invert the comparison type
47
- subquery_expr->comparison_type = NegateComparisionExpression(subquery_expr->comparison_type);
47
+ subquery_expr->comparison_type = NegateComparisonExpression(subquery_expr->comparison_type);
48
48
  return make_unique<OperatorExpression>(ExpressionType::OPERATOR_NOT, std::move(subquery_expr));
49
49
  }
50
50
  break;
@@ -32,6 +32,10 @@ public:
32
32
  void Serialize(FieldWriter &writer) const override {
33
33
  throw InternalException("Cannot serialize bound subquery node");
34
34
  }
35
+
36
+ void FormatSerialize(FormatSerializer &serializer) const override {
37
+ throw InternalException("Cannot serialize bound subquery node");
38
+ }
35
39
  };
36
40
 
37
41
  BindResult ExpressionBinder::BindExpression(SubqueryExpression &expr, idx_t depth) {
@@ -33,7 +33,7 @@ static bool CreateJoinCondition(Expression &expr, const unordered_set<idx_t> &le
33
33
  if (left_side == JoinSide::RIGHT) {
34
34
  // left = right, right = left, flip the comparison symbol and reverse sides
35
35
  swap(left, right);
36
- condition.comparison = FlipComparisionExpression(expr.type);
36
+ condition.comparison = FlipComparisonExpression(expr.type);
37
37
  }
38
38
  condition.left = std::move(left);
39
39
  condition.right = std::move(right);
@@ -28,4 +28,8 @@ void BoundExpression::Serialize(FieldWriter &writer) const {
28
28
  throw SerializationException("Cannot copy or serialize bound expression");
29
29
  }
30
30
 
31
+ void BoundExpression::FormatSerialize(FormatSerializer &serializer) const {
32
+ throw SerializationException("Cannot copy or serialize bound expression");
33
+ }
34
+
31
35
  } // namespace duckdb
@@ -1,5 +1,4 @@
1
1
  #include "duckdb/verification/deserialized_statement_verifier.hpp"
2
-
3
2
  #include "duckdb/common/serializer/buffered_deserializer.hpp"
4
3
 
5
4
  namespace duckdb {
@@ -566,6 +566,15 @@ static int ascii_strcasecmp(const char* a, const char* b, size_t len) {
566
566
  return 0;
567
567
  }
568
568
 
569
+ RE2::Anchor RE2::Anchored() const {
570
+ if (prog_->anchor_start()) {
571
+ if (prog_->anchor_end()) {
572
+ return Anchor::ANCHOR_BOTH;
573
+ }
574
+ return Anchor::ANCHOR_START;
575
+ }
576
+ return Anchor::UNANCHORED;
577
+ }
569
578
 
570
579
  /***** Actual matching and rewriting code *****/
571
580
 
@@ -475,6 +475,8 @@ class RE2 {
475
475
  ANCHOR_BOTH // Anchor at start and end
476
476
  };
477
477
 
478
+ Anchor Anchored() const;
479
+
478
480
  // Return the number of capturing subpatterns, or -1 if the
479
481
  // regexp wasn't valid on construction. The overall match ($0)
480
482
  // does not count: if the regexp is "(a)(b)", returns 2.
@@ -20,6 +20,8 @@
20
20
 
21
21
  #include "extension/json/json_functions/json_valid.cpp"
22
22
 
23
+ #include "extension/json/json_functions/json_serialize_sql.cpp"
24
+
23
25
  #include "extension/json/json_functions/read_json.cpp"
24
26
 
25
27
  #include "extension/json/json_functions/read_json_objects.cpp"
@@ -6,3 +6,5 @@
6
6
 
7
7
  #include "src/common/serializer/buffered_serializer.cpp"
8
8
 
9
+ #include "src/common/serializer/enum_serializer.cpp"
10
+
@@ -0,0 +1,4 @@
1
+ #include "src/function/scalar/string/regexp/regexp_util.cpp"
2
+
3
+ #include "src/function/scalar/string/regexp/regexp_extract_all.cpp"
4
+
@@ -6,6 +6,8 @@
6
6
 
7
7
  #include "src/parser/constraint.cpp"
8
8
 
9
+ #include "src/parser/common_table_expression_info.cpp"
10
+
9
11
  #include "src/parser/expression_util.cpp"
10
12
 
11
13
  #include "src/parser/keyword_helper.cpp"
package/src/utils.cpp CHANGED
@@ -18,6 +18,18 @@ static void SetString(Napi::Object &obj, const std::string &key, const std::stri
18
18
 
19
19
  Napi::Object Utils::CreateError(Napi::Env env, duckdb::PreservedError &error) {
20
20
  auto obj = Utils::CreateError(env, error.Message());
21
+ if (error.Type() == duckdb::ExceptionType::HTTP) {
22
+ const auto &e = error.GetError()->AsHTTPException();
23
+ obj.Set(Napi::String::New(env, "statusCode"), Napi::Number::New(env, e.GetStatusCode()));
24
+ SetString(obj, "response", e.GetResponseBody());
25
+ SetString(obj, "reason", e.GetReason());
26
+
27
+ auto headers = Napi::Object::New(env);
28
+ for (const auto &item : e.GetHeaders()) {
29
+ SetString(headers, item.first, item.second);
30
+ }
31
+ obj.Set(Napi::String::New(env, "headers"), headers);
32
+ }
21
33
 
22
34
  SetString(obj, "errorType", duckdb::Exception::ExceptionTypeToString(error.Type()));
23
35