2
* $Id: CreateIndexParser.java 93 2008-08-03 12:31:08Z fordfrog $
4
package cz.startnet.utils.pgdiff.parsers;
6
import cz.startnet.utils.pgdiff.schema.PgDatabase;
7
import cz.startnet.utils.pgdiff.schema.PgIndex;
8
import cz.startnet.utils.pgdiff.schema.PgTable;
10
import java.util.regex.Matcher;
11
import java.util.regex.Pattern;
14
* Parses CREATE INDEX commands.
17
* @version $Id: CreateIndexParser.java 93 2008-08-03 12:31:08Z fordfrog $
19
public class CreateIndexParser {
22
* Pattern for parsing CREATE INDEX definition.
24
private static final Pattern PATTERN =
26
"CREATE[\\s](UNIQUE[\\s]+)?+INDEX[\\s]+\"?([^\\s\"]+)\"?[\\s]+" +
27
"ON[\\s]+\"?([^\\s\"(]+)\"?[\\s]*([^;]+)[;]?",
28
Pattern.CASE_INSENSITIVE);
31
* Creates a new instance of CreateIndexParser.
33
private CreateIndexParser() {
38
* Parses CREATE INDEX command.
40
* @param database database
41
* @param command CREATE INDEX command
43
* @throws ParserException Thrown if problem occured while parsing the
46
public static void parse(final PgDatabase database, final String command) {
47
final Matcher matcher = PATTERN.matcher(command.trim());
49
if (matcher.matches()) {
50
final boolean unique = matcher.group(1) != null;
51
final String indexName = matcher.group(2);
52
final String tableName = matcher.group(3);
53
final String def = matcher.group(4);
55
if ((indexName == null) || (tableName == null) || (def == null)) {
56
throw new ParserException(
57
ParserException.CANNOT_PARSE_COMMAND + command);
62
ParserUtils.getSchemaName(tableName.trim(), database)).getTable(
64
final PgIndex index = new PgIndex(indexName);
65
table.addIndex(index);
66
index.setDefinition(def.trim());
67
index.setTableName(table.getName());
68
index.setUnique(unique);
70
throw new ParserException(
71
ParserException.CANNOT_PARSE_COMMAND + command);