9
6
import java.util.regex.Matcher;
10
7
import java.util.regex.Pattern;
14
10
* Parses CREATE SEQUENCE commands.
17
* @version $Id: CreateSequenceParser.java 80 2007-09-01 20:25:45Z fordfrog $
19
14
public class CreateSequenceParser {
21
17
* Pattern for getting sequence name.
23
private static final Pattern PATTERN_SEQUENCE_NAME =
25
"CREATE[\\s]+SEQUENCE[\\s]+\"?([^\\s\"]+)\"?",
26
Pattern.CASE_INSENSITIVE);
19
private static final Pattern PATTERN_SEQUENCE_NAME = Pattern.compile(
20
"CREATE[\\s]+SEQUENCE[\\s]+\"?([^\\s\"]+)\"?",
21
Pattern.CASE_INSENSITIVE);
29
23
* Pattern for getting value of START WITH parameter.
31
private static final Pattern PATTERN_START_WITH =
33
"START[\\s]+(?:WITH[\\s]+)?([-]?[\\d]+)",
34
Pattern.CASE_INSENSITIVE);
25
private static final Pattern PATTERN_START_WITH = Pattern.compile(
26
"START[\\s]+(?:WITH[\\s]+)?([-]?[\\d]+)", Pattern.CASE_INSENSITIVE);
37
28
* Pattern for getting value of INCREMENT BY parameter.
39
private static final Pattern PATTERN_INCREMENT_BY =
41
"INCREMENT[\\s]+(?:BY[\\s]+)?([-]?[\\d]+)",
42
Pattern.CASE_INSENSITIVE);
30
private static final Pattern PATTERN_INCREMENT_BY = Pattern.compile(
31
"INCREMENT[\\s]+(?:BY[\\s]+)?([-]?[\\d]+)",
32
Pattern.CASE_INSENSITIVE);
45
34
* Pattern for getting value of MAXVALUE parameter.
47
private static final Pattern PATTERN_MAXVALUE =
48
Pattern.compile("MAXVALUE[\\s]+([-]?[\\d]+)", Pattern.CASE_INSENSITIVE);
36
private static final Pattern PATTERN_MAXVALUE = Pattern.compile(
37
"MAXVALUE[\\s]+([-]?[\\d]+)", Pattern.CASE_INSENSITIVE);
51
39
* Pattern for getting value of MINVALUE parameter.
53
private static final Pattern PATTERN_MINVALUE =
54
Pattern.compile("MINVALUE[\\s]+([-]?[\\d]+)", Pattern.CASE_INSENSITIVE);
41
private static final Pattern PATTERN_MINVALUE = Pattern.compile(
42
"MINVALUE[\\s]+([-]?[\\d]+)", Pattern.CASE_INSENSITIVE);
57
44
* Pattern for getting value of CACHE parameter.
59
46
private static final Pattern PATTERN_CACHE =
60
Pattern.compile("CACHE[\\s]+([\\d]+)", Pattern.CASE_INSENSITIVE);
47
Pattern.compile("CACHE[\\s]+([\\d]+)", Pattern.CASE_INSENSITIVE);
63
49
* Pattern for checking whether string contains NO CYCLE string.
65
51
private static final Pattern PATTERN_NO_CYCLE =
66
Pattern.compile(".*NO[\\s]+CYCLE.*", Pattern.CASE_INSENSITIVE);
52
Pattern.compile(".*NO[\\s]+CYCLE.*", Pattern.CASE_INSENSITIVE);
69
54
* Pattern for checking whether string contains CYCLE string.
71
56
private static final Pattern PATTERN_CYCLE =
72
Pattern.compile(".*CYCLE.*", Pattern.CASE_INSENSITIVE);
57
Pattern.compile(".*CYCLE.*", Pattern.CASE_INSENSITIVE);
75
59
* Pattern for checking whether string contains NO MAXVALUE string.
77
61
private static final Pattern PATTERN_NO_MAXVALUE =
78
Pattern.compile(".*NO[\\s]+MAXVALUE.*", Pattern.CASE_INSENSITIVE);
62
Pattern.compile(".*NO[\\s]+MAXVALUE.*", Pattern.CASE_INSENSITIVE);
81
64
* Pattern for checking whether string contains NO MINVALUE string.
83
66
private static final Pattern PATTERN_NO_MINVALUE =
84
Pattern.compile(".*NO[\\s]+MINVALUE.*", Pattern.CASE_INSENSITIVE);
67
Pattern.compile(".*NO[\\s]+MINVALUE.*", Pattern.CASE_INSENSITIVE);
87
70
* Creates a new instance of CreateSequenceParser.
107
90
if (matcher.find()) {
108
91
sequenceName = matcher.group(1).trim();
110
ParserUtils.removeSubString(
93
ParserUtils.removeSubString(
115
98
throw new ParserException(
116
99
ParserException.CANNOT_PARSE_COMMAND + line);
119
102
final PgSequence sequence =
120
new PgSequence(ParserUtils.getObjectName(sequenceName));
121
database.getSchema(ParserUtils.getSchemaName(sequenceName, database)).addSequence(
103
new PgSequence(ParserUtils.getObjectName(sequenceName));
104
database.getSchema(ParserUtils.getSchemaName(
105
sequenceName, database)).addSequence(sequence);
123
106
line = ParserUtils.removeLastSemicolon(line);
124
107
line = processMaxValue(sequence, line);
125
108
line = processMinValue(sequence, line);
145
127
* @return command without CACHE instruction
147
private static String processCache(
148
final PgSequence sequence,
149
final String command) {
129
private static String processCache(final PgSequence sequence,
130
final String command) {
150
131
String line = command;
151
132
final Matcher matcher = PATTERN_CACHE.matcher(line);
153
134
if (matcher.find()) {
154
135
sequence.setCache(matcher.group(1).trim());
156
ParserUtils.removeSubString(
136
line = ParserUtils.removeSubString(
137
line, matcher.start(), matcher.end());
195
172
* @return command without INCREMENT BY instruction
197
private static String processIncrement(
198
final PgSequence sequence,
199
final String command) {
174
private static String processIncrement(final PgSequence sequence,
175
final String command) {
200
176
String line = command;
201
177
final Matcher matcher = PATTERN_INCREMENT_BY.matcher(line);
203
179
if (matcher.find()) {
204
180
sequence.setIncrement(matcher.group(1).trim());
206
ParserUtils.removeSubString(
181
line = ParserUtils.removeSubString(
182
line, matcher.start(), matcher.end());
285
250
* @return command without START WITH instruction
287
private static String processStartWith(
288
final PgSequence sequence,
289
final String command) {
252
private static String processStartWith(final PgSequence sequence,
253
final String command) {
290
254
String line = command;
291
255
final Matcher matcher = PATTERN_START_WITH.matcher(line);
293
257
if (matcher.find()) {
294
258
sequence.setStartWith(matcher.group(1).trim());
296
ParserUtils.removeSubString(
259
line = ParserUtils.removeSubString(
260
line, matcher.start(), matcher.end());