2
* $Id: CreateViewParser.java 84 2007-09-09 16:18:16Z fordfrog $
4
package cz.startnet.utils.pgdiff.parsers;
6
import cz.startnet.utils.pgdiff.schema.PgDatabase;
7
import cz.startnet.utils.pgdiff.schema.PgSchema;
8
import cz.startnet.utils.pgdiff.schema.PgView;
10
import java.util.regex.Matcher;
11
import java.util.regex.Pattern;
15
* Parses CREATE VIEW commands.
18
* @version $Id: CreateViewParser.java 84 2007-09-09 16:18:16Z fordfrog $
20
public class CreateViewParser {
22
* Pattern for parsing CREATE VIEW definition.
24
private static final Pattern PATTERN =
26
"CREATE[\\s]+(?:OR[\\s]+REPLACE[\\s+])?VIEW[\\s]+"
27
+ "\"?([^\\s\"]+)\"?[\\s]+(?:\\(([^)]+)\\)[\\s]+)?"
28
+ "AS[\\s]+([^;]+)[;]?",
29
Pattern.CASE_INSENSITIVE);
32
* Creates a new instance of CreateViewParser.
34
private CreateViewParser() {
39
* Parses CREATE VIEW command.
41
* @param database database
42
* @param command CREATE VIEW command
44
* @throws ParserException Thrown if problem occured while parsing the
47
public static void parse(final PgDatabase database, final String command) {
48
final Matcher matcher = PATTERN.matcher(command.trim());
50
if (matcher.matches()) {
51
final String viewName = matcher.group(1);
52
final String columnNames = matcher.group(2);
53
final String query = matcher.group(3);
55
if ((viewName == null) || (query == null)) {
56
throw new ParserException(
57
ParserException.CANNOT_PARSE_COMMAND + command);
60
final PgView view = new PgView(ParserUtils.getObjectName(viewName));
61
view.setColumnNames(columnNames);
64
final PgSchema schema =
66
ParserUtils.getSchemaName(viewName, database));
69
throw new ParserException(
70
ParserException.CANNOT_PARSE_COMMAND + command);