@@ -497,6 +497,19 @@ impl Alias {
497497 self . metadata = metadata;
498498 self
499499 }
500+
501+ /// Return true if this alias represents the unaliased `name`
502+ pub fn eq_name ( & self , name : & str ) -> bool {
503+ self . eq_qualified_name ( None , name)
504+ }
505+
506+ pub fn eq_qualified_name (
507+ & self ,
508+ relation : Option < & TableReference > ,
509+ name : & str ,
510+ ) -> bool {
511+ self . relation . as_ref ( ) == relation && self . name == name
512+ }
500513}
501514
502515/// Binary expression
@@ -1386,7 +1399,14 @@ impl Expr {
13861399
13871400 /// Return `self AS name` alias expression
13881401 pub fn alias ( self , name : impl Into < String > ) -> Expr {
1389- Expr :: Alias ( Alias :: new ( self , None :: < & str > , name. into ( ) ) )
1402+ // Don't nest aliases
1403+ let Expr :: Alias ( mut alias) = self else {
1404+ return Expr :: Alias ( Alias :: new ( self , None :: < & str > , name. into ( ) ) ) ;
1405+ } ;
1406+
1407+ alias. relation = None ;
1408+ alias. name = name. into ( ) ;
1409+ Expr :: Alias ( alias)
13901410 }
13911411
13921412 /// Return `self AS name` alias expression with metadata
@@ -1407,7 +1427,16 @@ impl Expr {
14071427 name : impl Into < String > ,
14081428 metadata : Option < std:: collections:: HashMap < String , String > > ,
14091429 ) -> Expr {
1410- Expr :: Alias ( Alias :: new ( self , None :: < & str > , name. into ( ) ) . with_metadata ( metadata) )
1430+ // Don't nest aliases
1431+ let Expr :: Alias ( mut alias) = self else {
1432+ return Expr :: Alias (
1433+ Alias :: new ( self , None :: < & str > , name. into ( ) ) . with_metadata ( metadata) ,
1434+ ) ;
1435+ } ;
1436+
1437+ alias. relation = None ;
1438+ alias. name = name. into ( ) ;
1439+ Expr :: Alias ( alias. with_metadata ( metadata) )
14111440 }
14121441
14131442 /// Return `self AS name` alias expression with a specific qualifier
@@ -1416,7 +1445,14 @@ impl Expr {
14161445 relation : Option < impl Into < TableReference > > ,
14171446 name : impl Into < String > ,
14181447 ) -> Expr {
1419- Expr :: Alias ( Alias :: new ( self , relation, name. into ( ) ) )
1448+ // Don't nest aliases
1449+ let Expr :: Alias ( mut alias) = self else {
1450+ return Expr :: Alias ( Alias :: new ( self , relation, name) ) ;
1451+ } ;
1452+
1453+ alias. relation = relation. map ( |r| r. into ( ) ) ;
1454+ alias. name = name. into ( ) ;
1455+ Expr :: Alias ( alias)
14201456 }
14211457
14221458 /// Return `self AS name` alias expression with a specific qualifier and metadata
@@ -1438,7 +1474,14 @@ impl Expr {
14381474 name : impl Into < String > ,
14391475 metadata : Option < std:: collections:: HashMap < String , String > > ,
14401476 ) -> Expr {
1441- Expr :: Alias ( Alias :: new ( self , relation, name. into ( ) ) . with_metadata ( metadata) )
1477+ // Don't nest aliases
1478+ let Expr :: Alias ( mut alias) = self else {
1479+ return Expr :: Alias ( Alias :: new ( self , relation, name) . with_metadata ( metadata) ) ;
1480+ } ;
1481+
1482+ alias. relation = relation. map ( |r| r. into ( ) ) ;
1483+ alias. name = name. into ( ) ;
1484+ Expr :: Alias ( alias. with_metadata ( metadata) )
14421485 }
14431486
14441487 /// Remove an alias from an expression if one exists.
0 commit comments