Skip to content

Commit 0cbb7e9

Browse files
committed
feat: support drop view stmt in mysql
1 parent bf152ea commit 0cbb7e9

4 files changed

Lines changed: 60 additions & 2 deletions

File tree

pegjs/mariadb.pegjs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
'BOOLEAN': true,
1313

1414
'CALL': true,
15+
'CASCADE': true,
1516
'CASE': true,
1617
'CREATE': true,
1718
'CONTAINS': true,
@@ -604,6 +605,24 @@ drop_stmt
604605
}
605606
};
606607
}
608+
/ a:KW_DROP __
609+
r:KW_VIEW __
610+
ife:if_exists? __
611+
t:table_ref_list __
612+
op:view_options? {
613+
if(t) t.forEach(tt => tableList.add(`${a}::${tt.db}::${tt.table}`));
614+
return {
615+
tableList: Array.from(tableList),
616+
columnList: columnListTableAlias(columnList),
617+
ast: {
618+
type: a.toLowerCase(),
619+
keyword: r.toLowerCase(),
620+
prefix: ife,
621+
name: t,
622+
options: [{ type: 'origin', value: op }],
623+
}
624+
};
625+
}
607626
/ a:KW_DROP __
608627
r:KW_INDEX __
609628
i:column_ref __
@@ -983,8 +1002,13 @@ on_reference
9831002
value: ro
9841003
}
9851004
}
1005+
view_options
1006+
= kc:('RESTRICT'i / 'CASCADE'i) {
1007+
return kc.toLowerCase()
1008+
}
1009+
9861010
reference_option
987-
= kc:('RESTRICT'i / 'CASCADE'i / 'SET NULL'i / 'NO ACTION'i / 'SET DEFAULT'i / KW_CURRENT_TIMESTAMP) {
1011+
= kc:(view_options / 'SET NULL'i / 'NO ACTION'i / 'SET DEFAULT'i / KW_CURRENT_TIMESTAMP) {
9881012
return kc.toLowerCase()
9891013
}
9901014

pegjs/mysql.pegjs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,24 @@ drop_stmt
805805
}
806806
};
807807
}
808+
/ a:KW_DROP __
809+
r:KW_VIEW __
810+
ife:if_exists? __
811+
t:table_ref_list __
812+
op:view_options? {
813+
if(t) t.forEach(tt => tableList.add(`${a}::${tt.db}::${tt.table}`));
814+
return {
815+
tableList: Array.from(tableList),
816+
columnList: columnListTableAlias(columnList),
817+
ast: {
818+
type: a.toLowerCase(),
819+
keyword: r.toLowerCase(),
820+
prefix: ife,
821+
name: t,
822+
options: [{ type: 'origin', value: op }],
823+
}
824+
};
825+
}
808826
/ a:KW_DROP __
809827
r:KW_INDEX __
810828
i:column_ref __
@@ -1236,8 +1254,14 @@ on_reference
12361254
value: ro
12371255
}
12381256
}
1257+
1258+
view_options
1259+
= kc:('RESTRICT'i / 'CASCADE'i) {
1260+
return kc.toLowerCase()
1261+
}
1262+
12391263
reference_option
1240-
= kc:('RESTRICT'i / 'CASCADE'i / 'SET NULL'i / 'NO ACTION'i / 'SET DEFAULT'i / KW_CURRENT_TIMESTAMP) {
1264+
= kc:(view_options / 'SET NULL'i / 'NO ACTION'i / 'SET DEFAULT'i / KW_CURRENT_TIMESTAMP) {
12411265
return kc.toLowerCase()
12421266
}
12431267

src/command.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ function commonCmdToSQL(stmt) {
2222
case 'procedure':
2323
clauses.push(identifierToSql(name))
2424
break
25+
case 'view':
26+
clauses.push(tablesToSQL(name), stmt.options && stmt.options.map(exprToSQL).filter(hasVal).join(' '))
27+
break
2528
case 'index':
2629
clauses.push(
2730
columnRefToSQL(name),

test/mysql-mariadb.spec.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,13 @@ describe('mysql', () => {
587587
'SHOW CREATE TABLE `debug`'
588588
]
589589
},
590+
{
591+
title: 'drop view stmt',
592+
sql: [
593+
'drop view test_view cascade',
594+
'DROP VIEW `test_view` CASCADE'
595+
]
596+
},
590597
]
591598
SQL_LIST.forEach(sqlInfo => {
592599
const { title, sql } = sqlInfo

0 commit comments

Comments
 (0)