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.
- 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/catalog/catalog.cpp +21 -5
- 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 -93
- package/src/duckdb/src/common/types/vector.cpp +140 -1
- package/src/duckdb/src/common/types.cpp +166 -89
- package/src/duckdb/src/execution/operator/helper/physical_limit.cpp +3 -0
- package/src/duckdb/src/execution/physical_plan/plan_aggregate.cpp +5 -8
- package/src/duckdb/src/function/scalar/date/date_part.cpp +2 -2
- package/src/duckdb/src/function/scalar/date/date_trunc.cpp +2 -2
- package/src/duckdb/src/function/scalar/list/list_aggregates.cpp +1 -1
- package/src/duckdb/src/function/scalar/list/list_lambdas.cpp +4 -0
- package/src/duckdb/src/function/scalar/operators/arithmetic.cpp +8 -8
- 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/catalog/catalog.hpp +3 -0
- 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 -31
- 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/include/duckdb/storage/statistics/numeric_stats.hpp +9 -52
- package/src/duckdb/src/include/duckdb/storage/statistics/numeric_stats_union.hpp +62 -0
- package/src/duckdb/src/include/duckdb/storage/table/column_checkpoint_state.hpp +2 -1
- package/src/duckdb/src/include/duckdb/storage/table/column_data.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/column_data_checkpointer.hpp +3 -2
- package/src/duckdb/src/include/duckdb/storage/table/column_segment.hpp +5 -3
- package/src/duckdb/src/include/duckdb/storage/table/persistent_table_data.hpp +4 -1
- package/src/duckdb/src/include/duckdb/storage/table/row_group.hpp +6 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_collection.hpp +5 -3
- package/src/duckdb/src/include/duckdb/storage/table/row_group_segment_tree.hpp +37 -0
- package/src/duckdb/src/include/duckdb/storage/table/scan_state.hpp +8 -1
- package/src/duckdb/src/include/duckdb/storage/table/segment_base.hpp +4 -3
- package/src/duckdb/src/include/duckdb/storage/table/segment_tree.hpp +271 -26
- 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_array_access.cpp +11 -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_function_expression.cpp +22 -4
- 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/storage/checkpoint/table_data_reader.cpp +3 -11
- package/src/duckdb/src/storage/checkpoint/table_data_writer.cpp +6 -0
- package/src/duckdb/src/storage/checkpoint_manager.cpp +1 -0
- package/src/duckdb/src/storage/compression/numeric_constant.cpp +2 -2
- package/src/duckdb/src/storage/data_table.cpp +1 -1
- package/src/duckdb/src/storage/statistics/numeric_stats.cpp +145 -83
- package/src/duckdb/src/storage/statistics/numeric_stats_union.cpp +65 -0
- package/src/duckdb/src/storage/storage_info.cpp +1 -1
- package/src/duckdb/src/storage/table/column_checkpoint_state.cpp +1 -6
- package/src/duckdb/src/storage/table/column_data.cpp +29 -35
- package/src/duckdb/src/storage/table/column_data_checkpointer.cpp +5 -5
- package/src/duckdb/src/storage/table/column_segment.cpp +8 -7
- package/src/duckdb/src/storage/table/list_column_data.cpp +2 -1
- package/src/duckdb/src/storage/table/persistent_table_data.cpp +2 -1
- package/src/duckdb/src/storage/table/row_group.cpp +9 -9
- package/src/duckdb/src/storage/table/row_group_collection.cpp +82 -66
- package/src/duckdb/src/storage/table/scan_state.cpp +22 -3
- package/src/duckdb/src/storage/table/standard_column_data.cpp +1 -0
- package/src/duckdb/src/storage/table/struct_column_data.cpp +1 -0
- package/src/duckdb/src/verification/deserialized_statement_verifier.cpp +0 -1
- package/src/duckdb/third_party/libpg_query/src_backend_parser_gram.cpp +11780 -11512
- 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/duckdb/ub_src_storage_statistics.cpp +2 -0
- package/src/duckdb/ub_src_storage_table.cpp +0 -2
- package/src/utils.cpp +12 -0
- package/test/extension.test.ts +44 -26
- package/src/duckdb/src/storage/table/segment_tree.cpp +0 -179
@@ -5,6 +5,8 @@
|
|
5
5
|
#include "duckdb/parser/query_node/recursive_cte_node.hpp"
|
6
6
|
#include "duckdb/common/limits.hpp"
|
7
7
|
#include "duckdb/common/field_writer.hpp"
|
8
|
+
#include "duckdb/common/serializer/format_serializer.hpp"
|
9
|
+
#include "duckdb/common/serializer/format_deserializer.hpp"
|
8
10
|
|
9
11
|
namespace duckdb {
|
10
12
|
|
@@ -65,6 +67,16 @@ string CommonTableExpressionMap::ToString() const {
|
|
65
67
|
return result;
|
66
68
|
}
|
67
69
|
|
70
|
+
void CommonTableExpressionMap::FormatSerialize(FormatSerializer &serializer) const {
|
71
|
+
serializer.WriteProperty("map", map);
|
72
|
+
}
|
73
|
+
|
74
|
+
CommonTableExpressionMap CommonTableExpressionMap::FormatDeserialize(FormatDeserializer &deserializer) {
|
75
|
+
auto result = CommonTableExpressionMap();
|
76
|
+
deserializer.ReadProperty("map", result.map);
|
77
|
+
return result;
|
78
|
+
}
|
79
|
+
|
68
80
|
string QueryNode::ResultModifiersToString() const {
|
69
81
|
string result;
|
70
82
|
for (idx_t modifier_idx = 0; modifier_idx < modifiers.size(); modifier_idx++) {
|
@@ -155,6 +167,7 @@ void QueryNode::Serialize(Serializer &main_serializer) const {
|
|
155
167
|
writer.WriteField<QueryNodeType>(type);
|
156
168
|
writer.WriteSerializableList(modifiers);
|
157
169
|
// cte_map
|
170
|
+
|
158
171
|
writer.WriteField<uint32_t>((uint32_t)cte_map.map.size());
|
159
172
|
auto &serializer = writer.GetSerializer();
|
160
173
|
for (auto &cte : cte_map.map) {
|
@@ -163,9 +176,46 @@ void QueryNode::Serialize(Serializer &main_serializer) const {
|
|
163
176
|
cte.second->query->Serialize(serializer);
|
164
177
|
}
|
165
178
|
Serialize(writer);
|
179
|
+
|
166
180
|
writer.Finalize();
|
167
181
|
}
|
168
182
|
|
183
|
+
// Children should call the base method before their own.
|
184
|
+
void QueryNode::FormatSerialize(FormatSerializer &serializer) const {
|
185
|
+
serializer.WriteProperty("type", type);
|
186
|
+
serializer.WriteProperty("modifiers", modifiers);
|
187
|
+
serializer.WriteProperty("cte_map", cte_map);
|
188
|
+
}
|
189
|
+
|
190
|
+
unique_ptr<QueryNode> QueryNode::FormatDeserialize(FormatDeserializer &deserializer) {
|
191
|
+
|
192
|
+
auto type = deserializer.ReadProperty<QueryNodeType>("type");
|
193
|
+
|
194
|
+
auto modifiers = deserializer.ReadProperty<vector<unique_ptr<ResultModifier>>>("modifiers");
|
195
|
+
auto cte_map = deserializer.ReadProperty<CommonTableExpressionMap>("cte_map");
|
196
|
+
|
197
|
+
unique_ptr<QueryNode> result;
|
198
|
+
|
199
|
+
switch (type) {
|
200
|
+
case QueryNodeType::SELECT_NODE:
|
201
|
+
result = SelectNode::FormatDeserialize(deserializer);
|
202
|
+
break;
|
203
|
+
case QueryNodeType::SET_OPERATION_NODE:
|
204
|
+
result = SetOperationNode::FormatDeserialize(deserializer);
|
205
|
+
break;
|
206
|
+
case QueryNodeType::RECURSIVE_CTE_NODE:
|
207
|
+
result = RecursiveCTENode::FormatDeserialize(deserializer);
|
208
|
+
break;
|
209
|
+
default:
|
210
|
+
throw SerializationException("Could not deserialize Query Node: unknown type!");
|
211
|
+
}
|
212
|
+
|
213
|
+
result->type = type;
|
214
|
+
result->modifiers = std::move(modifiers);
|
215
|
+
result->cte_map = std::move(cte_map);
|
216
|
+
return result;
|
217
|
+
}
|
218
|
+
|
169
219
|
unique_ptr<QueryNode> QueryNode::Deserialize(Deserializer &main_source) {
|
170
220
|
FieldReader reader(main_source);
|
171
221
|
|
@@ -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
|
|
@@ -49,6 +49,17 @@ unique_ptr<ParsedExpression> Transformer::TransformArrayAccess(duckdb_libpgquery
|
|
49
49
|
result = make_unique<OperatorExpression>(ExpressionType::STRUCT_EXTRACT, std::move(children));
|
50
50
|
break;
|
51
51
|
}
|
52
|
+
case duckdb_libpgquery::T_PGFuncCall: {
|
53
|
+
auto func = (duckdb_libpgquery::PGFuncCall *)target;
|
54
|
+
auto function = TransformFuncCall(func);
|
55
|
+
if (function->type != ExpressionType::FUNCTION) {
|
56
|
+
throw ParserException("%s.%s() call must be a function", result->ToString(), function->ToString());
|
57
|
+
}
|
58
|
+
auto &f = (FunctionExpression &)*function;
|
59
|
+
f.children.insert(f.children.begin(), std::move(result));
|
60
|
+
result = std::move(function);
|
61
|
+
break;
|
62
|
+
}
|
52
63
|
default:
|
53
64
|
throw NotImplementedException("Unimplemented subscript type");
|
54
65
|
}
|
@@ -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;
|
@@ -38,10 +38,28 @@ BindResult ExpressionBinder::BindExpression(FunctionExpression &function, idx_t
|
|
38
38
|
"function has to be called in a FROM clause (similar to a table).",
|
39
39
|
function.function_name)));
|
40
40
|
}
|
41
|
-
// not a table function -
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
// not a table function - check if the schema is set
|
42
|
+
if (!function.schema.empty()) {
|
43
|
+
// the schema is set - check if we can turn this the schema into a column ref
|
44
|
+
string error;
|
45
|
+
unique_ptr<ColumnRefExpression> colref;
|
46
|
+
if (function.catalog.empty()) {
|
47
|
+
colref = make_unique<ColumnRefExpression>(function.schema);
|
48
|
+
} else {
|
49
|
+
colref = make_unique<ColumnRefExpression>(function.schema, function.catalog);
|
50
|
+
}
|
51
|
+
auto new_colref = QualifyColumnName(*colref, error);
|
52
|
+
if (error.empty()) {
|
53
|
+
// we can! transform this into a function call on the column
|
54
|
+
// i.e. "x.lower()" becomes "lower(x)"
|
55
|
+
function.children.insert(function.children.begin(), std::move(colref));
|
56
|
+
function.catalog = INVALID_CATALOG;
|
57
|
+
function.schema = INVALID_SCHEMA;
|
58
|
+
}
|
59
|
+
}
|
60
|
+
// rebind the function
|
61
|
+
func = Catalog::GetEntry(context, CatalogType::SCALAR_FUNCTION_ENTRY, function.catalog, function.schema,
|
62
|
+
function.function_name, false, error_context);
|
45
63
|
}
|
46
64
|
|
47
65
|
if (func->type != CatalogType::AGGREGATE_FUNCTION_ENTRY &&
|
@@ -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) {
|