@@ -2,9 +2,9 @@ use std::fmt;
22
33use bon:: bon;
44use sqlparser:: ast:: {
5- AlterColumnOperation , AlterTableOperation , AlterType , AlterTypeAddValuePosition ,
6- AlterTypeOperation , ColumnOption , ColumnOptionDef , CreateTable , GeneratedAs , ObjectName ,
7- ObjectNamePart , ObjectType , Statement , UserDefinedTypeRepresentation ,
5+ AlterColumnOperation , AlterTable , AlterTableOperation , AlterType , AlterTypeAddValuePosition ,
6+ AlterTypeOperation , ColumnOption , ColumnOptionDef , CreateExtension , CreateTable , DropExtension ,
7+ GeneratedAs , ObjectName , ObjectNamePart , ObjectType , Statement , UserDefinedTypeRepresentation ,
88} ;
99use thiserror:: Error ;
1010
@@ -76,7 +76,7 @@ impl Migrate for Vec<Statement> {
7676 Statement :: CreateTable ( ca) => other
7777 . iter ( )
7878 . find ( |sb| match sb {
79- Statement :: AlterTable { name, .. } => * name == ca. name ,
79+ Statement :: AlterTable ( AlterTable { name, .. } ) => * name == ca. name ,
8080 Statement :: Drop {
8181 object_type, names, ..
8282 } => {
@@ -114,10 +114,12 @@ impl Migrate for Vec<Statement> {
114114 _ => false ,
115115 } )
116116 . map_or ( Some ( Ok ( orig) ) , |sb| sa. migrate ( sb) . transpose ( ) ) ,
117- Statement :: CreateExtension { name, .. } => other
117+ Statement :: CreateExtension ( CreateExtension { name, .. } ) => other
118118 . iter ( )
119119 . find ( |sb| match sb {
120- Statement :: DropExtension { names, .. } => names. contains ( name) ,
120+ Statement :: DropExtension ( DropExtension { names, .. } ) => {
121+ names. contains ( name)
122+ }
121123 _ => false ,
122124 } )
123125 . map_or ( Some ( Ok ( orig) ) , |sb| sa. migrate ( sb) . transpose ( ) ) ,
@@ -152,9 +154,9 @@ impl Migrate for Statement {
152154 fn migrate ( self , other : & Self ) -> Result < Option < Self > , MigrateError > {
153155 match self {
154156 Self :: CreateTable ( ca) => match other {
155- Self :: AlterTable {
157+ Self :: AlterTable ( AlterTable {
156158 name, operations, ..
157- } => {
159+ } ) => {
158160 if * name == ca. name {
159161 Ok ( Some ( Self :: CreateTable ( migrate_alter_table (
160162 ca, operations,
@@ -264,8 +266,11 @@ fn migrate_alter_table(
264266 AlterTableOperation :: AddColumn { column_def, .. } => {
265267 t. columns . push ( column_def. clone ( ) ) ;
266268 }
267- AlterTableOperation :: DropColumn { column_name, .. } => {
268- t. columns . retain ( |c| c. name . value != * column_name. value ) ;
269+ AlterTableOperation :: DropColumn { column_names, .. } => {
270+ t. columns . retain ( |c| {
271+ !column_names
272+ . iter ( ) . any ( |name| c. name . value == name. value )
273+ } ) ;
269274 }
270275 AlterTableOperation :: AlterColumn { column_name, op } => {
271276 t. columns . iter_mut ( ) . for_each ( |c| {
@@ -297,7 +302,8 @@ fn migrate_alter_table(
297302 }
298303 AlterColumnOperation :: SetDataType {
299304 data_type,
300- using : _, // not applicable since we're not running the query
305+ using : _, // not applicable since we're not running the query
306+ had_set : _, // this doesn't change the meaning
301307 } => {
302308 c. data_type = data_type. clone ( ) ;
303309 }
@@ -310,8 +316,7 @@ fn migrate_alter_table(
310316 c. options . push ( ColumnOptionDef {
311317 name : None ,
312318 option : ColumnOption :: Generated {
313- generated_as : generated_as
314- . clone ( )
319+ generated_as : ( * generated_as)
315320 . unwrap_or ( GeneratedAs :: Always ) ,
316321 sequence_options : sequence_options. clone ( ) ,
317322 generation_expr : None ,
@@ -339,9 +344,9 @@ fn migrate_alter_table(
339344
340345fn migrate_alter_type (
341346 name : ObjectName ,
342- representation : UserDefinedTypeRepresentation ,
347+ representation : Option < UserDefinedTypeRepresentation > ,
343348 other : & AlterType ,
344- ) -> Result < ( ObjectName , UserDefinedTypeRepresentation ) , MigrateError > {
349+ ) -> Result < ( ObjectName , Option < UserDefinedTypeRepresentation > ) , MigrateError > {
345350 match & other. operation {
346351 AlterTypeOperation :: Rename ( r) => {
347352 let mut parts = name. 0 ;
@@ -352,7 +357,7 @@ fn migrate_alter_type(
352357 Ok ( ( name, representation) )
353358 }
354359 AlterTypeOperation :: AddValue ( a) => match representation {
355- UserDefinedTypeRepresentation :: Enum { mut labels } => {
360+ Some ( UserDefinedTypeRepresentation :: Enum { mut labels } ) => {
356361 match & a. position {
357362 Some ( AlterTypeAddValuePosition :: Before ( before_name) ) => {
358363 let index = labels
@@ -379,9 +384,9 @@ fn migrate_alter_type(
379384 None => labels. push ( a. value . clone ( ) ) ,
380385 }
381386
382- Ok ( ( name, UserDefinedTypeRepresentation :: Enum { labels } ) )
387+ Ok ( ( name, Some ( UserDefinedTypeRepresentation :: Enum { labels } ) ) )
383388 }
384- UserDefinedTypeRepresentation :: Composite { .. } => Err ( MigrateError :: builder ( )
389+ Some ( _ ) | None => Err ( MigrateError :: builder ( )
385390 . kind ( MigrateErrorKind :: AlterTypeInvalidOp ( Box :: new (
386391 other. operation . clone ( ) ,
387392 ) ) )
@@ -393,15 +398,15 @@ fn migrate_alter_type(
393398 . build ( ) ) ,
394399 } ,
395400 AlterTypeOperation :: RenameValue ( rv) => match representation {
396- UserDefinedTypeRepresentation :: Enum { labels } => {
401+ Some ( UserDefinedTypeRepresentation :: Enum { labels } ) => {
397402 let labels = labels
398403 . into_iter ( )
399404 . map ( |l| if l == rv. from { rv. to . clone ( ) } else { l } )
400405 . collect :: < Vec < _ > > ( ) ;
401406
402- Ok ( ( name, UserDefinedTypeRepresentation :: Enum { labels } ) )
407+ Ok ( ( name, Some ( UserDefinedTypeRepresentation :: Enum { labels } ) ) )
403408 }
404- UserDefinedTypeRepresentation :: Composite { .. } => Err ( MigrateError :: builder ( )
409+ Some ( _ ) | None => Err ( MigrateError :: builder ( )
405410 . kind ( MigrateErrorKind :: AlterTypeInvalidOp ( Box :: new (
406411 other. operation . clone ( ) ,
407412 ) ) )
0 commit comments