@@ -33,11 +33,11 @@ use crate::ast::{
3333 display_comma_separated, display_separated, ArgMode , CommentDef , CreateFunctionBody ,
3434 CreateFunctionUsing , DataType , Expr , FunctionBehavior , FunctionCalledOnNull ,
3535 FunctionDeterminismSpecifier , FunctionParallel , Ident , IndexColumn , MySQLColumnPosition ,
36- ObjectName , OperateFunctionArg , OrderByExpr , ProjectionSelect , SequenceOptions , SqlOption , Tag ,
37- Value , ValueWithSpan ,
36+ ObjectName , OperateFunctionArg , OrderByExpr , ProjectionSelect , SequenceOptions , Spanned ,
37+ SqlOption , Tag , Value , ValueWithSpan ,
3838} ;
3939use crate :: keywords:: Keyword ;
40- use crate :: tokenizer:: Token ;
40+ use crate :: tokenizer:: { Span , Token } ;
4141
4242/// ALTER TABLE operation REPLICA IDENTITY values
4343/// See [Postgres ALTER TABLE docs](https://www.postgresql.org/docs/current/sql-altertable.html)
@@ -264,7 +264,7 @@ pub enum AlterTableOperation {
264264 } ,
265265 /// `RENAME TO <table_name>`
266266 RenameTable {
267- table_name : ObjectName ,
267+ table_name : RenameTableNameKind ,
268268 } ,
269269 // CHANGE [ COLUMN ] <old_name> <new_name> <data_type> [ <options> ]
270270 ChangeColumn {
@@ -697,7 +697,7 @@ impl fmt::Display for AlterTableOperation {
697697 new_column_name,
698698 } => write ! ( f, "RENAME COLUMN {old_column_name} TO {new_column_name}" ) ,
699699 AlterTableOperation :: RenameTable { table_name } => {
700- write ! ( f, "RENAME TO {table_name}" )
700+ write ! ( f, "RENAME {table_name}" )
701701 }
702702 AlterTableOperation :: ChangeColumn {
703703 old_name,
@@ -2537,3 +2537,34 @@ impl fmt::Display for CreateConnector {
25372537 Ok ( ( ) )
25382538 }
25392539}
2540+
2541+ /// `RenameTableNameKind` is the kind used in an `ALTER TABLE _ RENAME` statement.
2542+ ///
2543+ /// Note: [MySQL] is the only database that supports the AS keyword for this operation.
2544+ ///
2545+ /// [MySQL]: https://dev.mysql.com/doc/refman/8.4/en/alter-table.html
2546+ #[ derive( Debug , Clone , PartialEq , PartialOrd , Eq , Ord , Hash ) ]
2547+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
2548+ #[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
2549+ pub enum RenameTableNameKind {
2550+ As ( ObjectName ) ,
2551+ To ( ObjectName ) ,
2552+ }
2553+
2554+ impl fmt:: Display for RenameTableNameKind {
2555+ fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
2556+ match self {
2557+ RenameTableNameKind :: As ( name) => write ! ( f, "AS {name}" ) ,
2558+ RenameTableNameKind :: To ( name) => write ! ( f, "TO {name}" ) ,
2559+ }
2560+ }
2561+ }
2562+
2563+ impl Spanned for RenameTableNameKind {
2564+ fn span ( & self ) -> Span {
2565+ match self {
2566+ RenameTableNameKind :: As ( name) => name. span ( ) ,
2567+ RenameTableNameKind :: To ( name) => name. span ( ) ,
2568+ }
2569+ }
2570+ }
0 commit comments