@@ -45,6 +45,7 @@ public class SchemaChanger: CustomStringConvertible {
45
45
case addColumn( ColumnDefinition )
46
46
case addIndex( IndexDefinition , ifNotExists: Bool )
47
47
case dropColumn( String )
48
+ case dropIndex( String , ifExists: Bool )
48
49
case renameColumn( String , String )
49
50
case renameTable( String )
50
51
case createTable( columns: [ ColumnDefinition ] , ifNotExists: Bool )
@@ -60,6 +61,8 @@ public class SchemaChanger: CustomStringConvertible {
60
61
return " ALTER TABLE \( table. quote ( ) ) RENAME COLUMN \( from. quote ( ) ) TO \( to. quote ( ) ) "
61
62
case . dropColumn( let column) where SQLiteFeature . dropColumn. isSupported ( by: version) :
62
63
return " ALTER TABLE \( table. quote ( ) ) DROP COLUMN \( column. quote ( ) ) "
64
+ case . dropIndex( let name, let ifExists) :
65
+ return " DROP INDEX \( ifExists ? " IF EXISTS " : " " ) \( name. quote ( ) ) "
63
66
case . createTable( let columns, let ifNotExists) :
64
67
return " CREATE TABLE \( ifNotExists ? " IF NOT EXISTS " : " " ) \( table. quote ( ) ) ( " +
65
68
columns. map { $0. toSQL ( ) } . joined ( separator: " , " ) +
@@ -111,6 +114,10 @@ public class SchemaChanger: CustomStringConvertible {
111
114
operations. append ( . dropColumn( column) )
112
115
}
113
116
117
+ public func drop( index: String , ifExists: Bool = false ) {
118
+ operations. append ( . dropIndex( index, ifExists: ifExists) )
119
+ }
120
+
114
121
public func rename( column: String , to: String ) {
115
122
operations. append ( . renameColumn( column, to) )
116
123
}
@@ -324,8 +331,9 @@ extension TableDefinition {
324
331
func apply( _ operation: SchemaChanger . Operation ? ) -> TableDefinition {
325
332
switch operation {
326
333
case . none: return self
327
- case . createTable, . addIndex: fatalError ( )
334
+ case . createTable, . addIndex, . dropIndex : fatalError ( )
328
335
case . addColumn: fatalError ( " Use 'ALTER TABLE ADD COLUMN (...)' " )
336
+
329
337
case . dropColumn( let column) :
330
338
return TableDefinition ( name: name,
331
339
columns: columns. filter { $0. name != column } ,
0 commit comments