@@ -33,11 +33,11 @@ use crate::ast::{
33
33
display_comma_separated, display_separated, ArgMode , CommentDef , CreateFunctionBody ,
34
34
CreateFunctionUsing , DataType , Expr , FunctionBehavior , FunctionCalledOnNull ,
35
35
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 ,
38
38
} ;
39
39
use crate :: keywords:: Keyword ;
40
- use crate :: tokenizer:: Token ;
40
+ use crate :: tokenizer:: { Span , Token } ;
41
41
42
42
/// ALTER TABLE operation REPLICA IDENTITY values
43
43
/// See [Postgres ALTER TABLE docs](https://www.postgresql.org/docs/current/sql-altertable.html)
@@ -264,7 +264,7 @@ pub enum AlterTableOperation {
264
264
} ,
265
265
/// `RENAME TO <table_name>`
266
266
RenameTable {
267
- table_name : ObjectName ,
267
+ table_name : RenameTableNameKind ,
268
268
} ,
269
269
// CHANGE [ COLUMN ] <old_name> <new_name> <data_type> [ <options> ]
270
270
ChangeColumn {
@@ -697,7 +697,7 @@ impl fmt::Display for AlterTableOperation {
697
697
new_column_name,
698
698
} => write ! ( f, "RENAME COLUMN {old_column_name} TO {new_column_name}" ) ,
699
699
AlterTableOperation :: RenameTable { table_name } => {
700
- write ! ( f, "RENAME TO {table_name}" )
700
+ write ! ( f, "RENAME {table_name}" )
701
701
}
702
702
AlterTableOperation :: ChangeColumn {
703
703
old_name,
@@ -2537,3 +2537,34 @@ impl fmt::Display for CreateConnector {
2537
2537
Ok ( ( ) )
2538
2538
}
2539
2539
}
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