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
@@ -0,0 +1,1172 @@
1
+ #include "duckdb/common/serializer/enum_serializer.hpp"
2
+
3
+ #include "duckdb/common/types.hpp"
4
+ #include "duckdb/common/enums/order_type.hpp"
5
+ #include "duckdb/common/enums/tableref_type.hpp"
6
+ #include "duckdb/common/enums/join_type.hpp"
7
+ #include "duckdb/common/enums/joinref_type.hpp"
8
+ #include "duckdb/common/enums/aggregate_handling.hpp"
9
+ #include "duckdb/common/enums/expression_type.hpp"
10
+ #include "duckdb/common/enums/subquery_type.hpp"
11
+ #include "duckdb/common/enums/set_operation_type.hpp"
12
+
13
+ #include "duckdb/parser/result_modifier.hpp"
14
+ #include "duckdb/parser/query_node.hpp"
15
+ #include "duckdb/parser/expression/window_expression.hpp"
16
+ #include "duckdb/parser/parsed_data/sample_options.hpp"
17
+
18
+ namespace duckdb {
19
+
20
+ //-----------------------------------------------
21
+ // OrderType
22
+ //-----------------------------------------------
23
+ template <>
24
+ OrderType EnumSerializer::StringToEnum(const char *value) {
25
+ if (StringUtil::Equals(value, "INVALID")) {
26
+ return OrderType::INVALID;
27
+ } else if (StringUtil::Equals(value, "ORDER_DEFAULT")) {
28
+ return OrderType::ORDER_DEFAULT;
29
+ } else if (StringUtil::Equals(value, "ASCENDING")) {
30
+ return OrderType::ASCENDING;
31
+ } else if (StringUtil::Equals(value, "DESCENDING")) {
32
+ return OrderType::DESCENDING;
33
+ } else {
34
+ throw NotImplementedException("FromString not implemented for enum value");
35
+ }
36
+ }
37
+
38
+ template <>
39
+ const char *EnumSerializer::EnumToString(OrderType value) {
40
+ switch (value) {
41
+ case OrderType::INVALID:
42
+ return "INVALID";
43
+ case OrderType::ORDER_DEFAULT:
44
+ return "ORDER_DEFAULT";
45
+ case OrderType::ASCENDING:
46
+ return "ASCENDING";
47
+ case OrderType::DESCENDING:
48
+ return "DESCENDING";
49
+ default:
50
+ throw NotImplementedException("ToString not implemented for enum value");
51
+ }
52
+ }
53
+
54
+ //-----------------------------------------------
55
+ // OrderByNullType
56
+ //-----------------------------------------------
57
+ template <>
58
+ OrderByNullType EnumSerializer::StringToEnum(const char *value) {
59
+ if (StringUtil::Equals(value, "INVALID")) {
60
+ return OrderByNullType::INVALID;
61
+ } else if (StringUtil::Equals(value, "ORDER_DEFAULT")) {
62
+ return OrderByNullType::ORDER_DEFAULT;
63
+ } else if (StringUtil::Equals(value, "NULLS_FIRST")) {
64
+ return OrderByNullType::NULLS_FIRST;
65
+ } else if (StringUtil::Equals(value, "NULLS_LAST")) {
66
+ return OrderByNullType::NULLS_LAST;
67
+ } else {
68
+ throw NotImplementedException("FromString not implemented for enum value");
69
+ }
70
+ }
71
+
72
+ template <>
73
+ const char *EnumSerializer::EnumToString(OrderByNullType value) {
74
+ switch (value) {
75
+ case OrderByNullType::INVALID:
76
+ return "INVALID";
77
+ case OrderByNullType::ORDER_DEFAULT:
78
+ return "ORDER_DEFAULT";
79
+ case OrderByNullType::NULLS_FIRST:
80
+ return "NULLS_FIRST";
81
+ case OrderByNullType::NULLS_LAST:
82
+ return "NULLS_LAST";
83
+ default:
84
+ throw NotImplementedException("ToString not implemented for enum value");
85
+ }
86
+ }
87
+
88
+ //-----------------------------------------------
89
+ // ResultModifierType
90
+ //-----------------------------------------------
91
+ template <>
92
+ ResultModifierType EnumSerializer::StringToEnum(const char *value) {
93
+ if (StringUtil::Equals(value, "LIMIT_MODIFIER")) {
94
+ return ResultModifierType::LIMIT_MODIFIER;
95
+ } else if (StringUtil::Equals(value, "ORDER_MODIFIER")) {
96
+ return ResultModifierType::ORDER_MODIFIER;
97
+ } else if (StringUtil::Equals(value, "DISTINCT_MODIFIER")) {
98
+ return ResultModifierType::DISTINCT_MODIFIER;
99
+ } else if (StringUtil::Equals(value, "LIMIT_PERCENT_MODIFIER")) {
100
+ return ResultModifierType::LIMIT_PERCENT_MODIFIER;
101
+ } else {
102
+ throw NotImplementedException("FromString not implement for enum value");
103
+ }
104
+ }
105
+
106
+ template <>
107
+ const char *EnumSerializer::EnumToString(ResultModifierType value) {
108
+ switch (value) {
109
+ case ResultModifierType::LIMIT_MODIFIER:
110
+ return "LIMIT_MODIFIER";
111
+ case ResultModifierType::ORDER_MODIFIER:
112
+ return "ORDER_MODIFIER";
113
+ case ResultModifierType::DISTINCT_MODIFIER:
114
+ return "DISTINCT_MODIFIER";
115
+ case ResultModifierType::LIMIT_PERCENT_MODIFIER:
116
+ return "LIMIT_PERCENT_MODIFIER";
117
+ default:
118
+ throw NotImplementedException("ToString not implemented for enum value");
119
+ }
120
+ }
121
+
122
+ //-----------------------------------------------
123
+ // ExtraTypeInfoType
124
+ //-----------------------------------------------
125
+ template <>
126
+ ExtraTypeInfoType EnumSerializer::StringToEnum(const char *value) {
127
+ if (StringUtil::Equals(value, "INVALID_TYPE_INFO")) {
128
+ return ExtraTypeInfoType::INVALID_TYPE_INFO;
129
+ } else if (StringUtil::Equals(value, "GENERIC_TYPE_INFO")) {
130
+ return ExtraTypeInfoType::GENERIC_TYPE_INFO;
131
+ } else if (StringUtil::Equals(value, "DECIMAL_TYPE_INFO")) {
132
+ return ExtraTypeInfoType::DECIMAL_TYPE_INFO;
133
+ } else if (StringUtil::Equals(value, "STRING_TYPE_INFO")) {
134
+ return ExtraTypeInfoType::STRING_TYPE_INFO;
135
+ } else if (StringUtil::Equals(value, "LIST_TYPE_INFO")) {
136
+ return ExtraTypeInfoType::LIST_TYPE_INFO;
137
+ } else if (StringUtil::Equals(value, "STRUCT_TYPE_INFO")) {
138
+ return ExtraTypeInfoType::STRUCT_TYPE_INFO;
139
+ } else if (StringUtil::Equals(value, "ENUM_TYPE_INFO")) {
140
+ return ExtraTypeInfoType::USER_TYPE_INFO;
141
+ } else if (StringUtil::Equals(value, "USER_TYPE_INFO")) {
142
+ return ExtraTypeInfoType::USER_TYPE_INFO;
143
+ } else if (StringUtil::Equals(value, "AGGREGATE_STATE_TYPE_INFO")) {
144
+ return ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO;
145
+ } else {
146
+ throw NotImplementedException("FromString not implemented for enum value");
147
+ }
148
+ }
149
+
150
+ template <>
151
+ const char *EnumSerializer::EnumToString(ExtraTypeInfoType value) {
152
+ switch (value) {
153
+ case ExtraTypeInfoType::INVALID_TYPE_INFO:
154
+ return "INVALID_TYPE_INFO";
155
+ case ExtraTypeInfoType::GENERIC_TYPE_INFO:
156
+ return "GENERIC_TYPE_INFO";
157
+ case ExtraTypeInfoType::DECIMAL_TYPE_INFO:
158
+ return "DECIMAL_TYPE_INFO";
159
+ case ExtraTypeInfoType::STRING_TYPE_INFO:
160
+ return "STRING_TYPE_INFO";
161
+ case ExtraTypeInfoType::LIST_TYPE_INFO:
162
+ return "LIST_TYPE_INFO";
163
+ case ExtraTypeInfoType::STRUCT_TYPE_INFO:
164
+ return "STRUCT_TYPE_INFO";
165
+ case ExtraTypeInfoType::ENUM_TYPE_INFO:
166
+ return "ENUM_TYPE_INFO";
167
+ case ExtraTypeInfoType::USER_TYPE_INFO:
168
+ return "USER_TYPE_INFO";
169
+ case ExtraTypeInfoType::AGGREGATE_STATE_TYPE_INFO:
170
+ return "AGGREGATE_STATE_TYPE_INFO";
171
+ default:
172
+ throw NotImplementedException("ToString not implemented for enum value");
173
+ }
174
+ }
175
+
176
+ //-----------------------------------------------
177
+ // TableReferenceType
178
+ //-----------------------------------------------
179
+ template <>
180
+ TableReferenceType EnumSerializer::StringToEnum(const char *value) {
181
+ if (StringUtil::Equals(value, "INVALID")) {
182
+ return TableReferenceType::INVALID;
183
+ } else if (StringUtil::Equals(value, "BASE_TABLE")) {
184
+ return TableReferenceType::BASE_TABLE;
185
+ } else if (StringUtil::Equals(value, "SUBQUERY")) {
186
+ return TableReferenceType::SUBQUERY;
187
+ } else if (StringUtil::Equals(value, "JOIN")) {
188
+ return TableReferenceType::JOIN;
189
+ } else if (StringUtil::Equals(value, "TABLE_FUNCTION")) {
190
+ return TableReferenceType::TABLE_FUNCTION;
191
+ } else if (StringUtil::Equals(value, "EXPRESSION_LIST")) {
192
+ return TableReferenceType::EXPRESSION_LIST;
193
+ } else if (StringUtil::Equals(value, "CTE")) {
194
+ return TableReferenceType::CTE;
195
+ } else if (StringUtil::Equals(value, "EMPTY")) {
196
+ return TableReferenceType::EMPTY;
197
+ } else {
198
+ throw NotImplementedException("FromString not implemented for enum value");
199
+ }
200
+ }
201
+
202
+ template <>
203
+ const char *EnumSerializer::EnumToString(TableReferenceType value) {
204
+ switch (value) {
205
+ case TableReferenceType::INVALID:
206
+ return "INVALID";
207
+ case TableReferenceType::BASE_TABLE:
208
+ return "BASE_TABLE";
209
+ case TableReferenceType::SUBQUERY:
210
+ return "SUBQUERY";
211
+ case TableReferenceType::JOIN:
212
+ return "JOIN";
213
+ case TableReferenceType::TABLE_FUNCTION:
214
+ return "TABLE_FUNCTION";
215
+ case TableReferenceType::EXPRESSION_LIST:
216
+ return "EXPRESSION_LIST";
217
+ case TableReferenceType::CTE:
218
+ return "CTE";
219
+ case TableReferenceType::EMPTY:
220
+ return "EMPTY";
221
+ default:
222
+ throw NotImplementedException("ToString not implemented for enum value");
223
+ }
224
+ }
225
+
226
+ //-----------------------------------------------
227
+ // JoinRefType
228
+ //-----------------------------------------------
229
+ template <>
230
+ JoinRefType EnumSerializer::StringToEnum(const char *value) {
231
+ if (StringUtil::Equals(value, "REGULAR")) {
232
+ return JoinRefType::REGULAR;
233
+ } else if (StringUtil::Equals(value, "NATURAL")) {
234
+ return JoinRefType::NATURAL;
235
+ } else if (StringUtil::Equals(value, "CROSS")) {
236
+ return JoinRefType::CROSS;
237
+ } else if (StringUtil::Equals(value, "POSITIONAL")) {
238
+ return JoinRefType::POSITIONAL;
239
+ } else {
240
+ throw NotImplementedException("EnumSerializer::StringToEnum not implemented for enum value");
241
+ }
242
+ }
243
+
244
+ template <>
245
+ const char *EnumSerializer::EnumToString(JoinRefType value) {
246
+ switch (value) {
247
+ case JoinRefType::REGULAR:
248
+ return "REGULAR";
249
+ case JoinRefType::NATURAL:
250
+ return "NATURAL";
251
+ case JoinRefType::CROSS:
252
+ return "CROSS";
253
+ case JoinRefType::POSITIONAL:
254
+ return "POSITIONAL";
255
+ default:
256
+ throw NotImplementedException("ToString not implemented for enum value");
257
+ }
258
+ }
259
+
260
+ //-----------------------------------------------
261
+ // JoinType
262
+ //-----------------------------------------------
263
+
264
+ template <>
265
+ JoinType EnumSerializer::StringToEnum(const char *value) {
266
+ if (StringUtil::Equals(value, "LEFT")) {
267
+ return JoinType::LEFT;
268
+ } else if (StringUtil::Equals(value, "RIGHT")) {
269
+ return JoinType::RIGHT;
270
+ } else if (StringUtil::Equals(value, "INNER")) {
271
+ return JoinType::INNER;
272
+ } else if (StringUtil::Equals(value, "FULL")) {
273
+ return JoinType::OUTER;
274
+ } else if (StringUtil::Equals(value, "SEMI")) {
275
+ return JoinType::SEMI;
276
+ } else if (StringUtil::Equals(value, "ANTI")) {
277
+ return JoinType::ANTI;
278
+ } else if (StringUtil::Equals(value, "SINGLE")) {
279
+ return JoinType::SINGLE;
280
+ } else if (StringUtil::Equals(value, "MARK")) {
281
+ return JoinType::MARK;
282
+ } else {
283
+ throw NotImplementedException("EnumSerializer::StringToEnum not implemented for enum value");
284
+ }
285
+ }
286
+
287
+ template <>
288
+ const char *EnumSerializer::EnumToString(JoinType value) {
289
+ switch (value) {
290
+ case JoinType::LEFT:
291
+ return "LEFT";
292
+ case JoinType::RIGHT:
293
+ return "RIGHT";
294
+ case JoinType::INNER:
295
+ return "INNER";
296
+ case JoinType::OUTER:
297
+ return "FULL";
298
+ case JoinType::SEMI:
299
+ return "SEMI";
300
+ case JoinType::ANTI:
301
+ return "ANTI";
302
+ case JoinType::SINGLE:
303
+ return "SINGLE";
304
+ case JoinType::MARK:
305
+ return "MARK";
306
+ case JoinType::INVALID:
307
+ return "INVALID";
308
+ }
309
+ return "INVALID";
310
+ }
311
+
312
+ //-----------------------------------------------
313
+ // AggregateHandling
314
+ //-----------------------------------------------
315
+
316
+ template <>
317
+ AggregateHandling EnumSerializer::StringToEnum(const char *value) {
318
+ if (StringUtil::Equals(value, "STANDARD_HANDLING")) {
319
+ return AggregateHandling::STANDARD_HANDLING;
320
+ } else if (StringUtil::Equals(value, "NO_AGGREGATES_ALLOWED")) {
321
+ return AggregateHandling::NO_AGGREGATES_ALLOWED;
322
+ } else if (StringUtil::Equals(value, "FORCE_AGGREGATES")) {
323
+ return AggregateHandling::FORCE_AGGREGATES;
324
+ } else {
325
+ throw NotImplementedException("EnumSerializer::StringToEnum not implemented for enum value");
326
+ }
327
+ }
328
+
329
+ template <>
330
+ const char *EnumSerializer::EnumToString(AggregateHandling value) {
331
+ switch (value) {
332
+ case AggregateHandling::STANDARD_HANDLING:
333
+ return "STANDARD_HANDLING";
334
+ case AggregateHandling::NO_AGGREGATES_ALLOWED:
335
+ return "NO_AGGREGATES_ALLOWED";
336
+ case AggregateHandling::FORCE_AGGREGATES:
337
+ return "FORCE_AGGREGATES";
338
+ default:
339
+ throw NotImplementedException("ToString not implemented for enum value");
340
+ }
341
+ }
342
+
343
+ //-----------------------------------------------
344
+ // QueryNodeType
345
+ //-----------------------------------------------
346
+ template <>
347
+ QueryNodeType EnumSerializer::StringToEnum(const char *value) {
348
+ if (StringUtil::Equals(value, "SELECT_NODE")) {
349
+ return QueryNodeType::SELECT_NODE;
350
+ } else if (StringUtil::Equals(value, "SET_OPERATION_NODE")) {
351
+ return QueryNodeType::SET_OPERATION_NODE;
352
+ } else if (StringUtil::Equals(value, "BOUND_SUBQUERY_NODE")) {
353
+ return QueryNodeType::BOUND_SUBQUERY_NODE;
354
+ } else if (StringUtil::Equals(value, "RECURSIVE_CTE_NODE")) {
355
+ return QueryNodeType::RECURSIVE_CTE_NODE;
356
+ } else {
357
+ throw NotImplementedException("EnumSerializer::StringToEnum not implemented for string value");
358
+ }
359
+ }
360
+
361
+ template <>
362
+ const char *EnumSerializer::EnumToString(QueryNodeType value) {
363
+ switch (value) {
364
+ case QueryNodeType::SELECT_NODE:
365
+ return "SELECT_NODE";
366
+ case QueryNodeType::SET_OPERATION_NODE:
367
+ return "SET_OPERATION_NODE";
368
+ case QueryNodeType::BOUND_SUBQUERY_NODE:
369
+ return "BOUND_SUBQUERY_NODE";
370
+ case QueryNodeType::RECURSIVE_CTE_NODE:
371
+ return "RECURSIVE_CTE_NODE";
372
+ default:
373
+ throw NotImplementedException("EnumSerializer::EnumToString not implemented for enum value");
374
+ }
375
+ }
376
+
377
+ //-----------------------------------------------
378
+ // SetOperationType
379
+ //-----------------------------------------------
380
+ template <>
381
+ SetOperationType EnumSerializer::StringToEnum(const char *value) {
382
+ if (StringUtil::Equals(value, "NONE")) {
383
+ return SetOperationType::NONE;
384
+ } else if (StringUtil::Equals(value, "UNION")) {
385
+ return SetOperationType::UNION;
386
+ } else if (StringUtil::Equals(value, "EXCEPT")) {
387
+ return SetOperationType::EXCEPT;
388
+ } else if (StringUtil::Equals(value, "INTERSECT")) {
389
+ return SetOperationType::INTERSECT;
390
+ } else if (StringUtil::Equals(value, "UNION_BY_NAME")) {
391
+ return SetOperationType::UNION_BY_NAME;
392
+ } else {
393
+ throw NotImplementedException("EnumSerializer::StringToEnum not implemented for enum value");
394
+ }
395
+ }
396
+
397
+ template <>
398
+ const char *EnumSerializer::EnumToString(SetOperationType value) {
399
+ switch (value) {
400
+ case SetOperationType::NONE:
401
+ return "NONE";
402
+ case SetOperationType::UNION:
403
+ return "UNION";
404
+ case SetOperationType::EXCEPT:
405
+ return "EXCEPT";
406
+ case SetOperationType::INTERSECT:
407
+ return "INTERSECT";
408
+ case SetOperationType::UNION_BY_NAME:
409
+ return "UNION_BY_NAME";
410
+ default:
411
+ throw NotImplementedException("EnumSerializer::EnumToString not implemented for enum value");
412
+ }
413
+ }
414
+
415
+ //-----------------------------------------------
416
+ // WindowBoundary
417
+ //-----------------------------------------------
418
+ template <>
419
+ WindowBoundary EnumSerializer::StringToEnum(const char *value) {
420
+ if (StringUtil::Equals(value, "INVALID")) {
421
+ return WindowBoundary::INVALID;
422
+ } else if (StringUtil::Equals(value, "UNBOUNDED_PRECEDING")) {
423
+ return WindowBoundary::UNBOUNDED_PRECEDING;
424
+ } else if (StringUtil::Equals(value, "UNBOUNDED_FOLLOWING")) {
425
+ return WindowBoundary::UNBOUNDED_FOLLOWING;
426
+ } else if (StringUtil::Equals(value, "CURRENT_ROW_RANGE")) {
427
+ return WindowBoundary::CURRENT_ROW_RANGE;
428
+ } else if (StringUtil::Equals(value, "CURRENT_ROW_ROWS")) {
429
+ return WindowBoundary::CURRENT_ROW_ROWS;
430
+ } else if (StringUtil::Equals(value, "EXPR_PRECEDING_ROWS")) {
431
+ return WindowBoundary::EXPR_PRECEDING_ROWS;
432
+ } else if (StringUtil::Equals(value, "EXPR_FOLLOWING_ROWS")) {
433
+ return WindowBoundary::EXPR_FOLLOWING_ROWS;
434
+ } else if (StringUtil::Equals(value, "EXPR_PRECEDING_RANGE")) {
435
+ return WindowBoundary::EXPR_PRECEDING_RANGE;
436
+ } else if (StringUtil::Equals(value, "EXPR_FOLLOWING_RANGE")) {
437
+ return WindowBoundary::EXPR_FOLLOWING_RANGE;
438
+ } else {
439
+ throw NotImplementedException("FromString not implemented for enum value");
440
+ }
441
+ }
442
+
443
+ template <>
444
+ const char *EnumSerializer::EnumToString(WindowBoundary value) {
445
+ switch (value) {
446
+ case WindowBoundary::INVALID:
447
+ return "INVALID";
448
+ case WindowBoundary::UNBOUNDED_PRECEDING:
449
+ return "UNBOUNDED_PRECEDING";
450
+ case WindowBoundary::UNBOUNDED_FOLLOWING:
451
+ return "UNBOUNDED_FOLLOWING";
452
+ case WindowBoundary::CURRENT_ROW_RANGE:
453
+ return "CURRENT_ROW_RANGE";
454
+ case WindowBoundary::CURRENT_ROW_ROWS:
455
+ return "CURRENT_ROW_ROWS";
456
+ case WindowBoundary::EXPR_PRECEDING_ROWS:
457
+ return "EXPR_PRECEDING_ROWS";
458
+ case WindowBoundary::EXPR_FOLLOWING_ROWS:
459
+ return "EXPR_FOLLOWING_ROWS";
460
+ case WindowBoundary::EXPR_PRECEDING_RANGE:
461
+ return "EXPR_PRECEDING_RANGE";
462
+ case WindowBoundary::EXPR_FOLLOWING_RANGE:
463
+ return "EXPR_FOLLOWING_RANGE";
464
+ default:
465
+ throw NotImplementedException("ToString not implemented for enum value");
466
+ }
467
+ }
468
+
469
+ //-----------------------------------------------
470
+ // SubqueryType
471
+ //-----------------------------------------------
472
+ template <>
473
+ SubqueryType EnumSerializer::StringToEnum(const char *value) {
474
+ if (StringUtil::Equals(value, "INVALID")) {
475
+ return SubqueryType::INVALID;
476
+ } else if (StringUtil::Equals(value, "SCALAR")) {
477
+ return SubqueryType::SCALAR;
478
+ } else if (StringUtil::Equals(value, "EXISTS")) {
479
+ return SubqueryType::EXISTS;
480
+ } else if (StringUtil::Equals(value, "NOT_EXISTS")) {
481
+ return SubqueryType::NOT_EXISTS;
482
+ } else if (StringUtil::Equals(value, "ANY")) {
483
+ return SubqueryType::ANY;
484
+ } else {
485
+ throw NotImplementedException("EnumSerializer::StringToEnum not implemented for enum value");
486
+ }
487
+ }
488
+
489
+ template <>
490
+ const char *EnumSerializer::EnumToString(SubqueryType value) {
491
+ switch (value) {
492
+ case SubqueryType::INVALID:
493
+ return "INVALID";
494
+ case SubqueryType::SCALAR:
495
+ return "SCALAR";
496
+ case SubqueryType::EXISTS:
497
+ return "EXISTS";
498
+ case SubqueryType::NOT_EXISTS:
499
+ return "NOT_EXISTS";
500
+ case SubqueryType::ANY:
501
+ return "ANY";
502
+ default:
503
+ throw NotImplementedException("EnumSerializer::EnumToString not implemented for enum value");
504
+ }
505
+ }
506
+
507
+ //-----------------------------------------------
508
+ // ExpressionType
509
+ //-----------------------------------------------
510
+ template <>
511
+ ExpressionType EnumSerializer::StringToEnum(const char *value) {
512
+ if (StringUtil::Equals(value, "CAST")) {
513
+ return ExpressionType::OPERATOR_CAST;
514
+ } else if (StringUtil::Equals(value, "NOT")) {
515
+ return ExpressionType::OPERATOR_NOT;
516
+ } else if (StringUtil::Equals(value, "IS_NULL")) {
517
+ return ExpressionType::OPERATOR_IS_NULL;
518
+ } else if (StringUtil::Equals(value, "IS_NOT_NULL")) {
519
+ return ExpressionType::OPERATOR_IS_NOT_NULL;
520
+ } else if (StringUtil::Equals(value, "EQUAL")) {
521
+ return ExpressionType::COMPARE_EQUAL;
522
+ } else if (StringUtil::Equals(value, "NOTEQUAL")) {
523
+ return ExpressionType::COMPARE_NOTEQUAL;
524
+ } else if (StringUtil::Equals(value, "LESSTHAN")) {
525
+ return ExpressionType::COMPARE_LESSTHAN;
526
+ } else if (StringUtil::Equals(value, "GREATERTHAN")) {
527
+ return ExpressionType::COMPARE_GREATERTHAN;
528
+ } else if (StringUtil::Equals(value, "LESSTHANOREQUALTO")) {
529
+ return ExpressionType::COMPARE_LESSTHANOREQUALTO;
530
+ } else if (StringUtil::Equals(value, "GREATERTHANOREQUALTO")) {
531
+ return ExpressionType::COMPARE_GREATERTHANOREQUALTO;
532
+ } else if (StringUtil::Equals(value, "IN")) {
533
+ return ExpressionType::COMPARE_IN;
534
+ } else if (StringUtil::Equals(value, "DISTINCT_FROM")) {
535
+ return ExpressionType::COMPARE_DISTINCT_FROM;
536
+ } else if (StringUtil::Equals(value, "NOT_DISTINCT_FROM")) {
537
+ return ExpressionType::COMPARE_NOT_DISTINCT_FROM;
538
+ } else if (StringUtil::Equals(value, "AND")) {
539
+ return ExpressionType::CONJUNCTION_AND;
540
+ } else if (StringUtil::Equals(value, "OR")) {
541
+ return ExpressionType::CONJUNCTION_OR;
542
+ } else if (StringUtil::Equals(value, "CONSTANT")) {
543
+ return ExpressionType::VALUE_CONSTANT;
544
+ } else if (StringUtil::Equals(value, "PARAMETER")) {
545
+ return ExpressionType::VALUE_PARAMETER;
546
+ } else if (StringUtil::Equals(value, "TUPLE")) {
547
+ return ExpressionType::VALUE_TUPLE;
548
+ } else if (StringUtil::Equals(value, "TUPLE_ADDRESS")) {
549
+ return ExpressionType::VALUE_TUPLE_ADDRESS;
550
+ } else if (StringUtil::Equals(value, "NULL")) {
551
+ return ExpressionType::VALUE_NULL;
552
+ } else if (StringUtil::Equals(value, "VECTOR")) {
553
+ return ExpressionType::VALUE_VECTOR;
554
+ } else if (StringUtil::Equals(value, "SCALAR")) {
555
+ return ExpressionType::VALUE_SCALAR;
556
+ } else if (StringUtil::Equals(value, "AGGREGATE")) {
557
+ return ExpressionType::AGGREGATE;
558
+ } else if (StringUtil::Equals(value, "WINDOW_AGGREGATE")) {
559
+ return ExpressionType::WINDOW_AGGREGATE;
560
+ } else if (StringUtil::Equals(value, "RANK")) {
561
+ return ExpressionType::WINDOW_RANK;
562
+ } else if (StringUtil::Equals(value, "RANK_DENSE")) {
563
+ return ExpressionType::WINDOW_RANK_DENSE;
564
+ } else if (StringUtil::Equals(value, "PERCENT_RANK")) {
565
+ return ExpressionType::WINDOW_PERCENT_RANK;
566
+ } else if (StringUtil::Equals(value, "ROW_NUMBER")) {
567
+ return ExpressionType::WINDOW_ROW_NUMBER;
568
+ } else if (StringUtil::Equals(value, "FIRST_VALUE")) {
569
+ return ExpressionType::WINDOW_FIRST_VALUE;
570
+ } else if (StringUtil::Equals(value, "LAST_VALUE")) {
571
+ return ExpressionType::WINDOW_LAST_VALUE;
572
+ } else if (StringUtil::Equals(value, "NTH_VALUE")) {
573
+ return ExpressionType::WINDOW_NTH_VALUE;
574
+ } else if (StringUtil::Equals(value, "CUME_DIST")) {
575
+ return ExpressionType::WINDOW_CUME_DIST;
576
+ } else if (StringUtil::Equals(value, "LEAD")) {
577
+ return ExpressionType::WINDOW_LEAD;
578
+ } else if (StringUtil::Equals(value, "LAG")) {
579
+ return ExpressionType::WINDOW_LAG;
580
+ } else if (StringUtil::Equals(value, "NTILE")) {
581
+ return ExpressionType::WINDOW_NTILE;
582
+ } else if (StringUtil::Equals(value, "FUNCTION")) {
583
+ return ExpressionType::FUNCTION;
584
+ } else if (StringUtil::Equals(value, "CASE")) {
585
+ return ExpressionType::CASE_EXPR;
586
+ } else if (StringUtil::Equals(value, "NULLIF")) {
587
+ return ExpressionType::OPERATOR_NULLIF;
588
+ } else if (StringUtil::Equals(value, "COALESCE")) {
589
+ return ExpressionType::OPERATOR_COALESCE;
590
+ } else if (StringUtil::Equals(value, "ARRAY_EXTRACT")) {
591
+ return ExpressionType::ARRAY_EXTRACT;
592
+ } else if (StringUtil::Equals(value, "ARRAY_SLICE")) {
593
+ return ExpressionType::ARRAY_SLICE;
594
+ } else if (StringUtil::Equals(value, "STRUCT_EXTRACT")) {
595
+ return ExpressionType::STRUCT_EXTRACT;
596
+ } else if (StringUtil::Equals(value, "SUBQUERY")) {
597
+ return ExpressionType::SUBQUERY;
598
+ } else if (StringUtil::Equals(value, "STAR")) {
599
+ return ExpressionType::STAR;
600
+ } else if (StringUtil::Equals(value, "PLACEHOLDER")) {
601
+ return ExpressionType::PLACEHOLDER;
602
+ } else if (StringUtil::Equals(value, "COLUMN_REF")) {
603
+ return ExpressionType::COLUMN_REF;
604
+ } else if (StringUtil::Equals(value, "FUNCTION_REF")) {
605
+ return ExpressionType::FUNCTION_REF;
606
+ } else if (StringUtil::Equals(value, "TABLE_REF")) {
607
+ return ExpressionType::TABLE_REF;
608
+ } else if (StringUtil::Equals(value, "CAST")) {
609
+ return ExpressionType::CAST;
610
+ } else if (StringUtil::Equals(value, "COMPARE_NOT_IN")) {
611
+ return ExpressionType::COMPARE_NOT_IN;
612
+ } else if (StringUtil::Equals(value, "COMPARE_BETWEEN")) {
613
+ return ExpressionType::COMPARE_BETWEEN;
614
+ } else if (StringUtil::Equals(value, "COMPARE_NOT_BETWEEN")) {
615
+ return ExpressionType::COMPARE_NOT_BETWEEN;
616
+ } else if (StringUtil::Equals(value, "VALUE_DEFAULT")) {
617
+ return ExpressionType::VALUE_DEFAULT;
618
+ } else if (StringUtil::Equals(value, "BOUND_REF")) {
619
+ return ExpressionType::BOUND_REF;
620
+ } else if (StringUtil::Equals(value, "BOUND_COLUMN_REF")) {
621
+ return ExpressionType::BOUND_COLUMN_REF;
622
+ } else if (StringUtil::Equals(value, "BOUND_FUNCTION")) {
623
+ return ExpressionType::BOUND_FUNCTION;
624
+ } else if (StringUtil::Equals(value, "BOUND_AGGREGATE")) {
625
+ return ExpressionType::BOUND_AGGREGATE;
626
+ } else if (StringUtil::Equals(value, "GROUPING")) {
627
+ return ExpressionType::GROUPING_FUNCTION;
628
+ } else if (StringUtil::Equals(value, "ARRAY_CONSTRUCTOR")) {
629
+ return ExpressionType::ARRAY_CONSTRUCTOR;
630
+ } else if (StringUtil::Equals(value, "TABLE_STAR")) {
631
+ return ExpressionType::TABLE_STAR;
632
+ } else if (StringUtil::Equals(value, "BOUND_UNNEST")) {
633
+ return ExpressionType::BOUND_UNNEST;
634
+ } else if (StringUtil::Equals(value, "COLLATE")) {
635
+ return ExpressionType::COLLATE;
636
+ } else if (StringUtil::Equals(value, "POSITIONAL_REFERENCE")) {
637
+ return ExpressionType::POSITIONAL_REFERENCE;
638
+ } else if (StringUtil::Equals(value, "BOUND_LAMBDA_REF")) {
639
+ return ExpressionType::BOUND_LAMBDA_REF;
640
+ } else if (StringUtil::Equals(value, "LAMBDA")) {
641
+ return ExpressionType::LAMBDA;
642
+ } else if (StringUtil::Equals(value, "ARROW")) {
643
+ return ExpressionType::ARROW;
644
+ } else {
645
+ return ExpressionType::INVALID;
646
+ }
647
+ }
648
+
649
+ template <>
650
+ const char *EnumSerializer::EnumToString(ExpressionType value) {
651
+ switch (value) {
652
+ case ExpressionType::OPERATOR_CAST:
653
+ return "CAST";
654
+ case ExpressionType::OPERATOR_NOT:
655
+ return "NOT";
656
+ case ExpressionType::OPERATOR_IS_NULL:
657
+ return "IS_NULL";
658
+ case ExpressionType::OPERATOR_IS_NOT_NULL:
659
+ return "IS_NOT_NULL";
660
+ case ExpressionType::COMPARE_EQUAL:
661
+ return "EQUAL";
662
+ case ExpressionType::COMPARE_NOTEQUAL:
663
+ return "NOTEQUAL";
664
+ case ExpressionType::COMPARE_LESSTHAN:
665
+ return "LESSTHAN";
666
+ case ExpressionType::COMPARE_GREATERTHAN:
667
+ return "GREATERTHAN";
668
+ case ExpressionType::COMPARE_LESSTHANOREQUALTO:
669
+ return "LESSTHANOREQUALTO";
670
+ case ExpressionType::COMPARE_GREATERTHANOREQUALTO:
671
+ return "GREATERTHANOREQUALTO";
672
+ case ExpressionType::COMPARE_IN:
673
+ return "IN";
674
+ case ExpressionType::COMPARE_DISTINCT_FROM:
675
+ return "DISTINCT_FROM";
676
+ case ExpressionType::COMPARE_NOT_DISTINCT_FROM:
677
+ return "NOT_DISTINCT_FROM";
678
+ case ExpressionType::CONJUNCTION_AND:
679
+ return "AND";
680
+ case ExpressionType::CONJUNCTION_OR:
681
+ return "OR";
682
+ case ExpressionType::VALUE_CONSTANT:
683
+ return "CONSTANT";
684
+ case ExpressionType::VALUE_PARAMETER:
685
+ return "PARAMETER";
686
+ case ExpressionType::VALUE_TUPLE:
687
+ return "TUPLE";
688
+ case ExpressionType::VALUE_TUPLE_ADDRESS:
689
+ return "TUPLE_ADDRESS";
690
+ case ExpressionType::VALUE_NULL:
691
+ return "NULL";
692
+ case ExpressionType::VALUE_VECTOR:
693
+ return "VECTOR";
694
+ case ExpressionType::VALUE_SCALAR:
695
+ return "SCALAR";
696
+ case ExpressionType::AGGREGATE:
697
+ return "AGGREGATE";
698
+ case ExpressionType::WINDOW_AGGREGATE:
699
+ return "WINDOW_AGGREGATE";
700
+ case ExpressionType::WINDOW_RANK:
701
+ return "RANK";
702
+ case ExpressionType::WINDOW_RANK_DENSE:
703
+ return "RANK_DENSE";
704
+ case ExpressionType::WINDOW_PERCENT_RANK:
705
+ return "PERCENT_RANK";
706
+ case ExpressionType::WINDOW_ROW_NUMBER:
707
+ return "ROW_NUMBER";
708
+ case ExpressionType::WINDOW_FIRST_VALUE:
709
+ return "FIRST_VALUE";
710
+ case ExpressionType::WINDOW_LAST_VALUE:
711
+ return "LAST_VALUE";
712
+ case ExpressionType::WINDOW_NTH_VALUE:
713
+ return "NTH_VALUE";
714
+ case ExpressionType::WINDOW_CUME_DIST:
715
+ return "CUME_DIST";
716
+ case ExpressionType::WINDOW_LEAD:
717
+ return "LEAD";
718
+ case ExpressionType::WINDOW_LAG:
719
+ return "LAG";
720
+ case ExpressionType::WINDOW_NTILE:
721
+ return "NTILE";
722
+ case ExpressionType::FUNCTION:
723
+ return "FUNCTION";
724
+ case ExpressionType::CASE_EXPR:
725
+ return "CASE";
726
+ case ExpressionType::OPERATOR_NULLIF:
727
+ return "NULLIF";
728
+ case ExpressionType::OPERATOR_COALESCE:
729
+ return "COALESCE";
730
+ case ExpressionType::ARRAY_EXTRACT:
731
+ return "ARRAY_EXTRACT";
732
+ case ExpressionType::ARRAY_SLICE:
733
+ return "ARRAY_SLICE";
734
+ case ExpressionType::STRUCT_EXTRACT:
735
+ return "STRUCT_EXTRACT";
736
+ case ExpressionType::SUBQUERY:
737
+ return "SUBQUERY";
738
+ case ExpressionType::STAR:
739
+ return "STAR";
740
+ case ExpressionType::PLACEHOLDER:
741
+ return "PLACEHOLDER";
742
+ case ExpressionType::COLUMN_REF:
743
+ return "COLUMN_REF";
744
+ case ExpressionType::FUNCTION_REF:
745
+ return "FUNCTION_REF";
746
+ case ExpressionType::TABLE_REF:
747
+ return "TABLE_REF";
748
+ case ExpressionType::CAST:
749
+ return "CAST";
750
+ case ExpressionType::COMPARE_NOT_IN:
751
+ return "COMPARE_NOT_IN";
752
+ case ExpressionType::COMPARE_BETWEEN:
753
+ return "COMPARE_BETWEEN";
754
+ case ExpressionType::COMPARE_NOT_BETWEEN:
755
+ return "COMPARE_NOT_BETWEEN";
756
+ case ExpressionType::VALUE_DEFAULT:
757
+ return "VALUE_DEFAULT";
758
+ case ExpressionType::BOUND_REF:
759
+ return "BOUND_REF";
760
+ case ExpressionType::BOUND_COLUMN_REF:
761
+ return "BOUND_COLUMN_REF";
762
+ case ExpressionType::BOUND_FUNCTION:
763
+ return "BOUND_FUNCTION";
764
+ case ExpressionType::BOUND_AGGREGATE:
765
+ return "BOUND_AGGREGATE";
766
+ case ExpressionType::GROUPING_FUNCTION:
767
+ return "GROUPING";
768
+ case ExpressionType::ARRAY_CONSTRUCTOR:
769
+ return "ARRAY_CONSTRUCTOR";
770
+ case ExpressionType::TABLE_STAR:
771
+ return "TABLE_STAR";
772
+ case ExpressionType::BOUND_UNNEST:
773
+ return "BOUND_UNNEST";
774
+ case ExpressionType::COLLATE:
775
+ return "COLLATE";
776
+ case ExpressionType::POSITIONAL_REFERENCE:
777
+ return "POSITIONAL_REFERENCE";
778
+ case ExpressionType::BOUND_LAMBDA_REF:
779
+ return "BOUND_LAMBDA_REF";
780
+ case ExpressionType::LAMBDA:
781
+ return "LAMBDA";
782
+ case ExpressionType::ARROW:
783
+ return "ARROW";
784
+ case ExpressionType::INVALID:
785
+ break;
786
+ }
787
+ return "INVALID";
788
+ }
789
+
790
+ //-----------------------------------------------
791
+ // ExpressionClass
792
+ //-----------------------------------------------
793
+ template <>
794
+ ExpressionClass EnumSerializer::StringToEnum(const char *value) {
795
+ if (StringUtil::Equals(value, "INVALID")) {
796
+ return ExpressionClass::INVALID;
797
+ } else if (StringUtil::Equals(value, "AGGREGATE")) {
798
+ return ExpressionClass::AGGREGATE;
799
+ } else if (StringUtil::Equals(value, "CASE")) {
800
+ return ExpressionClass::CASE;
801
+ } else if (StringUtil::Equals(value, "CAST")) {
802
+ return ExpressionClass::CAST;
803
+ } else if (StringUtil::Equals(value, "COLUMN_REF")) {
804
+ return ExpressionClass::COLUMN_REF;
805
+ } else if (StringUtil::Equals(value, "COMPARISON")) {
806
+ return ExpressionClass::COMPARISON;
807
+ } else if (StringUtil::Equals(value, "CONJUNCTION")) {
808
+ return ExpressionClass::CONJUNCTION;
809
+ } else if (StringUtil::Equals(value, "CONSTANT")) {
810
+ return ExpressionClass::CONSTANT;
811
+ } else if (StringUtil::Equals(value, "DEFAULT")) {
812
+ return ExpressionClass::DEFAULT;
813
+ } else if (StringUtil::Equals(value, "FUNCTION")) {
814
+ return ExpressionClass::FUNCTION;
815
+ } else if (StringUtil::Equals(value, "OPERATOR")) {
816
+ return ExpressionClass::OPERATOR;
817
+ } else if (StringUtil::Equals(value, "STAR")) {
818
+ return ExpressionClass::STAR;
819
+ } else if (StringUtil::Equals(value, "SUBQUERY")) {
820
+ return ExpressionClass::SUBQUERY;
821
+ } else if (StringUtil::Equals(value, "WINDOW")) {
822
+ return ExpressionClass::WINDOW;
823
+ } else if (StringUtil::Equals(value, "PARAMETER")) {
824
+ return ExpressionClass::PARAMETER;
825
+ } else if (StringUtil::Equals(value, "COLLATE")) {
826
+ return ExpressionClass::COLLATE;
827
+ } else if (StringUtil::Equals(value, "LAMBDA")) {
828
+ return ExpressionClass::LAMBDA;
829
+ } else if (StringUtil::Equals(value, "POSITIONAL_REFERENCE")) {
830
+ return ExpressionClass::POSITIONAL_REFERENCE;
831
+ } else if (StringUtil::Equals(value, "BETWEEN")) {
832
+ return ExpressionClass::BETWEEN;
833
+ } else if (StringUtil::Equals(value, "BOUND_AGGREGATE")) {
834
+ return ExpressionClass::BOUND_AGGREGATE;
835
+ } else if (StringUtil::Equals(value, "BOUND_CASE")) {
836
+ return ExpressionClass::BOUND_CASE;
837
+ } else if (StringUtil::Equals(value, "BOUND_CAST")) {
838
+ return ExpressionClass::BOUND_CAST;
839
+ } else if (StringUtil::Equals(value, "BOUND_COLUMN_REF")) {
840
+ return ExpressionClass::BOUND_COLUMN_REF;
841
+ } else if (StringUtil::Equals(value, "BOUND_COMPARISON")) {
842
+ return ExpressionClass::BOUND_COMPARISON;
843
+ } else if (StringUtil::Equals(value, "BOUND_CONJUNCTION")) {
844
+ return ExpressionClass::BOUND_CONJUNCTION;
845
+ } else if (StringUtil::Equals(value, "BOUND_CONSTANT")) {
846
+ return ExpressionClass::BOUND_CONSTANT;
847
+ } else if (StringUtil::Equals(value, "BOUND_DEFAULT")) {
848
+ return ExpressionClass::BOUND_DEFAULT;
849
+ } else if (StringUtil::Equals(value, "BOUND_FUNCTION")) {
850
+ return ExpressionClass::BOUND_FUNCTION;
851
+ } else if (StringUtil::Equals(value, "BOUND_OPERATOR")) {
852
+ return ExpressionClass::BOUND_OPERATOR;
853
+ } else if (StringUtil::Equals(value, "BOUND_PARAMETER")) {
854
+ return ExpressionClass::BOUND_PARAMETER;
855
+ } else if (StringUtil::Equals(value, "BOUND_REF")) {
856
+ return ExpressionClass::BOUND_REF;
857
+ } else if (StringUtil::Equals(value, "BOUND_SUBQUERY")) {
858
+ return ExpressionClass::BOUND_SUBQUERY;
859
+ } else if (StringUtil::Equals(value, "BOUND_WINDOW")) {
860
+ return ExpressionClass::BOUND_WINDOW;
861
+ } else if (StringUtil::Equals(value, "BOUND_BETWEEN")) {
862
+ return ExpressionClass::BOUND_BETWEEN;
863
+ } else if (StringUtil::Equals(value, "BOUND_UNNEST")) {
864
+ return ExpressionClass::BOUND_UNNEST;
865
+ } else if (StringUtil::Equals(value, "BOUND_LAMBDA")) {
866
+ return ExpressionClass::BOUND_LAMBDA;
867
+ } else if (StringUtil::Equals(value, "BOUND_EXPRESSION")) {
868
+ return ExpressionClass::BOUND_EXPRESSION;
869
+ } else {
870
+ throw NotImplementedException("Unrecognized ExpressionClass value");
871
+ }
872
+ }
873
+
874
+ template <>
875
+ const char *EnumSerializer::EnumToString(ExpressionClass value) {
876
+ switch (value) {
877
+ case ExpressionClass::INVALID:
878
+ return "INVALID";
879
+ case ExpressionClass::AGGREGATE:
880
+ return "AGGREGATE";
881
+ case ExpressionClass::CASE:
882
+ return "CASE";
883
+ case ExpressionClass::CAST:
884
+ return "CAST";
885
+ case ExpressionClass::COLUMN_REF:
886
+ return "COLUMN_REF";
887
+ case ExpressionClass::COMPARISON:
888
+ return "COMPARISON";
889
+ case ExpressionClass::CONJUNCTION:
890
+ return "CONJUNCTION";
891
+ case ExpressionClass::CONSTANT:
892
+ return "CONSTANT";
893
+ case ExpressionClass::DEFAULT:
894
+ return "DEFAULT";
895
+ case ExpressionClass::FUNCTION:
896
+ return "FUNCTION";
897
+ case ExpressionClass::OPERATOR:
898
+ return "OPERATOR";
899
+ case ExpressionClass::STAR:
900
+ return "STAR";
901
+ case ExpressionClass::SUBQUERY:
902
+ return "SUBQUERY";
903
+ case ExpressionClass::WINDOW:
904
+ return "WINDOW";
905
+ case ExpressionClass::PARAMETER:
906
+ return "PARAMETER";
907
+ case ExpressionClass::COLLATE:
908
+ return "COLLATE";
909
+ case ExpressionClass::LAMBDA:
910
+ return "LAMBDA";
911
+ case ExpressionClass::POSITIONAL_REFERENCE:
912
+ return "POSITIONAL_REFERENCE";
913
+ case ExpressionClass::BETWEEN:
914
+ return "BETWEEN";
915
+ case ExpressionClass::BOUND_AGGREGATE:
916
+ return "BOUND_AGGREGATE";
917
+ case ExpressionClass::BOUND_CASE:
918
+ return "BOUND_CASE";
919
+ case ExpressionClass::BOUND_CAST:
920
+ return "BOUND_CAST";
921
+ case ExpressionClass::BOUND_COLUMN_REF:
922
+ return "BOUND_COLUMN_REF";
923
+ case ExpressionClass::BOUND_COMPARISON:
924
+ return "BOUND_COMPARISON";
925
+ case ExpressionClass::BOUND_CONJUNCTION:
926
+ return "BOUND_CONJUNCTION";
927
+ case ExpressionClass::BOUND_CONSTANT:
928
+ return "BOUND_CONSTANT";
929
+ case ExpressionClass::BOUND_DEFAULT:
930
+ return "BOUND_DEFAULT";
931
+ case ExpressionClass::BOUND_FUNCTION:
932
+ return "BOUND_FUNCTION";
933
+ case ExpressionClass::BOUND_OPERATOR:
934
+ return "BOUND_OPERATOR";
935
+ case ExpressionClass::BOUND_PARAMETER:
936
+ return "BOUND_PARAMETER";
937
+ case ExpressionClass::BOUND_REF:
938
+ return "BOUND_REF";
939
+ case ExpressionClass::BOUND_SUBQUERY:
940
+ return "BOUND_SUBQUERY";
941
+ case ExpressionClass::BOUND_WINDOW:
942
+ return "BOUND_WINDOW";
943
+ case ExpressionClass::BOUND_BETWEEN:
944
+ return "BOUND_BETWEEN";
945
+ case ExpressionClass::BOUND_UNNEST:
946
+ return "BOUND_UNNEST";
947
+ case ExpressionClass::BOUND_LAMBDA:
948
+ return "BOUND_LAMBDA";
949
+ case ExpressionClass::BOUND_EXPRESSION:
950
+ return "BOUND_EXPRESSION";
951
+ default:
952
+ return "ExpressionClass::!!UNIMPLEMENTED_CASE!!";
953
+ }
954
+ }
955
+
956
+ //-----------------------------------------------
957
+ // SampleMethod
958
+ //-----------------------------------------------
959
+ template <>
960
+ SampleMethod EnumSerializer::StringToEnum(const char *value) {
961
+ if (StringUtil::Equals(value, "System")) {
962
+ return SampleMethod::SYSTEM_SAMPLE;
963
+ } else if (StringUtil::Equals(value, "Bernoulli")) {
964
+ return SampleMethod::BERNOULLI_SAMPLE;
965
+ } else if (StringUtil::Equals(value, "Reservoir")) {
966
+ return SampleMethod::RESERVOIR_SAMPLE;
967
+ } else {
968
+ throw NotImplementedException("Unrecognized sample method type \"%s\"", value);
969
+ }
970
+ }
971
+
972
+ template <>
973
+ const char *EnumSerializer::EnumToString(SampleMethod value) {
974
+ switch (value) {
975
+ case SampleMethod::SYSTEM_SAMPLE:
976
+ return "System";
977
+ case SampleMethod::BERNOULLI_SAMPLE:
978
+ return "Bernoulli";
979
+ case SampleMethod::RESERVOIR_SAMPLE:
980
+ return "Reservoir";
981
+ default:
982
+ return "Unknown";
983
+ }
984
+ }
985
+
986
+ //-----------------------------------------------
987
+ // LogicalType
988
+ //-----------------------------------------------
989
+ template <>
990
+ LogicalTypeId EnumSerializer::StringToEnum(const char *value) {
991
+ if (StringUtil::Equals(value, "BOOLEAN")) {
992
+ return LogicalTypeId::BOOLEAN;
993
+ } else if (StringUtil::Equals(value, "TINYINT")) {
994
+ return LogicalTypeId::TINYINT;
995
+ } else if (StringUtil::Equals(value, "SMALLINT")) {
996
+ return LogicalTypeId::SMALLINT;
997
+ } else if (StringUtil::Equals(value, "INTEGER")) {
998
+ return LogicalTypeId::INTEGER;
999
+ } else if (StringUtil::Equals(value, "BIGINT")) {
1000
+ return LogicalTypeId::BIGINT;
1001
+ } else if (StringUtil::Equals(value, "HUGEINT")) {
1002
+ return LogicalTypeId::HUGEINT;
1003
+ } else if (StringUtil::Equals(value, "UUID")) {
1004
+ return LogicalTypeId::UUID;
1005
+ } else if (StringUtil::Equals(value, "UTINYINT")) {
1006
+ return LogicalTypeId::UTINYINT;
1007
+ } else if (StringUtil::Equals(value, "USMALLINT")) {
1008
+ return LogicalTypeId::USMALLINT;
1009
+ } else if (StringUtil::Equals(value, "UINTEGER")) {
1010
+ return LogicalTypeId::UINTEGER;
1011
+ } else if (StringUtil::Equals(value, "UBIGINT")) {
1012
+ return LogicalTypeId::UBIGINT;
1013
+ } else if (StringUtil::Equals(value, "DATE")) {
1014
+ return LogicalTypeId::DATE;
1015
+ } else if (StringUtil::Equals(value, "TIME")) {
1016
+ return LogicalTypeId::TIME;
1017
+ } else if (StringUtil::Equals(value, "TIMESTAMP")) {
1018
+ return LogicalTypeId::TIMESTAMP;
1019
+ } else if (StringUtil::Equals(value, "TIMESTAMP_MS")) {
1020
+ return LogicalTypeId::TIMESTAMP_MS;
1021
+ } else if (StringUtil::Equals(value, "TIMESTAMP_NS")) {
1022
+ return LogicalTypeId::TIMESTAMP_NS;
1023
+ } else if (StringUtil::Equals(value, "TIMESTAMP_S")) {
1024
+ return LogicalTypeId::TIMESTAMP_SEC;
1025
+ } else if (StringUtil::Equals(value, "TIMESTAMP WITH TIME ZONE")) {
1026
+ return LogicalTypeId::TIMESTAMP_TZ;
1027
+ } else if (StringUtil::Equals(value, "TIME WITH TIME ZONE")) {
1028
+ return LogicalTypeId::TIME_TZ;
1029
+ } else if (StringUtil::Equals(value, "FLOAT")) {
1030
+ return LogicalTypeId::FLOAT;
1031
+ } else if (StringUtil::Equals(value, "DOUBLE")) {
1032
+ return LogicalTypeId::DOUBLE;
1033
+ } else if (StringUtil::Equals(value, "DECIMAL")) {
1034
+ return LogicalTypeId::DECIMAL;
1035
+ } else if (StringUtil::Equals(value, "VARCHAR")) {
1036
+ return LogicalTypeId::VARCHAR;
1037
+ } else if (StringUtil::Equals(value, "BLOB")) {
1038
+ return LogicalTypeId::BLOB;
1039
+ } else if (StringUtil::Equals(value, "CHAR")) {
1040
+ return LogicalTypeId::CHAR;
1041
+ } else if (StringUtil::Equals(value, "INTERVAL")) {
1042
+ return LogicalTypeId::INTERVAL;
1043
+ } else if (StringUtil::Equals(value, "NULL")) {
1044
+ return LogicalTypeId::SQLNULL;
1045
+ } else if (StringUtil::Equals(value, "ANY")) {
1046
+ return LogicalTypeId::ANY;
1047
+ } else if (StringUtil::Equals(value, "VALIDITY")) {
1048
+ return LogicalTypeId::VALIDITY;
1049
+ } else if (StringUtil::Equals(value, "STRUCT")) {
1050
+ return LogicalTypeId::STRUCT;
1051
+ } else if (StringUtil::Equals(value, "LIST")) {
1052
+ return LogicalTypeId::LIST;
1053
+ } else if (StringUtil::Equals(value, "MAP")) {
1054
+ return LogicalTypeId::MAP;
1055
+ } else if (StringUtil::Equals(value, "POINTER")) {
1056
+ return LogicalTypeId::POINTER;
1057
+ } else if (StringUtil::Equals(value, "TABLE")) {
1058
+ return LogicalTypeId::TABLE;
1059
+ } else if (StringUtil::Equals(value, "LAMBDA")) {
1060
+ return LogicalTypeId::LAMBDA;
1061
+ } else if (StringUtil::Equals(value, "INVALID")) {
1062
+ return LogicalTypeId::INVALID;
1063
+ } else if (StringUtil::Equals(value, "UNION")) {
1064
+ return LogicalTypeId::UNION;
1065
+ } else if (StringUtil::Equals(value, "UNKNOWN")) {
1066
+ return LogicalTypeId::UNKNOWN;
1067
+ } else if (StringUtil::Equals(value, "ENUM")) {
1068
+ return LogicalTypeId::ENUM;
1069
+ } else if (StringUtil::Equals(value, "AGGREGATE_STATE")) {
1070
+ return LogicalTypeId::AGGREGATE_STATE;
1071
+ } else if (StringUtil::Equals(value, "USER")) {
1072
+ return LogicalTypeId::USER;
1073
+ } else if (StringUtil::Equals(value, "BIT")) {
1074
+ return LogicalTypeId::BIT;
1075
+ } else {
1076
+ throw NotImplementedException(
1077
+ "Unrecognized type LogicalTypeId in EnumSerializer::EnumSerializer::StringToEnum");
1078
+ }
1079
+ }
1080
+
1081
+ template <>
1082
+ const char *EnumSerializer::EnumToString(LogicalTypeId value) {
1083
+ switch (value) {
1084
+ case LogicalTypeId::BOOLEAN:
1085
+ return "BOOLEAN";
1086
+ case LogicalTypeId::TINYINT:
1087
+ return "TINYINT";
1088
+ case LogicalTypeId::SMALLINT:
1089
+ return "SMALLINT";
1090
+ case LogicalTypeId::INTEGER:
1091
+ return "INTEGER";
1092
+ case LogicalTypeId::BIGINT:
1093
+ return "BIGINT";
1094
+ case LogicalTypeId::HUGEINT:
1095
+ return "HUGEINT";
1096
+ case LogicalTypeId::UUID:
1097
+ return "UUID";
1098
+ case LogicalTypeId::UTINYINT:
1099
+ return "UTINYINT";
1100
+ case LogicalTypeId::USMALLINT:
1101
+ return "USMALLINT";
1102
+ case LogicalTypeId::UINTEGER:
1103
+ return "UINTEGER";
1104
+ case LogicalTypeId::UBIGINT:
1105
+ return "UBIGINT";
1106
+ case LogicalTypeId::DATE:
1107
+ return "DATE";
1108
+ case LogicalTypeId::TIME:
1109
+ return "TIME";
1110
+ case LogicalTypeId::TIMESTAMP:
1111
+ return "TIMESTAMP";
1112
+ case LogicalTypeId::TIMESTAMP_MS:
1113
+ return "TIMESTAMP_MS";
1114
+ case LogicalTypeId::TIMESTAMP_NS:
1115
+ return "TIMESTAMP_NS";
1116
+ case LogicalTypeId::TIMESTAMP_SEC:
1117
+ return "TIMESTAMP_S";
1118
+ case LogicalTypeId::TIMESTAMP_TZ:
1119
+ return "TIMESTAMP WITH TIME ZONE";
1120
+ case LogicalTypeId::TIME_TZ:
1121
+ return "TIME WITH TIME ZONE";
1122
+ case LogicalTypeId::FLOAT:
1123
+ return "FLOAT";
1124
+ case LogicalTypeId::DOUBLE:
1125
+ return "DOUBLE";
1126
+ case LogicalTypeId::DECIMAL:
1127
+ return "DECIMAL";
1128
+ case LogicalTypeId::VARCHAR:
1129
+ return "VARCHAR";
1130
+ case LogicalTypeId::BLOB:
1131
+ return "BLOB";
1132
+ case LogicalTypeId::CHAR:
1133
+ return "CHAR";
1134
+ case LogicalTypeId::INTERVAL:
1135
+ return "INTERVAL";
1136
+ case LogicalTypeId::SQLNULL:
1137
+ return "NULL";
1138
+ case LogicalTypeId::ANY:
1139
+ return "ANY";
1140
+ case LogicalTypeId::VALIDITY:
1141
+ return "VALIDITY";
1142
+ case LogicalTypeId::STRUCT:
1143
+ return "STRUCT";
1144
+ case LogicalTypeId::LIST:
1145
+ return "LIST";
1146
+ case LogicalTypeId::MAP:
1147
+ return "MAP";
1148
+ case LogicalTypeId::POINTER:
1149
+ return "POINTER";
1150
+ case LogicalTypeId::TABLE:
1151
+ return "TABLE";
1152
+ case LogicalTypeId::LAMBDA:
1153
+ return "LAMBDA";
1154
+ case LogicalTypeId::INVALID:
1155
+ return "INVALID";
1156
+ case LogicalTypeId::UNION:
1157
+ return "UNION";
1158
+ case LogicalTypeId::UNKNOWN:
1159
+ return "UNKNOWN";
1160
+ case LogicalTypeId::ENUM:
1161
+ return "ENUM";
1162
+ case LogicalTypeId::AGGREGATE_STATE:
1163
+ return "AGGREGATE_STATE";
1164
+ case LogicalTypeId::USER:
1165
+ return "USER";
1166
+ case LogicalTypeId::BIT:
1167
+ return "BIT";
1168
+ }
1169
+ return "UNDEFINED";
1170
+ }
1171
+
1172
+ } // namespace duckdb