@@ -242,7 +242,7 @@ impl SelectBuilder {
242
242
from : self
243
243
. from
244
244
. iter ( )
245
- . map ( |b| b. build ( ) )
245
+ . filter_map ( |b| b. build ( ) . transpose ( ) )
246
246
. collect :: < Result < Vec < _ > , BuilderError > > ( ) ?,
247
247
lateral_views : self . lateral_views . clone ( ) ,
248
248
selection : self . selection . clone ( ) ,
@@ -314,18 +314,17 @@ impl TableWithJoinsBuilder {
314
314
new
315
315
}
316
316
317
- pub fn build ( & self ) -> Result < ast:: TableWithJoins , BuilderError > {
318
- Ok ( ast:: TableWithJoins {
319
- relation : match self . relation {
320
- Some ( ref value) => value. build ( ) ?,
321
- None => {
322
- return Result :: Err ( Into :: into ( UninitializedFieldError :: from (
323
- "relation" ,
324
- ) ) )
325
- }
317
+ pub fn build ( & self ) -> Result < Option < ast:: TableWithJoins > , BuilderError > {
318
+ match self . relation {
319
+ Some ( ref value) => match value. build ( ) ? {
320
+ Some ( relation) => Ok ( Some ( ast:: TableWithJoins {
321
+ relation,
322
+ joins : self . joins . clone ( ) ,
323
+ } ) ) ,
324
+ None => Ok ( None ) ,
326
325
} ,
327
- joins : self . joins . clone ( ) ,
328
- } )
326
+ None => Err ( Into :: into ( UninitializedFieldError :: from ( "relation" ) ) ) ,
327
+ }
329
328
}
330
329
fn create_empty ( ) -> Self {
331
330
Self {
@@ -350,6 +349,7 @@ pub(super) struct RelationBuilder {
350
349
enum TableFactorBuilder {
351
350
Table ( TableRelationBuilder ) ,
352
351
Derived ( DerivedRelationBuilder ) ,
352
+ Empty ,
353
353
}
354
354
355
355
#[ allow( dead_code) ]
@@ -367,6 +367,11 @@ impl RelationBuilder {
367
367
new. relation = Option :: Some ( TableFactorBuilder :: Derived ( value) ) ;
368
368
new
369
369
}
370
+ pub fn empty ( & mut self ) -> & mut Self {
371
+ let new = self ;
372
+ new. relation = Some ( TableFactorBuilder :: Empty ) ;
373
+ new
374
+ }
370
375
pub fn alias ( & mut self , value : Option < ast:: TableAlias > ) -> & mut Self {
371
376
let new = self ;
372
377
match new. relation {
@@ -376,14 +381,16 @@ impl RelationBuilder {
376
381
Some ( TableFactorBuilder :: Derived ( ref mut rel_builder) ) => {
377
382
rel_builder. alias = value;
378
383
}
384
+ Some ( TableFactorBuilder :: Empty ) => ( ) ,
379
385
None => ( ) ,
380
386
}
381
387
new
382
388
}
383
- pub fn build ( & self ) -> Result < ast:: TableFactor , BuilderError > {
389
+ pub fn build ( & self ) -> Result < Option < ast:: TableFactor > , BuilderError > {
384
390
Ok ( match self . relation {
385
- Some ( TableFactorBuilder :: Table ( ref value) ) => value. build ( ) ?,
386
- Some ( TableFactorBuilder :: Derived ( ref value) ) => value. build ( ) ?,
391
+ Some ( TableFactorBuilder :: Table ( ref value) ) => Some ( value. build ( ) ?) ,
392
+ Some ( TableFactorBuilder :: Derived ( ref value) ) => Some ( value. build ( ) ?) ,
393
+ Some ( TableFactorBuilder :: Empty ) => None ,
387
394
None => {
388
395
return Result :: Err ( Into :: into ( UninitializedFieldError :: from ( "relation" ) ) )
389
396
}
0 commit comments