Skip to content

Commit 559b7e3

Browse files
authored
Add support for ALTER TABLE DROP INDEX (#1865)
1 parent 40d12b9 commit 559b7e3

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

src/ast/ddl.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,12 @@ pub enum AlterTableOperation {
187187
DropForeignKey {
188188
name: Ident,
189189
},
190+
/// `DROP INDEX <index_name>`
191+
///
192+
/// [MySQL]: https://dev.mysql.com/doc/refman/8.4/en/alter-table.html
193+
DropIndex {
194+
name: Ident,
195+
},
190196
/// `ENABLE ALWAYS RULE rewrite_rule_name`
191197
///
192198
/// Note: this is a PostgreSQL-specific operation.
@@ -606,6 +612,7 @@ impl fmt::Display for AlterTableOperation {
606612
}
607613
AlterTableOperation::DropPrimaryKey => write!(f, "DROP PRIMARY KEY"),
608614
AlterTableOperation::DropForeignKey { name } => write!(f, "DROP FOREIGN KEY {name}"),
615+
AlterTableOperation::DropIndex { name } => write!(f, "DROP INDEX {name}"),
609616
AlterTableOperation::DropColumn {
610617
has_column_keyword,
611618
column_name,

src/ast/spans.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,7 @@ impl Spanned for AlterTableOperation {
11151115
.union_opt(&with_name.as_ref().map(|n| n.span)),
11161116
AlterTableOperation::DropPrimaryKey => Span::empty(),
11171117
AlterTableOperation::DropForeignKey { name } => name.span,
1118+
AlterTableOperation::DropIndex { name } => name.span,
11181119
AlterTableOperation::EnableAlwaysRule { name } => name.span,
11191120
AlterTableOperation::EnableAlwaysTrigger { name } => name.span,
11201121
AlterTableOperation::EnableReplicaRule { name } => name.span,

src/parser/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8636,6 +8636,9 @@ impl<'a> Parser<'a> {
86368636
} else if self.parse_keywords(&[Keyword::FOREIGN, Keyword::KEY]) {
86378637
let name = self.parse_identifier()?;
86388638
AlterTableOperation::DropForeignKey { name }
8639+
} else if self.parse_keyword(Keyword::INDEX) {
8640+
let name = self.parse_identifier()?;
8641+
AlterTableOperation::DropIndex { name }
86398642
} else if self.parse_keyword(Keyword::PROJECTION)
86408643
&& dialect_of!(self is ClickHouseDialect|GenericDialect)
86418644
{

tests/sqlparser_mysql.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4025,3 +4025,13 @@ fn parse_drop_index() {
40254025
_ => unreachable!(),
40264026
}
40274027
}
4028+
4029+
#[test]
4030+
fn parse_alter_table_drop_index() {
4031+
assert_matches!(
4032+
alter_table_op(
4033+
mysql_and_generic().verified_stmt("ALTER TABLE tab DROP INDEX idx_index")
4034+
),
4035+
AlterTableOperation::DropIndex { name } if name.value == "idx_index"
4036+
);
4037+
}

0 commit comments

Comments
 (0)