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.
- package/binding.gyp +2 -0
- package/lib/duckdb.d.ts +12 -1
- package/lib/duckdb.js +19 -0
- package/package.json +1 -1
- package/src/duckdb/extension/json/include/json_common.hpp +1 -0
- package/src/duckdb/extension/json/include/json_functions.hpp +1 -0
- package/src/duckdb/extension/json/include/json_serializer.hpp +77 -0
- package/src/duckdb/extension/json/json_functions/json_serialize_sql.cpp +147 -0
- package/src/duckdb/extension/json/json_functions.cpp +1 -0
- package/src/duckdb/extension/json/json_scan.cpp +2 -2
- package/src/duckdb/extension/json/json_serializer.cpp +217 -0
- package/src/duckdb/src/common/enums/expression_type.cpp +8 -222
- package/src/duckdb/src/common/enums/join_type.cpp +3 -22
- package/src/duckdb/src/common/exception.cpp +2 -2
- package/src/duckdb/src/common/serializer/enum_serializer.cpp +1172 -0
- package/src/duckdb/src/common/types/value.cpp +117 -0
- package/src/duckdb/src/common/types/vector.cpp +140 -1
- package/src/duckdb/src/common/types.cpp +166 -89
- package/src/duckdb/src/function/scalar/string/regexp/regexp_extract_all.cpp +243 -0
- package/src/duckdb/src/function/scalar/string/regexp/regexp_util.cpp +79 -0
- package/src/duckdb/src/function/scalar/string/regexp.cpp +21 -80
- package/src/duckdb/src/function/table/arrow_conversion.cpp +7 -1
- package/src/duckdb/src/function/table/table_scan.cpp +1 -1
- package/src/duckdb/src/function/table/version/pragma_version.cpp +2 -2
- package/src/duckdb/src/include/duckdb/common/enums/aggregate_handling.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/expression_type.hpp +2 -3
- package/src/duckdb/src/include/duckdb/common/enums/joinref_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/order_type.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/enums/set_operation_type.hpp +2 -1
- package/src/duckdb/src/include/duckdb/common/exception.hpp +40 -9
- package/src/duckdb/src/include/duckdb/common/preserved_error.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/serializer/enum_serializer.hpp +113 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_deserializer.hpp +336 -0
- package/src/duckdb/src/include/duckdb/common/serializer/format_serializer.hpp +268 -0
- package/src/duckdb/src/include/duckdb/common/serializer/serialization_traits.hpp +126 -0
- package/src/duckdb/src/include/duckdb/common/string_util.hpp +12 -0
- package/src/duckdb/src/include/duckdb/common/types/value.hpp +2 -0
- package/src/duckdb/src/include/duckdb/common/types/vector.hpp +3 -0
- package/src/duckdb/src/include/duckdb/common/types.hpp +8 -2
- package/src/duckdb/src/include/duckdb/function/scalar/regexp.hpp +81 -1
- package/src/duckdb/src/include/duckdb/main/extension_entries.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/common_table_expression_info.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/between_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/bound_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/case_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/expression/cast_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/collate_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/columnref_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/comparison_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/conjunction_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/constant_expression.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/expression/default_expression.hpp +1 -0
- package/src/duckdb/src/include/duckdb/parser/expression/function_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/lambda_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/operator_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/parameter_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/positional_reference_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/star_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/subquery_expression.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/expression/window_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_data/sample_options.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/parsed_expression.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/recursive_cte_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/select_node.hpp +5 -0
- package/src/duckdb/src/include/duckdb/parser/query_node/set_operation_node.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/query_node.hpp +11 -1
- package/src/duckdb/src/include/duckdb/parser/result_modifier.hpp +24 -1
- package/src/duckdb/src/include/duckdb/parser/sql_statement.hpp +2 -1
- package/src/duckdb/src/include/duckdb/parser/statement/select_statement.hpp +6 -1
- package/src/duckdb/src/include/duckdb/parser/tableref/basetableref.hpp +4 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/emptytableref.hpp +2 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/expressionlistref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/joinref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/pivotref.hpp +9 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/subqueryref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref/table_function_ref.hpp +3 -0
- package/src/duckdb/src/include/duckdb/parser/tableref.hpp +3 -1
- package/src/duckdb/src/main/extension/extension_install.cpp +7 -2
- package/src/duckdb/src/optimizer/deliminator.cpp +1 -1
- package/src/duckdb/src/optimizer/filter_combiner.cpp +1 -1
- package/src/duckdb/src/optimizer/join_order/join_order_optimizer.cpp +3 -3
- package/src/duckdb/src/optimizer/rule/move_constants.cpp +2 -2
- package/src/duckdb/src/optimizer/statistics/operator/propagate_filter.cpp +1 -1
- package/src/duckdb/src/parser/common_table_expression_info.cpp +19 -0
- package/src/duckdb/src/parser/expression/between_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/case_expression.cpp +28 -0
- package/src/duckdb/src/parser/expression/cast_expression.cpp +17 -0
- package/src/duckdb/src/parser/expression/collate_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/columnref_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/comparison_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/conjunction_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/constant_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/default_expression.cpp +7 -0
- package/src/duckdb/src/parser/expression/function_expression.cpp +35 -0
- package/src/duckdb/src/parser/expression/lambda_expression.cpp +16 -0
- package/src/duckdb/src/parser/expression/operator_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/parameter_expression.cpp +15 -0
- package/src/duckdb/src/parser/expression/positional_reference_expression.cpp +14 -0
- package/src/duckdb/src/parser/expression/star_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/subquery_expression.cpp +20 -0
- package/src/duckdb/src/parser/expression/window_expression.cpp +43 -0
- package/src/duckdb/src/parser/parsed_data/sample_options.cpp +22 -10
- package/src/duckdb/src/parser/parsed_expression.cpp +72 -0
- package/src/duckdb/src/parser/query_node/recursive_cte_node.cpp +21 -0
- package/src/duckdb/src/parser/query_node/select_node.cpp +31 -0
- package/src/duckdb/src/parser/query_node/set_operation_node.cpp +17 -0
- package/src/duckdb/src/parser/query_node.cpp +50 -0
- package/src/duckdb/src/parser/result_modifier.cpp +78 -0
- package/src/duckdb/src/parser/statement/select_statement.cpp +12 -0
- package/src/duckdb/src/parser/tableref/basetableref.cpp +21 -0
- package/src/duckdb/src/parser/tableref/emptytableref.cpp +4 -0
- package/src/duckdb/src/parser/tableref/expressionlistref.cpp +17 -0
- package/src/duckdb/src/parser/tableref/joinref.cpp +25 -0
- package/src/duckdb/src/parser/tableref/pivotref.cpp +53 -0
- package/src/duckdb/src/parser/tableref/subqueryref.cpp +15 -0
- package/src/duckdb/src/parser/tableref/table_function.cpp +17 -0
- package/src/duckdb/src/parser/tableref.cpp +46 -0
- package/src/duckdb/src/parser/transform/expression/transform_bool_expr.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_operator.cpp +1 -1
- package/src/duckdb/src/parser/transform/expression/transform_subquery.cpp +1 -1
- package/src/duckdb/src/planner/binder/expression/bind_subquery_expression.cpp +4 -0
- package/src/duckdb/src/planner/binder/tableref/plan_joinref.cpp +1 -1
- package/src/duckdb/src/planner/expression/bound_expression.cpp +4 -0
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/re2/re2/re2.cc +9 -0
- package/src/duckdb/third_party/re2/re2/re2.h +2 -0
- package/src/duckdb/ub_extension_json_json_functions.cpp +2 -0
- package/src/duckdb/ub_src_common_serializer.cpp +2 -0
- package/src/duckdb/ub_src_function_scalar_string_regexp.cpp +4 -0
- package/src/duckdb/ub_src_parser.cpp +2 -0
- package/src/utils.cpp +12 -0
- 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 =
|
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 =
|
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 =
|
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 =
|
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
|
@@ -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"
|
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
|
|