File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+
9861010reference_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
Original file line number Diff line number Diff 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+
12391263reference_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
Original file line number Diff line number Diff 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 ) ,
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments