Skip to content

Commit 3868cb9

Browse files
committed
feat: support drop type in pg
1 parent cb0535c commit 3868cb9

3 files changed

Lines changed: 38 additions & 0 deletions

File tree

pegjs/postgresql.pegjs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1490,6 +1490,33 @@ drop_stmt
14901490
}
14911491
};
14921492
}
1493+
/ a:KW_DROP __
1494+
r:KW_TYPE __
1495+
ife:if_exists? __
1496+
i:column_ref_list __
1497+
op:('CASCADE'i / 'RESTRICT'i)? {
1498+
/*
1499+
export interface drop_index_stmt_node {
1500+
type: 'drop';
1501+
prefix?: string;
1502+
keyword: string;
1503+
name: column_ref_list;
1504+
options?: 'cascade' | 'restrict';
1505+
}
1506+
=> AstStatement<drop_index_stmt_node>
1507+
*/
1508+
return {
1509+
tableList: Array.from(tableList),
1510+
columnList: columnListTableAlias(columnList),
1511+
ast: {
1512+
type: a.toLowerCase(),
1513+
keyword: r.toLowerCase(),
1514+
prefix: [ife].filter(v => v).join(' '),
1515+
name: i,
1516+
options: op && [{ type: 'origin', value: op }]
1517+
}
1518+
};
1519+
}
14931520
/ a:KW_DROP __
14941521
r:KW_VIEW __
14951522
ife:if_exists? __
@@ -5630,6 +5657,7 @@ KW_DUAL = "DUAL"i
56305657
KW_ADD = "ADD"i !ident_start { return 'ADD'; }
56315658
KW_COLUMN = "COLUMN"i !ident_start { return 'COLUMN'; }
56325659
KW_INDEX = "INDEX"i !ident_start { return 'INDEX'; }
5660+
KW_TYPE = "TYPE"i !ident_start { return 'TYPE'; }
56335661
KW_KEY = "KEY"i !ident_start { return 'KEY'; }
56345662
KW_FULLTEXT = "FULLTEXT"i !ident_start { return 'FULLTEXT'; }
56355663
KW_SPATIAL = "SPATIAL"i !ident_start { return 'SPATIAL'; }

src/command.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ function commonCmdToSQL(stmt) {
3333
case 'index':
3434
clauses.push(columnRefToSQL(name), ...stmt.table ? ['ON', tableToSQL(stmt.table)] : [], stmt.options && stmt.options.map(exprToSQL).filter(hasVal).join(' '))
3535
break
36+
case 'type':
37+
clauses.push(name.map(columnRefToSQL).join(', '), stmt.options && stmt.options.map(exprToSQL).filter(hasVal).join(' '))
38+
break
3639
default:
3740
break
3841
}

test/postgres.spec.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2117,6 +2117,13 @@ describe('Postgres', () => {
21172117
'CREATE TABLE "features" (feature_name TEXT NOT NULL COLLATE pg_catalog."default")'
21182118
]
21192119
},
2120+
{
2121+
title: 'drop type stmt',
2122+
sql: [
2123+
'DROP TYPE IF EXISTS some_type, other_type CASCADE',
2124+
'DROP TYPE IF EXISTS some_type, other_type CASCADE'
2125+
]
2126+
},
21202127
]
21212128
neatlyNestTestedSQL(SQL_LIST)
21222129
})

0 commit comments

Comments
 (0)