Skip to content

Commit 28bab38

Browse files
Merge pull request taozhi8833998#1681 from taozhi8833998/feat-drop-index-mysql
feat: support drop index and key in mysql
2 parents c5d9d8b + 120bce0 commit 28bab38

File tree

3 files changed

+39
-23
lines changed

3 files changed

+39
-23
lines changed

pegjs/mariadb.pegjs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,7 @@ alter_action_list
811811

812812
alter_action
813813
= ALTER_ADD_COLUMN
814+
/ ALTER_DROP_KEY_INDEX
814815
/ ALTER_DROP_COLUMN
815816
/ ALTER_MODIFY_COLUMN
816817
/ ALTER_ADD_INDEX_OR_KEY
@@ -866,9 +867,7 @@ ALTER_MODIFY_COLUMN
866867
}
867868

868869
ALTER_DROP_COLUMN
869-
= KW_DROP __
870-
kc:KW_COLUMN __
871-
c:column_ref {
870+
= KW_DROP __ kc:KW_COLUMN __ c:column_ref {
872871
return {
873872
action: 'drop',
874873
column: c,
@@ -877,8 +876,7 @@ ALTER_DROP_COLUMN
877876
type: 'alter',
878877
}
879878
}
880-
/ KW_DROP __
881-
c:column_ref {
879+
/ KW_DROP __ c:column_ref {
882880
return {
883881
action: 'drop',
884882
column: c,
@@ -887,10 +885,29 @@ ALTER_DROP_COLUMN
887885
}
888886
}
889887

888+
ALTER_DROP_KEY_INDEX
889+
= KW_DROP __ 'PRIMARY'i __ KW_KEY {
890+
return {
891+
action: 'drop',
892+
key: '',
893+
keyword: 'primary key',
894+
resource: 'key',
895+
type: 'alter',
896+
}
897+
}
898+
/ KW_DROP __ k:(('FOREIGN'i? __ KW_KEY) / (KW_INDEX)) __ c:ident_name {
899+
const resource = Array.isArray(k) ? 'key' : 'index'
900+
return {
901+
action: 'drop',
902+
[resource]: c,
903+
keyword: Array.isArray(k) ? `${[k[0], k[2]].filter(v => v).join(' ').toLowerCase()}` : k.toLowerCase(),
904+
resource,
905+
type: 'alter',
906+
}
907+
}
908+
890909
ALTER_ADD_INDEX_OR_KEY
891-
= KW_ADD __
892-
id:create_index_definition
893-
{
910+
= KW_ADD __ id:create_index_definition {
894911
return {
895912
action: 'add',
896913
type: 'alter',

pegjs/mysql.pegjs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,7 @@ alter_action_list
10111011
alter_action
10121012
= ALTER_ADD_CONSTRAINT
10131013
/ ALTER_DROP_CONSTRAINT
1014-
/ ALTER_DROP_KEY
1014+
/ ALTER_DROP_KEY_INDEX
10151015
/ ALTER_ENABLE_CONSTRAINT
10161016
/ ALTER_DISABLE_CONSTRAINT
10171017
/ ALTER_ADD_COLUMN
@@ -1175,7 +1175,7 @@ ALTER_ADD_CONSTRAINT
11751175
}
11761176
}
11771177

1178-
ALTER_DROP_KEY
1178+
ALTER_DROP_KEY_INDEX
11791179
= KW_DROP __ 'PRIMARY'i __ KW_KEY {
11801180
return {
11811181
action: 'drop',
@@ -1185,21 +1185,13 @@ ALTER_DROP_KEY
11851185
type: 'alter',
11861186
}
11871187
}
1188-
/ KW_DROP __ 'FOREIGN'i __ KW_KEY __ c:ident_name {
1188+
/ KW_DROP __ k:(('FOREIGN'i? __ KW_KEY) / (KW_INDEX)) __ c:ident_name {
1189+
const resource = Array.isArray(k) ? 'key' : 'index'
11891190
return {
11901191
action: 'drop',
1191-
key: c,
1192-
keyword: 'foreign key',
1193-
resource: 'key',
1194-
type: 'alter',
1195-
}
1196-
}
1197-
/ KW_DROP __ (KW_KEY / KW_INDEX) __ c:ident_name {
1198-
return {
1199-
action: 'drop',
1200-
index: c,
1201-
keyword: 'index',
1202-
resource: 'index',
1192+
[resource]: c,
1193+
keyword: Array.isArray(k) ? `${[k[0], k[2]].filter(v => v).join(' ').toLowerCase()}` : k.toLowerCase(),
1194+
resource,
12031195
type: 'alter',
12041196
}
12051197
}

test/mysql-mariadb.spec.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,13 @@ describe('mysql', () => {
879879
'SELECT * FROM `test` WHERE `name` LIKE :pattern COLLATE UTF8MB4_GENERAL_CI'
880880
]
881881
},
882+
{
883+
title: 'alter drop index or key',
884+
sql: [
885+
'ALTER TABLE table_name DROP INDEX index_name',
886+
'ALTER TABLE `table_name` DROP INDEX index_name'
887+
]
888+
},
882889
]
883890
SQL_LIST.forEach(sqlInfo => {
884891
const { title, sql } = sqlInfo

0 commit comments

Comments
 (0)