@@ -310,7 +310,12 @@ pub trait QueryBuilder:
310310 }
311311 SimpleExpr :: FunctionCall ( func) => {
312312 self . prepare_function ( & func. func , sql) ;
313- self . prepare_tuple ( & func. args , sql) ;
313+ write ! ( sql, "(" ) . unwrap ( ) ;
314+ if func. distinct {
315+ write ! ( sql, "DISTINCT " ) . unwrap ( ) ;
316+ }
317+ self . prepare_comma_seperated_sequence ( & func. args , sql) ;
318+ write ! ( sql, ")" ) . unwrap ( ) ;
314319 }
315320 SimpleExpr :: Binary ( left, op, right) => match ( op, right. as_ref ( ) ) {
316321 ( BinOper :: In , SimpleExpr :: Tuple ( t) ) if t. is_empty ( ) => {
@@ -510,8 +515,12 @@ pub trait QueryBuilder:
510515 }
511516 TableRef :: FunctionCall ( func, alias) => {
512517 self . prepare_function ( & func. func , sql) ;
513- self . prepare_tuple ( & func. args , sql) ;
514- write ! ( sql, " AS " ) . unwrap ( ) ;
518+ write ! ( sql, "(" ) . unwrap ( ) ;
519+ if func. distinct {
520+ write ! ( sql, "DISTINCT " ) . unwrap ( ) ;
521+ }
522+ self . prepare_comma_seperated_sequence ( & func. args , sql) ;
523+ write ! ( sql, ") AS " ) . unwrap ( ) ;
515524 alias. prepare ( sql. as_writer ( ) , self . quote ( ) ) ;
516525 }
517526 _ => self . prepare_table_ref_iden ( table_ref, sql) ,
@@ -946,16 +955,21 @@ pub trait QueryBuilder:
946955 } ) ;
947956 }
948957
949- /// Translate [`SimpleExpr::Tuple`] into SQL statement.
950- fn prepare_tuple ( & self , exprs : & [ SimpleExpr ] , sql : & mut dyn SqlWriter ) {
951- write ! ( sql, "(" ) . unwrap ( ) ;
958+ /// Write a comma seperated sequence of [`SimpleExpr`]s.
959+ fn prepare_comma_seperated_sequence ( & self , exprs : & [ SimpleExpr ] , sql : & mut dyn SqlWriter ) {
952960 exprs. iter ( ) . fold ( true , |first, expr| {
953961 if !first {
954962 write ! ( sql, ", " ) . unwrap ( ) ;
955963 }
956964 self . prepare_simple_expr ( expr, sql) ;
957965 false
958966 } ) ;
967+ }
968+
969+ /// Translate [`SimpleExpr::Tuple`] into SQL statement.
970+ fn prepare_tuple ( & self , exprs : & [ SimpleExpr ] , sql : & mut dyn SqlWriter ) {
971+ write ! ( sql, "(" ) . unwrap ( ) ;
972+ self . prepare_comma_seperated_sequence ( exprs, sql) ;
959973 write ! ( sql, ")" ) . unwrap ( ) ;
960974 }
961975
0 commit comments