Skip to content

Commit 586241f

Browse files
authored
refactor and simplify unparser (#10811)
1 parent f054586 commit 586241f

File tree

2 files changed

+99
-151
lines changed

2 files changed

+99
-151
lines changed

datafusion/sql/src/unparser/ast.rs

Lines changed: 86 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -41,61 +41,50 @@ pub(super) struct QueryBuilder {
4141
#[allow(dead_code)]
4242
impl QueryBuilder {
4343
pub fn with(&mut self, value: Option<ast::With>) -> &mut Self {
44-
let new = self;
45-
new.with = value;
46-
new
44+
self.with = value;
45+
self
4746
}
4847
pub fn body(&mut self, value: Box<ast::SetExpr>) -> &mut Self {
49-
let new = self;
50-
new.body = Option::Some(value);
51-
new
48+
self.body = Some(value);
49+
self
5250
}
5351
pub fn take_body(&mut self) -> Option<Box<ast::SetExpr>> {
5452
self.body.take()
5553
}
5654
pub fn order_by(&mut self, value: Vec<ast::OrderByExpr>) -> &mut Self {
57-
let new = self;
58-
new.order_by = value;
59-
new
55+
self.order_by = value;
56+
self
6057
}
6158
pub fn limit(&mut self, value: Option<ast::Expr>) -> &mut Self {
62-
let new = self;
63-
new.limit = value;
64-
new
59+
self.limit = value;
60+
self
6561
}
6662
pub fn limit_by(&mut self, value: Vec<ast::Expr>) -> &mut Self {
67-
let new = self;
68-
new.limit_by = value;
69-
new
63+
self.limit_by = value;
64+
self
7065
}
7166
pub fn offset(&mut self, value: Option<ast::Offset>) -> &mut Self {
72-
let new = self;
73-
new.offset = value;
74-
new
67+
self.offset = value;
68+
self
7569
}
7670
pub fn fetch(&mut self, value: Option<ast::Fetch>) -> &mut Self {
77-
let new = self;
78-
new.fetch = value;
79-
new
71+
self.fetch = value;
72+
self
8073
}
8174
pub fn locks(&mut self, value: Vec<ast::LockClause>) -> &mut Self {
82-
let new = self;
83-
new.locks = value;
84-
new
75+
self.locks = value;
76+
self
8577
}
8678
pub fn for_clause(&mut self, value: Option<ast::ForClause>) -> &mut Self {
87-
let new = self;
88-
new.for_clause = value;
89-
new
79+
self.for_clause = value;
80+
self
9081
}
9182
pub fn build(&self) -> Result<ast::Query, BuilderError> {
9283
Ok(ast::Query {
9384
with: self.with.clone(),
9485
body: match self.body {
9586
Some(ref value) => value.clone(),
96-
None => {
97-
return Result::Err(Into::into(UninitializedFieldError::from("body")))
98-
}
87+
None => return Err(Into::into(UninitializedFieldError::from("body"))),
9988
},
10089
order_by: self.order_by.clone(),
10190
limit: self.limit.clone(),
@@ -148,90 +137,74 @@ pub(super) struct SelectBuilder {
148137
#[allow(dead_code)]
149138
impl SelectBuilder {
150139
pub fn distinct(&mut self, value: Option<ast::Distinct>) -> &mut Self {
151-
let new = self;
152-
new.distinct = value;
153-
new
140+
self.distinct = value;
141+
self
154142
}
155143
pub fn top(&mut self, value: Option<ast::Top>) -> &mut Self {
156-
let new = self;
157-
new.top = value;
158-
new
144+
self.top = value;
145+
self
159146
}
160147
pub fn projection(&mut self, value: Vec<ast::SelectItem>) -> &mut Self {
161-
let new = self;
162-
new.projection = value;
163-
new
148+
self.projection = value;
149+
self
164150
}
165151
pub fn already_projected(&self) -> bool {
166152
!self.projection.is_empty()
167153
}
168154
pub fn into(&mut self, value: Option<ast::SelectInto>) -> &mut Self {
169-
let new = self;
170-
new.into = value;
171-
new
155+
self.into = value;
156+
self
172157
}
173158
pub fn from(&mut self, value: Vec<TableWithJoinsBuilder>) -> &mut Self {
174-
let new = self;
175-
new.from = value;
176-
new
159+
self.from = value;
160+
self
177161
}
178162
pub fn push_from(&mut self, value: TableWithJoinsBuilder) -> &mut Self {
179-
let new = self;
180-
new.from.push(value);
181-
new
163+
self.from.push(value);
164+
self
182165
}
183166
pub fn pop_from(&mut self) -> Option<TableWithJoinsBuilder> {
184167
self.from.pop()
185168
}
186169
pub fn lateral_views(&mut self, value: Vec<ast::LateralView>) -> &mut Self {
187-
let new = self;
188-
new.lateral_views = value;
189-
new
170+
self.lateral_views = value;
171+
self
190172
}
191173
pub fn selection(&mut self, value: Option<ast::Expr>) -> &mut Self {
192-
let new = self;
193-
new.selection = value;
194-
new
174+
self.selection = value;
175+
self
195176
}
196177
pub fn group_by(&mut self, value: ast::GroupByExpr) -> &mut Self {
197-
let new = self;
198-
new.group_by = Option::Some(value);
199-
new
178+
self.group_by = Some(value);
179+
self
200180
}
201181
pub fn cluster_by(&mut self, value: Vec<ast::Expr>) -> &mut Self {
202-
let new = self;
203-
new.cluster_by = value;
204-
new
182+
self.cluster_by = value;
183+
self
205184
}
206185
pub fn distribute_by(&mut self, value: Vec<ast::Expr>) -> &mut Self {
207-
let new = self;
208-
new.distribute_by = value;
209-
new
186+
self.distribute_by = value;
187+
self
210188
}
211189
pub fn sort_by(&mut self, value: Vec<ast::Expr>) -> &mut Self {
212-
let new = self;
213-
new.sort_by = value;
214-
new
190+
self.sort_by = value;
191+
self
215192
}
216193
pub fn having(&mut self, value: Option<ast::Expr>) -> &mut Self {
217-
let new = self;
218-
new.having = value;
219-
new
194+
self.having = value;
195+
self
220196
}
221197
pub fn named_window(&mut self, value: Vec<ast::NamedWindowDefinition>) -> &mut Self {
222-
let new = self;
223-
new.named_window = value;
224-
new
198+
self.named_window = value;
199+
self
225200
}
226201
pub fn qualify(&mut self, value: Option<ast::Expr>) -> &mut Self {
227-
let new = self;
228-
new.qualify = value;
229-
new
202+
self.qualify = value;
203+
self
230204
}
231205
pub fn value_table_mode(&mut self, value: Option<ast::ValueTableMode>) -> &mut Self {
232-
let new = self;
233-
new.value_table_mode = value;
234-
new
206+
self.value_table_mode = value;
207+
self
235208
}
236209
pub fn build(&self) -> Result<ast::Select, BuilderError> {
237210
Ok(ast::Select {
@@ -249,9 +222,7 @@ impl SelectBuilder {
249222
group_by: match self.group_by {
250223
Some(ref value) => value.clone(),
251224
None => {
252-
return Result::Err(Into::into(UninitializedFieldError::from(
253-
"group_by",
254-
)))
225+
return Err(Into::into(UninitializedFieldError::from("group_by")))
255226
}
256227
},
257228
cluster_by: self.cluster_by.clone(),
@@ -300,20 +271,17 @@ pub(super) struct TableWithJoinsBuilder {
300271
#[allow(dead_code)]
301272
impl TableWithJoinsBuilder {
302273
pub fn relation(&mut self, value: RelationBuilder) -> &mut Self {
303-
let new = self;
304-
new.relation = Option::Some(value);
305-
new
274+
self.relation = Some(value);
275+
self
306276
}
307277

308278
pub fn joins(&mut self, value: Vec<ast::Join>) -> &mut Self {
309-
let new = self;
310-
new.joins = value;
311-
new
279+
self.joins = value;
280+
self
312281
}
313282
pub fn push_join(&mut self, value: ast::Join) -> &mut Self {
314-
let new = self;
315-
new.joins.push(value);
316-
new
283+
self.joins.push(value);
284+
self
317285
}
318286

319287
pub fn build(&self) -> Result<Option<ast::TableWithJoins>, BuilderError> {
@@ -360,19 +328,16 @@ impl RelationBuilder {
360328
self.relation.is_some()
361329
}
362330
pub fn table(&mut self, value: TableRelationBuilder) -> &mut Self {
363-
let new = self;
364-
new.relation = Option::Some(TableFactorBuilder::Table(value));
365-
new
331+
self.relation = Some(TableFactorBuilder::Table(value));
332+
self
366333
}
367334
pub fn derived(&mut self, value: DerivedRelationBuilder) -> &mut Self {
368-
let new = self;
369-
new.relation = Option::Some(TableFactorBuilder::Derived(value));
370-
new
335+
self.relation = Some(TableFactorBuilder::Derived(value));
336+
self
371337
}
372338
pub fn empty(&mut self) -> &mut Self {
373-
let new = self;
374-
new.relation = Some(TableFactorBuilder::Empty);
375-
new
339+
self.relation = Some(TableFactorBuilder::Empty);
340+
self
376341
}
377342
pub fn alias(&mut self, value: Option<ast::TableAlias>) -> &mut Self {
378343
let new = self;
@@ -393,9 +358,7 @@ impl RelationBuilder {
393358
Some(TableFactorBuilder::Table(ref value)) => Some(value.build()?),
394359
Some(TableFactorBuilder::Derived(ref value)) => Some(value.build()?),
395360
Some(TableFactorBuilder::Empty) => None,
396-
None => {
397-
return Result::Err(Into::into(UninitializedFieldError::from("relation")))
398-
}
361+
None => return Err(Into::into(UninitializedFieldError::from("relation"))),
399362
})
400363
}
401364
fn create_empty() -> Self {
@@ -423,42 +386,34 @@ pub(super) struct TableRelationBuilder {
423386
#[allow(dead_code)]
424387
impl TableRelationBuilder {
425388
pub fn name(&mut self, value: ast::ObjectName) -> &mut Self {
426-
let new = self;
427-
new.name = Option::Some(value);
428-
new
389+
self.name = Some(value);
390+
self
429391
}
430392
pub fn alias(&mut self, value: Option<ast::TableAlias>) -> &mut Self {
431-
let new = self;
432-
new.alias = value;
433-
new
393+
self.alias = value;
394+
self
434395
}
435396
pub fn args(&mut self, value: Option<Vec<ast::FunctionArg>>) -> &mut Self {
436-
let new = self;
437-
new.args = value;
438-
new
397+
self.args = value;
398+
self
439399
}
440400
pub fn with_hints(&mut self, value: Vec<ast::Expr>) -> &mut Self {
441-
let new = self;
442-
new.with_hints = value;
443-
new
401+
self.with_hints = value;
402+
self
444403
}
445404
pub fn version(&mut self, value: Option<ast::TableVersion>) -> &mut Self {
446-
let new = self;
447-
new.version = value;
448-
new
405+
self.version = value;
406+
self
449407
}
450408
pub fn partitions(&mut self, value: Vec<ast::Ident>) -> &mut Self {
451-
let new = self;
452-
new.partitions = value;
453-
new
409+
self.partitions = value;
410+
self
454411
}
455412
pub fn build(&self) -> Result<ast::TableFactor, BuilderError> {
456413
Ok(ast::TableFactor::Table {
457414
name: match self.name {
458415
Some(ref value) => value.clone(),
459-
None => {
460-
return Result::Err(Into::into(UninitializedFieldError::from("name")))
461-
}
416+
None => return Err(Into::into(UninitializedFieldError::from("name"))),
462417
},
463418
alias: self.alias.clone(),
464419
args: self.args.clone(),
@@ -493,36 +448,27 @@ pub(super) struct DerivedRelationBuilder {
493448
#[allow(dead_code)]
494449
impl DerivedRelationBuilder {
495450
pub fn lateral(&mut self, value: bool) -> &mut Self {
496-
let new = self;
497-
new.lateral = Option::Some(value);
498-
new
451+
self.lateral = Some(value);
452+
self
499453
}
500454
pub fn subquery(&mut self, value: Box<ast::Query>) -> &mut Self {
501-
let new = self;
502-
new.subquery = Option::Some(value);
503-
new
455+
self.subquery = Some(value);
456+
self
504457
}
505458
pub fn alias(&mut self, value: Option<ast::TableAlias>) -> &mut Self {
506-
let new = self;
507-
new.alias = value;
508-
new
459+
self.alias = value;
460+
self
509461
}
510462
fn build(&self) -> Result<ast::TableFactor, BuilderError> {
511463
Ok(ast::TableFactor::Derived {
512464
lateral: match self.lateral {
513465
Some(ref value) => *value,
514-
None => {
515-
return Result::Err(Into::into(UninitializedFieldError::from(
516-
"lateral",
517-
)))
518-
}
466+
None => return Err(Into::into(UninitializedFieldError::from("lateral"))),
519467
},
520468
subquery: match self.subquery {
521469
Some(ref value) => value.clone(),
522470
None => {
523-
return Result::Err(Into::into(UninitializedFieldError::from(
524-
"subquery",
525-
)))
471+
return Err(Into::into(UninitializedFieldError::from("subquery")))
526472
}
527473
},
528474
alias: self.alias.clone(),

0 commit comments

Comments
 (0)