2
* Copyright 2006 StartNet s.r.o.
4
* Distributed under MIT license
6
package cz.startnet.utils.pgdiff.parsers;
8
import cz.startnet.utils.pgdiff.schema.PgDatabase;
9
import cz.startnet.utils.pgdiff.schema.PgView;
12
* Parses ALTER VIEW statements.
16
public class AlterViewParser {
19
* Creates new instance of AlterViewParser.
21
private AlterViewParser() {
25
* Parses ALTER VIEW statement.
27
* @param database database
28
* @param statement ALTER VIEW statement
30
public static void parse(final PgDatabase database,
31
final String statement) {
32
final Parser parser = new Parser(statement);
33
parser.expect("ALTER", "VIEW");
35
final String viewName = parser.parseIdentifier();
36
final String schemaName = ParserUtils.getSchemaName(viewName, database);
37
final String objectName = ParserUtils.getObjectName(viewName);
39
final PgView view = database.getSchema(schemaName).getView(objectName);
41
while (!parser.expectOptional(";")) {
42
if (parser.expectOptional("ALTER")) {
43
parser.expectOptional("COLUMN");
45
final String columnName =
46
ParserUtils.getObjectName(parser.parseIdentifier());
48
if (parser.expectOptional("SET", "DEFAULT")) {
49
final String expression = parser.getExpression();
50
view.addColumnDefaultValue(columnName, expression);
51
} else if (parser.expectOptional("DROP", "DEFAULT")) {
52
view.removeColumnDefaultValue(columnName);
54
parser.throwUnsupportedCommand();
56
} else if (parser.expectOptional("OWNER", "TO")) {
57
// we do not support OWNER TO so just consume the output
58
parser.getExpression();
60
parser.throwUnsupportedCommand();