2
* Copyright 2006 StartNet s.r.o.
4
* Distributed under MIT license
1
6
package cz.startnet.utils.pgdiff.parsers;
3
8
import cz.startnet.utils.pgdiff.schema.PgDatabase;
4
9
import cz.startnet.utils.pgdiff.schema.PgSchema;
5
10
import cz.startnet.utils.pgdiff.schema.PgView;
7
import java.util.regex.Matcher;
8
import java.util.regex.Pattern;
11
import java.util.ArrayList;
12
import java.util.List;
11
* Parses CREATE VIEW commands.
15
* Parses CREATE VIEW statements.
15
19
public class CreateViewParser {
18
* Pattern for parsing CREATE VIEW definition.
20
private static final Pattern PATTERN = Pattern.compile(
21
"CREATE[\\s]+(?:OR[\\s]+REPLACE[\\s]+)?VIEW[\\s]+"
22
+ "\"?([^\\s\"]+)\"?[\\s]+(?:\\(([^)]+)\\)[\\s]+)?"
23
+ "AS[\\s]+(.+)?(?:;)", Pattern.CASE_INSENSITIVE);
26
22
* Creates a new instance of CreateViewParser.
28
24
private CreateViewParser() {
33
* Parses CREATE VIEW command.
28
* Parses CREATE VIEW statement.
35
30
* @param database database
36
* @param command CREATE VIEW command
38
* @throws ParserException Thrown if problem occured while parsing the
31
* @param statement CREATE VIEW statement
41
public static void parse(final PgDatabase database, final String command) {
42
final Matcher matcher = PATTERN.matcher(command.trim());
44
if (matcher.matches()) {
45
final String viewName = matcher.group(1);
46
final String columnNames = matcher.group(2);
47
final String query = matcher.group(3);
49
if ((viewName == null) || (query == null)) {
50
throw new ParserException(
51
ParserException.CANNOT_PARSE_COMMAND + command);
33
public static void parse(final PgDatabase database,
34
final String statement) {
35
final Parser parser = new Parser(statement);
36
parser.expect("CREATE");
37
parser.expectOptional("OR", "REPLACE");
38
parser.expect("VIEW");
40
final String viewName = parser.parseIdentifier();
42
final boolean columnsExist = parser.expectOptional("(");
43
final List<String> columnNames = new ArrayList<String>(10);
46
while (!parser.expectOptional(")")) {
48
ParserUtils.getObjectName(parser.parseIdentifier()));
49
parser.expectOptional(",");
54
final PgView view = new PgView(ParserUtils.getObjectName(viewName));
55
view.setColumnNames(columnNames);
58
final PgSchema schema =
60
ParserUtils.getSchemaName(viewName, database));
63
throw new ParserException(
64
ParserException.CANNOT_PARSE_COMMAND + command);
55
final String query = parser.getRest();
57
final PgView view = new PgView(ParserUtils.getObjectName(viewName));
58
view.setColumnNames(columnNames);
61
final PgSchema schema = database.getSchema(
62
ParserUtils.getSchemaName(viewName, database));