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
29
* @param outputIgnoredStatements whether ignored statements should be
32
public static void parse(final PgDatabase database,
33
final String statement, final boolean outputIgnoredStatements) {
34
final Parser parser = new Parser(statement);
35
parser.expect("ALTER", "VIEW");
37
final String viewName = parser.parseIdentifier();
38
final String schemaName = ParserUtils.getSchemaName(viewName, database);
39
final String objectName = ParserUtils.getObjectName(viewName);
41
final PgView view = database.getSchema(schemaName).getView(objectName);
43
while (!parser.expectOptional(";")) {
44
if (parser.expectOptional("ALTER")) {
45
parser.expectOptional("COLUMN");
47
final String columnName =
48
ParserUtils.getObjectName(parser.parseIdentifier());
50
if (parser.expectOptional("SET", "DEFAULT")) {
51
final String expression = parser.getExpression();
52
view.addColumnDefaultValue(columnName, expression);
53
} else if (parser.expectOptional("DROP", "DEFAULT")) {
54
view.removeColumnDefaultValue(columnName);
56
parser.throwUnsupportedCommand();
58
} else if (parser.expectOptional("OWNER", "TO")) {
59
// we do not parse this one so we just consume the identifier
60
if (outputIgnoredStatements) {
61
database.addIgnoredStatement("ALTER TABLE " + viewName
62
+ " OWNER TO " + parser.parseIdentifier() + ';');
64
parser.parseIdentifier();
67
parser.throwUnsupportedCommand();