File tree Expand file tree Collapse file tree 5 files changed +27
-9
lines changed
javacc/net/sf/jsqlparser/parser
test/java/net/sf/jsqlparser/test/create Expand file tree Collapse file tree 5 files changed +27
-9
lines changed Original file line number Diff line number Diff line change 298
298
<project .build.sourceEncoding>UTF-8</project .build.sourceEncoding>
299
299
</properties >
300
300
301
- <description >
302
- JSqlParser parses an SQL statement and translate it into a hierarchy of Java classes.
303
- The generated hierarchy can be navigated using the Visitor Pattern.
304
- </description >
301
+ <description >JSqlParser parses an SQL statement and translate it into a hierarchy of Java classes.
302
+ The generated hierarchy can be navigated using the Visitor Pattern.</description >
305
303
</project >
Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ public class CreateTable implements Statement {
42
42
private List <ColumnDefinition > columnDefinitions ;
43
43
private List <Index > indexes ;
44
44
private Select select ;
45
+ private boolean ifNotExists = false ;
45
46
46
47
@ Override
47
48
public void accept (StatementVisitor statementVisitor ) {
@@ -121,14 +122,22 @@ public void setSelect(Select select) {
121
122
this .select = select ;
122
123
}
123
124
125
+ public boolean isIfNotExists () {
126
+ return ifNotExists ;
127
+ }
128
+
129
+ public void setIfNotExists (boolean ifNotExists ) {
130
+ this .ifNotExists = ifNotExists ;
131
+ }
132
+
124
133
@ Override
125
134
public String toString () {
126
135
String sql = "" ;
127
136
String createOps = PlainSelect .getStringList (createOptionsStrings , false , false );
128
137
129
138
sql = "CREATE " + (unlogged ? "UNLOGGED " : "" ) +
130
139
(!"" .equals (createOps )?createOps + " " :"" ) +
131
- "TABLE " + table ;
140
+ "TABLE " + ( ifNotExists ? "IF NOT EXISTS " : "" ) + table ;
132
141
133
142
if (select != null ) {
134
143
sql += " AS " + select .toString ();
Original file line number Diff line number Diff line change @@ -53,7 +53,11 @@ public void deParse(CreateTable createTable) {
53
53
buffer .append (params ).append (' ' );
54
54
}
55
55
56
- buffer .append ("TABLE " ).append (createTable .getTable ().getFullyQualifiedName ());
56
+ buffer .append ("TABLE " );
57
+ if (createTable .isIfNotExists ()) {
58
+ buffer .append ("IF NOT EXISTS " );
59
+ }
60
+ buffer .append (createTable .getTable ().getFullyQualifiedName ());
57
61
if (createTable .getSelect () != null ) {
58
62
buffer .append (" AS " ).append (createTable .getSelect ().toString ());
59
63
} else {
@@ -87,7 +91,7 @@ public void deParse(CreateTable createTable) {
87
91
buffer .append (")" );
88
92
}
89
93
}
90
-
94
+
91
95
params = PlainSelect .getStringList (createTable .getTableOptionsStrings (), false , false );
92
96
if (!"" .equals (params )) {
93
97
buffer .append (' ' ).append (params );
Original file line number Diff line number Diff line change @@ -207,6 +207,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
207
207
| <K_COMMIT:"COMMIT">
208
208
| <K_UNIQUE:"UNIQUE">
209
209
| <K_WITHIN:"WITHIN">
210
+ | <K_IF:"IF">
210
211
}
211
212
212
213
TOKEN : /* Numeric Constants */
@@ -2152,7 +2153,9 @@ CreateTable CreateTable():
2152
2153
[ <K_UNLOGGED> { createTable.setUnlogged(true); } ]
2153
2154
(parameter = CreateParameter() { createOptions.add(parameter); })*
2154
2155
2155
- <K_TABLE> table=Table()
2156
+ <K_TABLE>
2157
+ [ <K_IF> <K_NOT> <K_EXISTS> { createTable.setIfNotExists(true); }]
2158
+ table=Table()
2156
2159
[
2157
2160
("("
2158
2161
(columnName=<S_IDENTIFIER>
@@ -2344,7 +2347,7 @@ String CreateParameter():
2344
2347
tk=<K_NOT> { retval = tk.image; }
2345
2348
|
2346
2349
tk=<K_PRIMARY> { retval = tk.image; }
2347
- |
2350
+ |
2348
2351
tk=<K_KEY> { retval = tk.image; }
2349
2352
|
2350
2353
tk=<S_CHAR_LITERAL> { retval = tk.image; }
Original file line number Diff line number Diff line change @@ -107,6 +107,10 @@ public void testCreateTableDefault() throws JSQLParserException {
107
107
public void testCreateTableDefault2 () throws JSQLParserException {
108
108
assertSqlCanBeParsedAndDeparsed ("CREATE TABLE T1 (id integer default 1)" );
109
109
}
110
+
111
+ public void testCreateTableIfNotExists () throws JSQLParserException {
112
+ assertSqlCanBeParsedAndDeparsed ("CREATE TABLE IF NOT EXISTS animals (id INT NOT NULL)" );
113
+ }
110
114
111
115
public void testRUBiSCreateList () throws Exception {
112
116
BufferedReader in = new BufferedReader (new InputStreamReader (CreateTableTest .class .getResourceAsStream ("/RUBiS-create-requests.txt" )));
You can’t perform that action at this time.
0 commit comments