1use crate::*;
2
3#[derive(Debug, Copy, Clone)]
4pub enum NodeRef<'a> {
5 Alias(&'a protobuf::Alias),
6 RangeVar(&'a protobuf::RangeVar),
7 TableFunc(&'a protobuf::TableFunc),
8 Var(&'a protobuf::Var),
9 Param(&'a protobuf::Param),
10 Aggref(&'a protobuf::Aggref),
11 GroupingFunc(&'a protobuf::GroupingFunc),
12 WindowFunc(&'a protobuf::WindowFunc),
13 SubscriptingRef(&'a protobuf::SubscriptingRef),
14 FuncExpr(&'a protobuf::FuncExpr),
15 NamedArgExpr(&'a protobuf::NamedArgExpr),
16 OpExpr(&'a protobuf::OpExpr),
17 DistinctExpr(&'a protobuf::DistinctExpr),
18 NullIfExpr(&'a protobuf::NullIfExpr),
19 ScalarArrayOpExpr(&'a protobuf::ScalarArrayOpExpr),
20 BoolExpr(&'a protobuf::BoolExpr),
21 SubLink(&'a protobuf::SubLink),
22 SubPlan(&'a protobuf::SubPlan),
23 AlternativeSubPlan(&'a protobuf::AlternativeSubPlan),
24 FieldSelect(&'a protobuf::FieldSelect),
25 FieldStore(&'a protobuf::FieldStore),
26 RelabelType(&'a protobuf::RelabelType),
27 CoerceViaIo(&'a protobuf::CoerceViaIo),
28 ArrayCoerceExpr(&'a protobuf::ArrayCoerceExpr),
29 ConvertRowtypeExpr(&'a protobuf::ConvertRowtypeExpr),
30 CollateExpr(&'a protobuf::CollateExpr),
31 CaseExpr(&'a protobuf::CaseExpr),
32 CaseWhen(&'a protobuf::CaseWhen),
33 CaseTestExpr(&'a protobuf::CaseTestExpr),
34 ArrayExpr(&'a protobuf::ArrayExpr),
35 RowExpr(&'a protobuf::RowExpr),
36 RowCompareExpr(&'a protobuf::RowCompareExpr),
37 CoalesceExpr(&'a protobuf::CoalesceExpr),
38 MinMaxExpr(&'a protobuf::MinMaxExpr),
39 SqlvalueFunction(&'a protobuf::SqlValueFunction),
40 XmlExpr(&'a protobuf::XmlExpr),
41 NullTest(&'a protobuf::NullTest),
42 BooleanTest(&'a protobuf::BooleanTest),
43 CoerceToDomain(&'a protobuf::CoerceToDomain),
44 CoerceToDomainValue(&'a protobuf::CoerceToDomainValue),
45 SetToDefault(&'a protobuf::SetToDefault),
46 CurrentOfExpr(&'a protobuf::CurrentOfExpr),
47 NextValueExpr(&'a protobuf::NextValueExpr),
48 InferenceElem(&'a protobuf::InferenceElem),
49 TargetEntry(&'a protobuf::TargetEntry),
50 RangeTblRef(&'a protobuf::RangeTblRef),
51 JoinExpr(&'a protobuf::JoinExpr),
52 FromExpr(&'a protobuf::FromExpr),
53 OnConflictExpr(&'a protobuf::OnConflictExpr),
54 IntoClause(&'a protobuf::IntoClause),
55 RawStmt(&'a protobuf::RawStmt),
56 Query(&'a protobuf::Query),
57 InsertStmt(&'a protobuf::InsertStmt),
58 DeleteStmt(&'a protobuf::DeleteStmt),
59 UpdateStmt(&'a protobuf::UpdateStmt),
60 SelectStmt(&'a protobuf::SelectStmt),
61 AlterTableStmt(&'a protobuf::AlterTableStmt),
62 AlterTableCmd(&'a protobuf::AlterTableCmd),
63 AlterDomainStmt(&'a protobuf::AlterDomainStmt),
64 SetOperationStmt(&'a protobuf::SetOperationStmt),
65 GrantStmt(&'a protobuf::GrantStmt),
66 GrantRoleStmt(&'a protobuf::GrantRoleStmt),
67 AlterDefaultPrivilegesStmt(&'a protobuf::AlterDefaultPrivilegesStmt),
68 ClosePortalStmt(&'a protobuf::ClosePortalStmt),
69 ClusterStmt(&'a protobuf::ClusterStmt),
70 CopyStmt(&'a protobuf::CopyStmt),
71 CreateStmt(&'a protobuf::CreateStmt),
72 DefineStmt(&'a protobuf::DefineStmt),
73 DropStmt(&'a protobuf::DropStmt),
74 TruncateStmt(&'a protobuf::TruncateStmt),
75 CommentStmt(&'a protobuf::CommentStmt),
76 FetchStmt(&'a protobuf::FetchStmt),
77 IndexStmt(&'a protobuf::IndexStmt),
78 CreateFunctionStmt(&'a protobuf::CreateFunctionStmt),
79 AlterFunctionStmt(&'a protobuf::AlterFunctionStmt),
80 DoStmt(&'a protobuf::DoStmt),
81 RenameStmt(&'a protobuf::RenameStmt),
82 RuleStmt(&'a protobuf::RuleStmt),
83 NotifyStmt(&'a protobuf::NotifyStmt),
84 ListenStmt(&'a protobuf::ListenStmt),
85 UnlistenStmt(&'a protobuf::UnlistenStmt),
86 TransactionStmt(&'a protobuf::TransactionStmt),
87 ViewStmt(&'a protobuf::ViewStmt),
88 LoadStmt(&'a protobuf::LoadStmt),
89 CreateDomainStmt(&'a protobuf::CreateDomainStmt),
90 CreatedbStmt(&'a protobuf::CreatedbStmt),
91 DropdbStmt(&'a protobuf::DropdbStmt),
92 VacuumStmt(&'a protobuf::VacuumStmt),
93 ExplainStmt(&'a protobuf::ExplainStmt),
94 CreateTableAsStmt(&'a protobuf::CreateTableAsStmt),
95 CreateSeqStmt(&'a protobuf::CreateSeqStmt),
96 AlterSeqStmt(&'a protobuf::AlterSeqStmt),
97 VariableSetStmt(&'a protobuf::VariableSetStmt),
98 VariableShowStmt(&'a protobuf::VariableShowStmt),
99 DiscardStmt(&'a protobuf::DiscardStmt),
100 CreateTrigStmt(&'a protobuf::CreateTrigStmt),
101 CreatePlangStmt(&'a protobuf::CreatePLangStmt),
102 CreateRoleStmt(&'a protobuf::CreateRoleStmt),
103 AlterRoleStmt(&'a protobuf::AlterRoleStmt),
104 DropRoleStmt(&'a protobuf::DropRoleStmt),
105 LockStmt(&'a protobuf::LockStmt),
106 ConstraintsSetStmt(&'a protobuf::ConstraintsSetStmt),
107 ReindexStmt(&'a protobuf::ReindexStmt),
108 CheckPointStmt(&'a protobuf::CheckPointStmt),
109 CreateSchemaStmt(&'a protobuf::CreateSchemaStmt),
110 AlterDatabaseStmt(&'a protobuf::AlterDatabaseStmt),
111 AlterDatabaseSetStmt(&'a protobuf::AlterDatabaseSetStmt),
112 AlterRoleSetStmt(&'a protobuf::AlterRoleSetStmt),
113 CreateConversionStmt(&'a protobuf::CreateConversionStmt),
114 CreateCastStmt(&'a protobuf::CreateCastStmt),
115 CreateOpClassStmt(&'a protobuf::CreateOpClassStmt),
116 CreateOpFamilyStmt(&'a protobuf::CreateOpFamilyStmt),
117 AlterOpFamilyStmt(&'a protobuf::AlterOpFamilyStmt),
118 PrepareStmt(&'a protobuf::PrepareStmt),
119 ExecuteStmt(&'a protobuf::ExecuteStmt),
120 DeallocateStmt(&'a protobuf::DeallocateStmt),
121 DeclareCursorStmt(&'a protobuf::DeclareCursorStmt),
122 CreateTableSpaceStmt(&'a protobuf::CreateTableSpaceStmt),
123 DropTableSpaceStmt(&'a protobuf::DropTableSpaceStmt),
124 AlterObjectDependsStmt(&'a protobuf::AlterObjectDependsStmt),
125 AlterObjectSchemaStmt(&'a protobuf::AlterObjectSchemaStmt),
126 AlterOwnerStmt(&'a protobuf::AlterOwnerStmt),
127 AlterOperatorStmt(&'a protobuf::AlterOperatorStmt),
128 AlterTypeStmt(&'a protobuf::AlterTypeStmt),
129 AtalterConstraint(&'a protobuf::AtAlterConstraint),
130 DropOwnedStmt(&'a protobuf::DropOwnedStmt),
131 ReassignOwnedStmt(&'a protobuf::ReassignOwnedStmt),
132 CompositeTypeStmt(&'a protobuf::CompositeTypeStmt),
133 CreateEnumStmt(&'a protobuf::CreateEnumStmt),
134 CreateRangeStmt(&'a protobuf::CreateRangeStmt),
135 AlterEnumStmt(&'a protobuf::AlterEnumStmt),
136 AlterTsdictionaryStmt(&'a protobuf::AlterTsDictionaryStmt),
137 AlterTsconfigurationStmt(&'a protobuf::AlterTsConfigurationStmt),
138 CreateFdwStmt(&'a protobuf::CreateFdwStmt),
139 AlterFdwStmt(&'a protobuf::AlterFdwStmt),
140 CreateForeignServerStmt(&'a protobuf::CreateForeignServerStmt),
141 AlterForeignServerStmt(&'a protobuf::AlterForeignServerStmt),
142 CreateUserMappingStmt(&'a protobuf::CreateUserMappingStmt),
143 AlterUserMappingStmt(&'a protobuf::AlterUserMappingStmt),
144 DropUserMappingStmt(&'a protobuf::DropUserMappingStmt),
145 AlterTableSpaceOptionsStmt(&'a protobuf::AlterTableSpaceOptionsStmt),
146 AlterTableMoveAllStmt(&'a protobuf::AlterTableMoveAllStmt),
147 SecLabelStmt(&'a protobuf::SecLabelStmt),
148 CreateForeignTableStmt(&'a protobuf::CreateForeignTableStmt),
149 ImportForeignSchemaStmt(&'a protobuf::ImportForeignSchemaStmt),
150 CreateExtensionStmt(&'a protobuf::CreateExtensionStmt),
151 AlterExtensionStmt(&'a protobuf::AlterExtensionStmt),
152 AlterExtensionContentsStmt(&'a protobuf::AlterExtensionContentsStmt),
153 CreateEventTrigStmt(&'a protobuf::CreateEventTrigStmt),
154 AlterEventTrigStmt(&'a protobuf::AlterEventTrigStmt),
155 RefreshMatViewStmt(&'a protobuf::RefreshMatViewStmt),
156 ReplicaIdentityStmt(&'a protobuf::ReplicaIdentityStmt),
157 AlterSystemStmt(&'a protobuf::AlterSystemStmt),
158 CreatePolicyStmt(&'a protobuf::CreatePolicyStmt),
159 AlterPolicyStmt(&'a protobuf::AlterPolicyStmt),
160 CreateTransformStmt(&'a protobuf::CreateTransformStmt),
161 CreateAmStmt(&'a protobuf::CreateAmStmt),
162 CreatePublicationStmt(&'a protobuf::CreatePublicationStmt),
163 AlterPublicationStmt(&'a protobuf::AlterPublicationStmt),
164 CreateSubscriptionStmt(&'a protobuf::CreateSubscriptionStmt),
165 AlterSubscriptionStmt(&'a protobuf::AlterSubscriptionStmt),
166 DropSubscriptionStmt(&'a protobuf::DropSubscriptionStmt),
167 CreateStatsStmt(&'a protobuf::CreateStatsStmt),
168 AlterCollationStmt(&'a protobuf::AlterCollationStmt),
169 CallStmt(&'a protobuf::CallStmt),
170 AlterStatsStmt(&'a protobuf::AlterStatsStmt),
171 AExpr(&'a protobuf::AExpr),
172 ColumnRef(&'a protobuf::ColumnRef),
173 ParamRef(&'a protobuf::ParamRef),
174 AConst(&'a protobuf::AConst),
175 FuncCall(&'a protobuf::FuncCall),
176 AStar(&'a protobuf::AStar),
177 AIndices(&'a protobuf::AIndices),
178 AIndirection(&'a protobuf::AIndirection),
179 AArrayExpr(&'a protobuf::AArrayExpr),
180 ResTarget(&'a protobuf::ResTarget),
181 MultiAssignRef(&'a protobuf::MultiAssignRef),
182 TypeCast(&'a protobuf::TypeCast),
183 CollateClause(&'a protobuf::CollateClause),
184 SortBy(&'a protobuf::SortBy),
185 WindowDef(&'a protobuf::WindowDef),
186 RangeSubselect(&'a protobuf::RangeSubselect),
187 RangeFunction(&'a protobuf::RangeFunction),
188 RangeTableSample(&'a protobuf::RangeTableSample),
189 RangeTableFunc(&'a protobuf::RangeTableFunc),
190 RangeTableFuncCol(&'a protobuf::RangeTableFuncCol),
191 TypeName(&'a protobuf::TypeName),
192 ColumnDef(&'a protobuf::ColumnDef),
193 IndexElem(&'a protobuf::IndexElem),
194 Constraint(&'a protobuf::Constraint),
195 DefElem(&'a protobuf::DefElem),
196 RangeTblEntry(&'a protobuf::RangeTblEntry),
197 RangeTblFunction(&'a protobuf::RangeTblFunction),
198 TableSampleClause(&'a protobuf::TableSampleClause),
199 WithCheckOption(&'a protobuf::WithCheckOption),
200 SortGroupClause(&'a protobuf::SortGroupClause),
201 GroupingSet(&'a protobuf::GroupingSet),
202 WindowClause(&'a protobuf::WindowClause),
203 ObjectWithArgs(&'a protobuf::ObjectWithArgs),
204 AccessPriv(&'a protobuf::AccessPriv),
205 CreateOpClassItem(&'a protobuf::CreateOpClassItem),
206 TableLikeClause(&'a protobuf::TableLikeClause),
207 FunctionParameter(&'a protobuf::FunctionParameter),
208 LockingClause(&'a protobuf::LockingClause),
209 RowMarkClause(&'a protobuf::RowMarkClause),
210 XmlSerialize(&'a protobuf::XmlSerialize),
211 WithClause(&'a protobuf::WithClause),
212 InferClause(&'a protobuf::InferClause),
213 OnConflictClause(&'a protobuf::OnConflictClause),
214 CommonTableExpr(&'a protobuf::CommonTableExpr),
215 RoleSpec(&'a protobuf::RoleSpec),
216 TriggerTransition(&'a protobuf::TriggerTransition),
217 PartitionElem(&'a protobuf::PartitionElem),
218 PartitionSpec(&'a protobuf::PartitionSpec),
219 PartitionBoundSpec(&'a protobuf::PartitionBoundSpec),
220 PartitionRangeDatum(&'a protobuf::PartitionRangeDatum),
221 PartitionCmd(&'a protobuf::PartitionCmd),
222 VacuumRelation(&'a protobuf::VacuumRelation),
223 InlineCodeBlock(&'a protobuf::InlineCodeBlock),
224 CallContext(&'a protobuf::CallContext),
225 Integer(&'a protobuf::Integer),
226 Float(&'a protobuf::Float),
227 Boolean(&'a protobuf::Boolean),
228 String(&'a protobuf::String),
229 BitString(&'a protobuf::BitString),
230 List(&'a protobuf::List),
231 IntList(&'a protobuf::IntList),
232 OidList(&'a protobuf::OidList),
233 MergeStmt(&'a protobuf::MergeStmt),
234 MergeAction(&'a protobuf::MergeAction),
235 AlterDatabaseRefreshCollStmt(&'a protobuf::AlterDatabaseRefreshCollStmt),
236 ReturnStmt(&'a protobuf::ReturnStmt),
237 ReturningClause(&'a protobuf::ReturningClause),
238 ReturningExpr(&'a protobuf::ReturningExpr),
239 ReturningOption(&'a protobuf::ReturningOption),
240 PlassignStmt(&'a protobuf::PlAssignStmt),
241 StatsElem(&'a protobuf::StatsElem),
242 CtesearchClause(&'a protobuf::CteSearchClause),
243 CtecycleClause(&'a protobuf::CteCycleClause),
244 MergeWhenClause(&'a protobuf::MergeWhenClause),
245 PublicationObjSpec(&'a protobuf::PublicationObjSpec),
246 PublicationTable(&'a protobuf::PublicationTable),
247 JsonFormat(&'a protobuf::JsonFormat),
248 JsonReturning(&'a protobuf::JsonReturning),
249 JsonValueExpr(&'a protobuf::JsonValueExpr),
250 JsonConstructorExpr(&'a protobuf::JsonConstructorExpr),
251 JsonIsPredicate(&'a protobuf::JsonIsPredicate),
252 JsonOutput(&'a protobuf::JsonOutput),
253 JsonKeyValue(&'a protobuf::JsonKeyValue),
254 JsonObjectConstructor(&'a protobuf::JsonObjectConstructor),
255 JsonArrayConstructor(&'a protobuf::JsonArrayConstructor),
256 JsonArrayQueryConstructor(&'a protobuf::JsonArrayQueryConstructor),
257 JsonAggConstructor(&'a protobuf::JsonAggConstructor),
258 JsonObjectAgg(&'a protobuf::JsonObjectAgg),
259 JsonArrayAgg(&'a protobuf::JsonArrayAgg),
260 RtepermissionInfo(&'a protobuf::RtePermissionInfo),
261 WindowFuncRunCondition(&'a protobuf::WindowFuncRunCondition),
262 MergeSupportFunc(&'a protobuf::MergeSupportFunc),
263 JsonBehavior(&'a protobuf::JsonBehavior),
264 JsonExpr(&'a protobuf::JsonExpr),
265 JsonTablePath(&'a protobuf::JsonTablePath),
266 JsonTablePathScan(&'a protobuf::JsonTablePathScan),
267 JsonTableSiblingJoin(&'a protobuf::JsonTableSiblingJoin),
268 JsonArgument(&'a protobuf::JsonArgument),
269 JsonFuncExpr(&'a protobuf::JsonFuncExpr),
270 JsonTablePathSpec(&'a protobuf::JsonTablePathSpec),
271 JsonTable(&'a protobuf::JsonTable),
272 JsonTableColumn(&'a protobuf::JsonTableColumn),
273 JsonParseExpr(&'a protobuf::JsonParseExpr),
274 JsonScalarExpr(&'a protobuf::JsonScalarExpr),
275 JsonSerializeExpr(&'a protobuf::JsonSerializeExpr),
276}
277
278impl<'a> NodeRef<'a> {
279 pub fn deparse(&self) -> Result<String> {
281 crate::deparse(&protobuf::ParseResult {
282 version: crate::bindings::PG_VERSION_NUM as i32,
283 stmts: vec![protobuf::RawStmt {
284 stmt: Some(Box::new(Node {
285 node: Some(self.to_enum()),
286 })),
287 stmt_location: 0,
288 stmt_len: 0,
289 }],
290 })
291 }
292
293 pub fn to_enum(&self) -> NodeEnum {
294 match self {
295 NodeRef::Alias(n) => NodeEnum::Alias((*n).clone()),
296 NodeRef::RangeVar(n) => NodeEnum::RangeVar((*n).clone()),
297 NodeRef::TableFunc(n) => NodeEnum::TableFunc(Box::new((*n).clone())),
298 NodeRef::Var(n) => NodeEnum::Var(Box::new((*n).clone())),
299 NodeRef::Param(n) => NodeEnum::Param(Box::new((*n).clone())),
300 NodeRef::Aggref(n) => NodeEnum::Aggref(Box::new((*n).clone())),
301 NodeRef::GroupingFunc(n) => NodeEnum::GroupingFunc(Box::new((*n).clone())),
302 NodeRef::WindowFunc(n) => NodeEnum::WindowFunc(Box::new((*n).clone())),
303 NodeRef::SubscriptingRef(n) => NodeEnum::SubscriptingRef(Box::new((*n).clone())),
304 NodeRef::FuncExpr(n) => NodeEnum::FuncExpr(Box::new((*n).clone())),
305 NodeRef::NamedArgExpr(n) => NodeEnum::NamedArgExpr(Box::new((*n).clone())),
306 NodeRef::OpExpr(n) => NodeEnum::OpExpr(Box::new((*n).clone())),
307 NodeRef::DistinctExpr(n) => NodeEnum::DistinctExpr(Box::new((*n).clone())),
308 NodeRef::NullIfExpr(n) => NodeEnum::NullIfExpr(Box::new((*n).clone())),
309 NodeRef::ScalarArrayOpExpr(n) => NodeEnum::ScalarArrayOpExpr(Box::new((*n).clone())),
310 NodeRef::BoolExpr(n) => NodeEnum::BoolExpr(Box::new((*n).clone())),
311 NodeRef::SubLink(n) => NodeEnum::SubLink(Box::new((*n).clone())),
312 NodeRef::SubPlan(n) => NodeEnum::SubPlan(Box::new((*n).clone())),
313 NodeRef::AlternativeSubPlan(n) => NodeEnum::AlternativeSubPlan(Box::new((*n).clone())),
314 NodeRef::FieldSelect(n) => NodeEnum::FieldSelect(Box::new((*n).clone())),
315 NodeRef::FieldStore(n) => NodeEnum::FieldStore(Box::new((*n).clone())),
316 NodeRef::RelabelType(n) => NodeEnum::RelabelType(Box::new((*n).clone())),
317 NodeRef::CoerceViaIo(n) => NodeEnum::CoerceViaIo(Box::new((*n).clone())),
318 NodeRef::ArrayCoerceExpr(n) => NodeEnum::ArrayCoerceExpr(Box::new((*n).clone())),
319 NodeRef::ConvertRowtypeExpr(n) => NodeEnum::ConvertRowtypeExpr(Box::new((*n).clone())),
320 NodeRef::CollateExpr(n) => NodeEnum::CollateExpr(Box::new((*n).clone())),
321 NodeRef::CaseExpr(n) => NodeEnum::CaseExpr(Box::new((*n).clone())),
322 NodeRef::CaseWhen(n) => NodeEnum::CaseWhen(Box::new((*n).clone())),
323 NodeRef::CaseTestExpr(n) => NodeEnum::CaseTestExpr(Box::new((*n).clone())),
324 NodeRef::ArrayExpr(n) => NodeEnum::ArrayExpr(Box::new((*n).clone())),
325 NodeRef::RowExpr(n) => NodeEnum::RowExpr(Box::new((*n).clone())),
326 NodeRef::RowCompareExpr(n) => NodeEnum::RowCompareExpr(Box::new((*n).clone())),
327 NodeRef::CoalesceExpr(n) => NodeEnum::CoalesceExpr(Box::new((*n).clone())),
328 NodeRef::MinMaxExpr(n) => NodeEnum::MinMaxExpr(Box::new((*n).clone())),
329 NodeRef::SqlvalueFunction(n) => NodeEnum::SqlvalueFunction(Box::new((*n).clone())),
330 NodeRef::XmlExpr(n) => NodeEnum::XmlExpr(Box::new((*n).clone())),
331 NodeRef::NullTest(n) => NodeEnum::NullTest(Box::new((*n).clone())),
332 NodeRef::BooleanTest(n) => NodeEnum::BooleanTest(Box::new((*n).clone())),
333 NodeRef::CoerceToDomain(n) => NodeEnum::CoerceToDomain(Box::new((*n).clone())),
334 NodeRef::CoerceToDomainValue(n) => {
335 NodeEnum::CoerceToDomainValue(Box::new((*n).clone()))
336 }
337 NodeRef::SetToDefault(n) => NodeEnum::SetToDefault(Box::new((*n).clone())),
338 NodeRef::CurrentOfExpr(n) => NodeEnum::CurrentOfExpr(Box::new((*n).clone())),
339 NodeRef::NextValueExpr(n) => NodeEnum::NextValueExpr(Box::new((*n).clone())),
340 NodeRef::InferenceElem(n) => NodeEnum::InferenceElem(Box::new((*n).clone())),
341 NodeRef::TargetEntry(n) => NodeEnum::TargetEntry(Box::new((*n).clone())),
342 NodeRef::RangeTblRef(n) => NodeEnum::RangeTblRef((*n).clone()),
343 NodeRef::JoinExpr(n) => NodeEnum::JoinExpr(Box::new((*n).clone())),
344 NodeRef::FromExpr(n) => NodeEnum::FromExpr(Box::new((*n).clone())),
345 NodeRef::OnConflictExpr(n) => NodeEnum::OnConflictExpr(Box::new((*n).clone())),
346 NodeRef::IntoClause(n) => NodeEnum::IntoClause(Box::new((*n).clone())),
347 NodeRef::RawStmt(n) => NodeEnum::RawStmt(Box::new((*n).clone())),
348 NodeRef::Query(n) => NodeEnum::Query(Box::new((*n).clone())),
349 NodeRef::InsertStmt(n) => NodeEnum::InsertStmt(Box::new((*n).clone())),
350 NodeRef::DeleteStmt(n) => NodeEnum::DeleteStmt(Box::new((*n).clone())),
351 NodeRef::UpdateStmt(n) => NodeEnum::UpdateStmt(Box::new((*n).clone())),
352 NodeRef::SelectStmt(n) => NodeEnum::SelectStmt(Box::new((*n).clone())),
353 NodeRef::AlterTableStmt(n) => NodeEnum::AlterTableStmt((*n).clone()),
354 NodeRef::AlterTableCmd(n) => NodeEnum::AlterTableCmd(Box::new((*n).clone())),
355 NodeRef::AlterDomainStmt(n) => NodeEnum::AlterDomainStmt(Box::new((*n).clone())),
356 NodeRef::SetOperationStmt(n) => NodeEnum::SetOperationStmt(Box::new((*n).clone())),
357 NodeRef::GrantStmt(n) => NodeEnum::GrantStmt((*n).clone()),
358 NodeRef::GrantRoleStmt(n) => NodeEnum::GrantRoleStmt((*n).clone()),
359 NodeRef::AlterDefaultPrivilegesStmt(n) => {
360 NodeEnum::AlterDefaultPrivilegesStmt((*n).clone())
361 }
362 NodeRef::ClosePortalStmt(n) => NodeEnum::ClosePortalStmt((*n).clone()),
363 NodeRef::ClusterStmt(n) => NodeEnum::ClusterStmt((*n).clone()),
364 NodeRef::CopyStmt(n) => NodeEnum::CopyStmt(Box::new((*n).clone())),
365 NodeRef::CreateStmt(n) => NodeEnum::CreateStmt((*n).clone()),
366 NodeRef::DefineStmt(n) => NodeEnum::DefineStmt((*n).clone()),
367 NodeRef::DropStmt(n) => NodeEnum::DropStmt((*n).clone()),
368 NodeRef::TruncateStmt(n) => NodeEnum::TruncateStmt((*n).clone()),
369 NodeRef::CommentStmt(n) => NodeEnum::CommentStmt(Box::new((*n).clone())),
370 NodeRef::FetchStmt(n) => NodeEnum::FetchStmt((*n).clone()),
371 NodeRef::IndexStmt(n) => NodeEnum::IndexStmt(Box::new((*n).clone())),
372 NodeRef::CreateFunctionStmt(n) => NodeEnum::CreateFunctionStmt(Box::new((*n).clone())),
373 NodeRef::AlterFunctionStmt(n) => NodeEnum::AlterFunctionStmt((*n).clone()),
374 NodeRef::DoStmt(n) => NodeEnum::DoStmt((*n).clone()),
375 NodeRef::RenameStmt(n) => NodeEnum::RenameStmt(Box::new((*n).clone())),
376 NodeRef::RuleStmt(n) => NodeEnum::RuleStmt(Box::new((*n).clone())),
377 NodeRef::NotifyStmt(n) => NodeEnum::NotifyStmt((*n).clone()),
378 NodeRef::ListenStmt(n) => NodeEnum::ListenStmt((*n).clone()),
379 NodeRef::UnlistenStmt(n) => NodeEnum::UnlistenStmt((*n).clone()),
380 NodeRef::TransactionStmt(n) => NodeEnum::TransactionStmt((*n).clone()),
381 NodeRef::ViewStmt(n) => NodeEnum::ViewStmt(Box::new((*n).clone())),
382 NodeRef::LoadStmt(n) => NodeEnum::LoadStmt((*n).clone()),
383 NodeRef::CreateDomainStmt(n) => NodeEnum::CreateDomainStmt(Box::new((*n).clone())),
384 NodeRef::CreatedbStmt(n) => NodeEnum::CreatedbStmt((*n).clone()),
385 NodeRef::DropdbStmt(n) => NodeEnum::DropdbStmt((*n).clone()),
386 NodeRef::VacuumStmt(n) => NodeEnum::VacuumStmt((*n).clone()),
387 NodeRef::ExplainStmt(n) => NodeEnum::ExplainStmt(Box::new((*n).clone())),
388 NodeRef::CreateTableAsStmt(n) => NodeEnum::CreateTableAsStmt(Box::new((*n).clone())),
389 NodeRef::CreateSeqStmt(n) => NodeEnum::CreateSeqStmt((*n).clone()),
390 NodeRef::AlterSeqStmt(n) => NodeEnum::AlterSeqStmt((*n).clone()),
391 NodeRef::VariableSetStmt(n) => NodeEnum::VariableSetStmt((*n).clone()),
392 NodeRef::VariableShowStmt(n) => NodeEnum::VariableShowStmt((*n).clone()),
393 NodeRef::DiscardStmt(n) => NodeEnum::DiscardStmt((*n).clone()),
394 NodeRef::CreateTrigStmt(n) => NodeEnum::CreateTrigStmt(Box::new((*n).clone())),
395 NodeRef::CreatePlangStmt(n) => NodeEnum::CreatePlangStmt((*n).clone()),
396 NodeRef::CreateRoleStmt(n) => NodeEnum::CreateRoleStmt((*n).clone()),
397 NodeRef::AlterRoleStmt(n) => NodeEnum::AlterRoleStmt((*n).clone()),
398 NodeRef::DropRoleStmt(n) => NodeEnum::DropRoleStmt((*n).clone()),
399 NodeRef::LockStmt(n) => NodeEnum::LockStmt((*n).clone()),
400 NodeRef::ConstraintsSetStmt(n) => NodeEnum::ConstraintsSetStmt((*n).clone()),
401 NodeRef::ReindexStmt(n) => NodeEnum::ReindexStmt((*n).clone()),
402 NodeRef::CheckPointStmt(n) => NodeEnum::CheckPointStmt((*n).clone()),
403 NodeRef::CreateSchemaStmt(n) => NodeEnum::CreateSchemaStmt((*n).clone()),
404 NodeRef::AlterDatabaseStmt(n) => NodeEnum::AlterDatabaseStmt((*n).clone()),
405 NodeRef::AlterDatabaseSetStmt(n) => NodeEnum::AlterDatabaseSetStmt((*n).clone()),
406 NodeRef::AlterRoleSetStmt(n) => NodeEnum::AlterRoleSetStmt((*n).clone()),
407 NodeRef::CreateConversionStmt(n) => NodeEnum::CreateConversionStmt((*n).clone()),
408 NodeRef::CreateCastStmt(n) => NodeEnum::CreateCastStmt((*n).clone()),
409 NodeRef::CreateOpClassStmt(n) => NodeEnum::CreateOpClassStmt((*n).clone()),
410 NodeRef::CreateOpFamilyStmt(n) => NodeEnum::CreateOpFamilyStmt((*n).clone()),
411 NodeRef::AlterOpFamilyStmt(n) => NodeEnum::AlterOpFamilyStmt((*n).clone()),
412 NodeRef::PrepareStmt(n) => NodeEnum::PrepareStmt(Box::new((*n).clone())),
413 NodeRef::ExecuteStmt(n) => NodeEnum::ExecuteStmt((*n).clone()),
414 NodeRef::DeallocateStmt(n) => NodeEnum::DeallocateStmt((*n).clone()),
415 NodeRef::DeclareCursorStmt(n) => NodeEnum::DeclareCursorStmt(Box::new((*n).clone())),
416 NodeRef::CreateTableSpaceStmt(n) => NodeEnum::CreateTableSpaceStmt((*n).clone()),
417 NodeRef::DropTableSpaceStmt(n) => NodeEnum::DropTableSpaceStmt((*n).clone()),
418 NodeRef::AlterObjectDependsStmt(n) => {
419 NodeEnum::AlterObjectDependsStmt(Box::new((*n).clone()))
420 }
421 NodeRef::AlterObjectSchemaStmt(n) => {
422 NodeEnum::AlterObjectSchemaStmt(Box::new((*n).clone()))
423 }
424 NodeRef::AlterOwnerStmt(n) => NodeEnum::AlterOwnerStmt(Box::new((*n).clone())),
425 NodeRef::AlterOperatorStmt(n) => NodeEnum::AlterOperatorStmt((*n).clone()),
426 NodeRef::AlterTypeStmt(n) => NodeEnum::AlterTypeStmt((*n).clone()),
427 NodeRef::AtalterConstraint(n) => NodeEnum::AtalterConstraint((*n).clone()),
428 NodeRef::DropOwnedStmt(n) => NodeEnum::DropOwnedStmt((*n).clone()),
429 NodeRef::ReassignOwnedStmt(n) => NodeEnum::ReassignOwnedStmt((*n).clone()),
430 NodeRef::CompositeTypeStmt(n) => NodeEnum::CompositeTypeStmt((*n).clone()),
431 NodeRef::CreateEnumStmt(n) => NodeEnum::CreateEnumStmt((*n).clone()),
432 NodeRef::CreateRangeStmt(n) => NodeEnum::CreateRangeStmt((*n).clone()),
433 NodeRef::AlterEnumStmt(n) => NodeEnum::AlterEnumStmt((*n).clone()),
434 NodeRef::AlterTsdictionaryStmt(n) => NodeEnum::AlterTsdictionaryStmt((*n).clone()),
435 NodeRef::AlterTsconfigurationStmt(n) => {
436 NodeEnum::AlterTsconfigurationStmt((*n).clone())
437 }
438 NodeRef::CreateFdwStmt(n) => NodeEnum::CreateFdwStmt((*n).clone()),
439 NodeRef::AlterFdwStmt(n) => NodeEnum::AlterFdwStmt((*n).clone()),
440 NodeRef::CreateForeignServerStmt(n) => NodeEnum::CreateForeignServerStmt((*n).clone()),
441 NodeRef::AlterForeignServerStmt(n) => NodeEnum::AlterForeignServerStmt((*n).clone()),
442 NodeRef::CreateUserMappingStmt(n) => NodeEnum::CreateUserMappingStmt((*n).clone()),
443 NodeRef::AlterUserMappingStmt(n) => NodeEnum::AlterUserMappingStmt((*n).clone()),
444 NodeRef::DropUserMappingStmt(n) => NodeEnum::DropUserMappingStmt((*n).clone()),
445 NodeRef::AlterTableSpaceOptionsStmt(n) => {
446 NodeEnum::AlterTableSpaceOptionsStmt((*n).clone())
447 }
448 NodeRef::AlterTableMoveAllStmt(n) => NodeEnum::AlterTableMoveAllStmt((*n).clone()),
449 NodeRef::SecLabelStmt(n) => NodeEnum::SecLabelStmt(Box::new((*n).clone())),
450 NodeRef::CreateForeignTableStmt(n) => NodeEnum::CreateForeignTableStmt((*n).clone()),
451 NodeRef::ImportForeignSchemaStmt(n) => NodeEnum::ImportForeignSchemaStmt((*n).clone()),
452 NodeRef::CreateExtensionStmt(n) => NodeEnum::CreateExtensionStmt((*n).clone()),
453 NodeRef::AlterExtensionStmt(n) => NodeEnum::AlterExtensionStmt((*n).clone()),
454 NodeRef::AlterExtensionContentsStmt(n) => {
455 NodeEnum::AlterExtensionContentsStmt(Box::new((*n).clone()))
456 }
457 NodeRef::CreateEventTrigStmt(n) => NodeEnum::CreateEventTrigStmt((*n).clone()),
458 NodeRef::AlterEventTrigStmt(n) => NodeEnum::AlterEventTrigStmt((*n).clone()),
459 NodeRef::RefreshMatViewStmt(n) => NodeEnum::RefreshMatViewStmt((*n).clone()),
460 NodeRef::ReplicaIdentityStmt(n) => NodeEnum::ReplicaIdentityStmt((*n).clone()),
461 NodeRef::AlterSystemStmt(n) => NodeEnum::AlterSystemStmt((*n).clone()),
462 NodeRef::CreatePolicyStmt(n) => NodeEnum::CreatePolicyStmt(Box::new((*n).clone())),
463 NodeRef::AlterPolicyStmt(n) => NodeEnum::AlterPolicyStmt(Box::new((*n).clone())),
464 NodeRef::CreateTransformStmt(n) => NodeEnum::CreateTransformStmt((*n).clone()),
465 NodeRef::CreateAmStmt(n) => NodeEnum::CreateAmStmt((*n).clone()),
466 NodeRef::CreatePublicationStmt(n) => NodeEnum::CreatePublicationStmt((*n).clone()),
467 NodeRef::AlterPublicationStmt(n) => NodeEnum::AlterPublicationStmt((*n).clone()),
468 NodeRef::CreateSubscriptionStmt(n) => NodeEnum::CreateSubscriptionStmt((*n).clone()),
469 NodeRef::AlterSubscriptionStmt(n) => NodeEnum::AlterSubscriptionStmt((*n).clone()),
470 NodeRef::DropSubscriptionStmt(n) => NodeEnum::DropSubscriptionStmt((*n).clone()),
471 NodeRef::CreateStatsStmt(n) => NodeEnum::CreateStatsStmt((*n).clone()),
472 NodeRef::AlterCollationStmt(n) => NodeEnum::AlterCollationStmt((*n).clone()),
473 NodeRef::CallStmt(n) => NodeEnum::CallStmt(Box::new((*n).clone())),
474 NodeRef::AlterStatsStmt(n) => NodeEnum::AlterStatsStmt(Box::new((*n).clone())),
475 NodeRef::AExpr(n) => NodeEnum::AExpr(Box::new((*n).clone())),
476 NodeRef::ColumnRef(n) => NodeEnum::ColumnRef((*n).clone()),
477 NodeRef::ParamRef(n) => NodeEnum::ParamRef((*n).clone()),
478 NodeRef::AConst(n) => NodeEnum::AConst((*n).clone()),
479 NodeRef::FuncCall(n) => NodeEnum::FuncCall(Box::new((*n).clone())),
480 NodeRef::AStar(n) => NodeEnum::AStar((*n).clone()),
481 NodeRef::AIndices(n) => NodeEnum::AIndices(Box::new((*n).clone())),
482 NodeRef::AIndirection(n) => NodeEnum::AIndirection(Box::new((*n).clone())),
483 NodeRef::AArrayExpr(n) => NodeEnum::AArrayExpr((*n).clone()),
484 NodeRef::ResTarget(n) => NodeEnum::ResTarget(Box::new((*n).clone())),
485 NodeRef::MultiAssignRef(n) => NodeEnum::MultiAssignRef(Box::new((*n).clone())),
486 NodeRef::TypeCast(n) => NodeEnum::TypeCast(Box::new((*n).clone())),
487 NodeRef::CollateClause(n) => NodeEnum::CollateClause(Box::new((*n).clone())),
488 NodeRef::SortBy(n) => NodeEnum::SortBy(Box::new((*n).clone())),
489 NodeRef::WindowDef(n) => NodeEnum::WindowDef(Box::new((*n).clone())),
490 NodeRef::RangeSubselect(n) => NodeEnum::RangeSubselect(Box::new((*n).clone())),
491 NodeRef::RangeFunction(n) => NodeEnum::RangeFunction((*n).clone()),
492 NodeRef::RangeTableSample(n) => NodeEnum::RangeTableSample(Box::new((*n).clone())),
493 NodeRef::RangeTableFunc(n) => NodeEnum::RangeTableFunc(Box::new((*n).clone())),
494 NodeRef::RangeTableFuncCol(n) => NodeEnum::RangeTableFuncCol(Box::new((*n).clone())),
495 NodeRef::TypeName(n) => NodeEnum::TypeName((*n).clone()),
496 NodeRef::ColumnDef(n) => NodeEnum::ColumnDef(Box::new((*n).clone())),
497 NodeRef::IndexElem(n) => NodeEnum::IndexElem(Box::new((*n).clone())),
498 NodeRef::Constraint(n) => NodeEnum::Constraint(Box::new((*n).clone())),
499 NodeRef::DefElem(n) => NodeEnum::DefElem(Box::new((*n).clone())),
500 NodeRef::RangeTblEntry(n) => NodeEnum::RangeTblEntry(Box::new((*n).clone())),
501 NodeRef::RangeTblFunction(n) => NodeEnum::RangeTblFunction(Box::new((*n).clone())),
502 NodeRef::TableSampleClause(n) => NodeEnum::TableSampleClause(Box::new((*n).clone())),
503 NodeRef::WithCheckOption(n) => NodeEnum::WithCheckOption(Box::new((*n).clone())),
504 NodeRef::SortGroupClause(n) => NodeEnum::SortGroupClause((*n).clone()),
505 NodeRef::GroupingSet(n) => NodeEnum::GroupingSet((*n).clone()),
506 NodeRef::WindowClause(n) => NodeEnum::WindowClause(Box::new((*n).clone())),
507 NodeRef::ObjectWithArgs(n) => NodeEnum::ObjectWithArgs((*n).clone()),
508 NodeRef::AccessPriv(n) => NodeEnum::AccessPriv((*n).clone()),
509 NodeRef::CreateOpClassItem(n) => NodeEnum::CreateOpClassItem((*n).clone()),
510 NodeRef::TableLikeClause(n) => NodeEnum::TableLikeClause((*n).clone()),
511 NodeRef::FunctionParameter(n) => NodeEnum::FunctionParameter(Box::new((*n).clone())),
512 NodeRef::LockingClause(n) => NodeEnum::LockingClause((*n).clone()),
513 NodeRef::RowMarkClause(n) => NodeEnum::RowMarkClause((*n).clone()),
514 NodeRef::XmlSerialize(n) => NodeEnum::XmlSerialize(Box::new((*n).clone())),
515 NodeRef::WithClause(n) => NodeEnum::WithClause((*n).clone()),
516 NodeRef::InferClause(n) => NodeEnum::InferClause(Box::new((*n).clone())),
517 NodeRef::OnConflictClause(n) => NodeEnum::OnConflictClause(Box::new((*n).clone())),
518 NodeRef::CommonTableExpr(n) => NodeEnum::CommonTableExpr(Box::new((*n).clone())),
519 NodeRef::RoleSpec(n) => NodeEnum::RoleSpec((*n).clone()),
520 NodeRef::TriggerTransition(n) => NodeEnum::TriggerTransition((*n).clone()),
521 NodeRef::PartitionElem(n) => NodeEnum::PartitionElem(Box::new((*n).clone())),
522 NodeRef::PartitionSpec(n) => NodeEnum::PartitionSpec((*n).clone()),
523 NodeRef::PartitionBoundSpec(n) => NodeEnum::PartitionBoundSpec((*n).clone()),
524 NodeRef::PartitionRangeDatum(n) => {
525 NodeEnum::PartitionRangeDatum(Box::new((*n).clone()))
526 }
527 NodeRef::PartitionCmd(n) => NodeEnum::PartitionCmd((*n).clone()),
528 NodeRef::VacuumRelation(n) => NodeEnum::VacuumRelation((*n).clone()),
529 NodeRef::InlineCodeBlock(n) => NodeEnum::InlineCodeBlock((*n).clone()),
530 NodeRef::CallContext(n) => NodeEnum::CallContext((*n).clone()),
531 NodeRef::Integer(n) => NodeEnum::Integer((*n).clone()),
532 NodeRef::Float(n) => NodeEnum::Float((*n).clone()),
533 NodeRef::Boolean(n) => NodeEnum::Boolean((*n).clone()),
534 NodeRef::String(n) => NodeEnum::String((*n).clone()),
535 NodeRef::BitString(n) => NodeEnum::BitString((*n).clone()),
536 NodeRef::List(n) => NodeEnum::List((*n).clone()),
537 NodeRef::IntList(n) => NodeEnum::IntList((*n).clone()),
538 NodeRef::OidList(n) => NodeEnum::OidList((*n).clone()),
539 NodeRef::MergeStmt(n) => NodeEnum::MergeStmt(Box::new((*n).clone())),
540 NodeRef::MergeAction(n) => NodeEnum::MergeAction(Box::new((*n).clone())),
541 NodeRef::AlterDatabaseRefreshCollStmt(n) => {
542 NodeEnum::AlterDatabaseRefreshCollStmt((*n).clone())
543 }
544 NodeRef::ReturnStmt(n) => NodeEnum::ReturnStmt(Box::new((*n).clone())),
545 NodeRef::ReturningClause(n) => NodeEnum::ReturningClause((*n).clone()),
546 NodeRef::ReturningExpr(n) => NodeEnum::ReturningExpr(Box::new((*n).clone())),
547 NodeRef::ReturningOption(n) => NodeEnum::ReturningOption((*n).clone()),
548 NodeRef::PlassignStmt(n) => NodeEnum::PlassignStmt(Box::new((*n).clone())),
549 NodeRef::StatsElem(n) => NodeEnum::StatsElem(Box::new((*n).clone())),
550 NodeRef::CtesearchClause(n) => NodeEnum::CtesearchClause((*n).clone()),
551 NodeRef::CtecycleClause(n) => NodeEnum::CtecycleClause(Box::new((*n).clone())),
552 NodeRef::MergeWhenClause(n) => NodeEnum::MergeWhenClause(Box::new((*n).clone())),
553 NodeRef::PublicationObjSpec(n) => NodeEnum::PublicationObjSpec(Box::new((*n).clone())),
554 NodeRef::PublicationTable(n) => NodeEnum::PublicationTable(Box::new((*n).clone())),
555 NodeRef::JsonFormat(n) => NodeEnum::JsonFormat((*n).clone()),
556 NodeRef::JsonReturning(n) => NodeEnum::JsonReturning((*n).clone()),
557 NodeRef::JsonValueExpr(n) => NodeEnum::JsonValueExpr(Box::new((*n).clone())),
558 NodeRef::JsonConstructorExpr(n) => {
559 NodeEnum::JsonConstructorExpr(Box::new((*n).clone()))
560 }
561 NodeRef::JsonIsPredicate(n) => NodeEnum::JsonIsPredicate(Box::new((*n).clone())),
562 NodeRef::JsonOutput(n) => NodeEnum::JsonOutput((*n).clone()),
563 NodeRef::JsonKeyValue(n) => NodeEnum::JsonKeyValue(Box::new((*n).clone())),
564 NodeRef::JsonObjectConstructor(n) => NodeEnum::JsonObjectConstructor((*n).clone()),
565 NodeRef::JsonArrayConstructor(n) => NodeEnum::JsonArrayConstructor((*n).clone()),
566 NodeRef::JsonArrayQueryConstructor(n) => {
567 NodeEnum::JsonArrayQueryConstructor(Box::new((*n).clone()))
568 }
569 NodeRef::JsonAggConstructor(n) => NodeEnum::JsonAggConstructor(Box::new((*n).clone())),
570 NodeRef::JsonObjectAgg(n) => NodeEnum::JsonObjectAgg(Box::new((*n).clone())),
571 NodeRef::JsonArrayAgg(n) => NodeEnum::JsonArrayAgg(Box::new((*n).clone())),
572 NodeRef::RtepermissionInfo(n) => NodeEnum::RtepermissionInfo((*n).clone()),
573 NodeRef::WindowFuncRunCondition(n) => {
574 NodeEnum::WindowFuncRunCondition(Box::new((*n).clone()))
575 }
576 NodeRef::MergeSupportFunc(n) => NodeEnum::MergeSupportFunc(Box::new((*n).clone())),
577 NodeRef::JsonBehavior(n) => NodeEnum::JsonBehavior(Box::new((*n).clone())),
578 NodeRef::JsonExpr(n) => NodeEnum::JsonExpr(Box::new((*n).clone())),
579 NodeRef::JsonTablePath(n) => NodeEnum::JsonTablePath((*n).clone()),
580 NodeRef::JsonTablePathScan(n) => NodeEnum::JsonTablePathScan(Box::new((*n).clone())),
581 NodeRef::JsonTableSiblingJoin(n) => {
582 NodeEnum::JsonTableSiblingJoin(Box::new((*n).clone()))
583 }
584 NodeRef::JsonArgument(n) => NodeEnum::JsonArgument(Box::new((*n).clone())),
585 NodeRef::JsonFuncExpr(n) => NodeEnum::JsonFuncExpr(Box::new((*n).clone())),
586 NodeRef::JsonTablePathSpec(n) => NodeEnum::JsonTablePathSpec(Box::new((*n).clone())),
587 NodeRef::JsonTable(n) => NodeEnum::JsonTable(Box::new((*n).clone())),
588 NodeRef::JsonTableColumn(n) => NodeEnum::JsonTableColumn(Box::new((*n).clone())),
589 NodeRef::JsonParseExpr(n) => NodeEnum::JsonParseExpr(Box::new((*n).clone())),
590 NodeRef::JsonScalarExpr(n) => NodeEnum::JsonScalarExpr(Box::new((*n).clone())),
591 NodeRef::JsonSerializeExpr(n) => NodeEnum::JsonSerializeExpr(Box::new((*n).clone())),
592 }
593 }
594}