Skip to content

Commit 4263651

Browse files
committed
fixes #247
1 parent 59f7ec2 commit 4263651

File tree

5 files changed

+65
-36
lines changed

5 files changed

+65
-36
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ Also I would like to know about needed examples or documentation stuff.
4242

4343
## Extensions in the latest SNAPSHOT version 0.9.6
4444

45+
* first support for **TABLESPACE** within **CREATE TABLE**
4546
* support for **SELECT UNIQUE**
4647
* first support for date literals like **TIMESTAMP'2004-04-30 04:05:34.56'**
4748
* support for **UPDATE RETURNING**

src/main/java/net/sf/jsqlparser/statement/create/table/Index.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class Index {
3333
private String type;
3434
private List<String> columnsNames;
3535
private String name;
36+
private List<String> idxSpec;
3637

3738
/**
3839
* A list of strings of all the columns regarding this index
@@ -64,8 +65,17 @@ public void setType(String string) {
6465
type = string;
6566
}
6667

68+
public List<String> getIndexSpec() {
69+
return idxSpec;
70+
}
71+
72+
public void setIndexSpec(List<String> idxSpec) {
73+
this.idxSpec = idxSpec;
74+
}
75+
6776
@Override
6877
public String toString() {
69-
return type + (name != null ? " " + name : "") + " " + PlainSelect.getStringList(columnsNames, true, true);
78+
String idxSpecText = PlainSelect.getStringList(idxSpec, false, false);
79+
return type + (name != null ? " " + name : "") + " " + PlainSelect.getStringList(columnsNames, true, true) + (!"".equals(idxSpecText)?" " + idxSpecText:"");
7080
}
7181
}

src/main/java/net/sf/jsqlparser/statement/create/table/NamedConstraint.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
2020
* #L%
2121
*/
22-
/*
22+
/*
2323
* Copyright (C) 2014 JSQLParser.
2424
*
2525
* This library is free software; you can redistribute it and/or
@@ -37,7 +37,6 @@
3737
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
3838
* MA 02110-1301 USA
3939
*/
40-
4140
package net.sf.jsqlparser.statement.create.table;
4241

4342
import net.sf.jsqlparser.statement.select.PlainSelect;
@@ -47,9 +46,11 @@
4746
* @author toben
4847
*/
4948
public class NamedConstraint extends Index {
49+
5050
@Override
51-
public String toString() {
52-
return (getName()!=null?"CONSTRAINT " + getName() + " ":"")
53-
+ getType() + " " + PlainSelect.getStringList(getColumnsNames(), true, true);
54-
}
51+
public String toString() {
52+
String idxSpecText = PlainSelect.getStringList(getIndexSpec(), false, false);
53+
return (getName() != null ? "CONSTRAINT " + getName() + " " : "")
54+
+ getType() + " " + PlainSelect.getStringList(getColumnsNames(), true, true) + (!"".equals(idxSpecText) ? " " + idxSpecText : "");
55+
}
5556
}

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
249249
| <K_TIME_KEY_EXPR : ( "CURRENT_TIMESTAMP" | "CURRENT_TIME" | "CURRENT_DATE" ) ( "()" )?>
250250
| <K_DOUBLE : "DOUBLE">
251251
| <K_PRECISION : "PRECISION">
252+
| <K_TABLESPACE : "TABLESPACE">
252253
}
253254

254255
TOKEN : /* Stuff */
@@ -2561,7 +2562,7 @@ CreateIndex CreateIndex():
25612562
Token columnName;
25622563
Index index = null;
25632564
String name = null;
2564-
String parameter = null;
2565+
List<String> parameter = new ArrayList<String>();
25652566
}
25662567
{
25672568
<K_CREATE>
@@ -2571,7 +2572,7 @@ CreateIndex CreateIndex():
25712572
{
25722573
index = new Index();
25732574
index.setName(name);
2574-
index.setType(parameter);
2575+
index.setType(parameter.isEmpty()?null:parameter.get(0));
25752576
}
25762577

25772578
<K_ON> table=Table()
@@ -2629,7 +2630,8 @@ CreateTable CreateTable():
26292630
List colNames = null;
26302631
Index index = null;
26312632
ForeignKeyIndex fkIndex = null;
2632-
String parameter = null;
2633+
List<String> parameter = new ArrayList<String>();
2634+
List<String> idxSpec = new ArrayList<String>();
26332635
Table fkTable = null;
26342636
Select select = null;
26352637
CheckConstraint checkCs = null;
@@ -2641,7 +2643,7 @@ CreateTable CreateTable():
26412643
/* [ [ (tk=<K_GLOBAL> | tk=<K_LOCAL>) {createOptions.add(tk.image);} ]
26422644
( tk=<K_TEMPORARY> | tk=<K_TEMP> ) {createOptions.add(tk.image);}] */
26432645

2644-
(parameter = CreateParameter() { createOptions.add(parameter); })*
2646+
(parameter = CreateParameter() { createOptions.addAll(parameter); })*
26452647

26462648
<K_TABLE>
26472649
[ <K_IF> <K_NOT> <K_EXISTS> { createTable.setIfNotExists(true); }]
@@ -2655,7 +2657,7 @@ CreateTable CreateTable():
26552657
columnSpecs = new ArrayList();
26562658
}
26572659

2658-
( parameter=CreateParameter() { columnSpecs.add(parameter); } )*
2660+
( parameter=CreateParameter() { columnSpecs.addAll(parameter); } )*
26592661

26602662
{
26612663
coldef = new ColumnDefinition();
@@ -2693,9 +2695,10 @@ CreateTable CreateTable():
26932695
| tk=<K_UNIQUE> [ tk2=<K_KEY> ] {index.setType(tk.image + (tk2!=null?" " + tk2.image:""));}
26942696
)
26952697
colNames=ColumnsNamesList()
2698+
( parameter=CreateParameter() { idxSpec.addAll(parameter); } )*
26962699
{
2697-
26982700
index.setColumnsNames(colNames);
2701+
index.setIndexSpec(idxSpec);
26992702
indexes.add(index);
27002703
}
27012704
)
@@ -2753,7 +2756,7 @@ CreateTable CreateTable():
27532756
columnSpecs = new ArrayList();
27542757
}
27552758

2756-
( parameter=CreateParameter() { columnSpecs.add(parameter); } )*
2759+
( parameter=CreateParameter() { columnSpecs.addAll(parameter); } )*
27572760

27582761
{
27592762
coldef = new ColumnDefinition();
@@ -2768,7 +2771,7 @@ CreateTable CreateTable():
27682771
)*
27692772

27702773
")"
2771-
( parameter=CreateParameter() { tableOptions.add(parameter); } )*
2774+
( parameter=CreateParameter() { tableOptions.addAll(parameter); } )*
27722775
)
27732776
|
27742777
(
@@ -2848,58 +2851,64 @@ AlterView AlterView():
28482851
{ return alterView; }
28492852
}
28502853

2851-
String CreateParameter():
2854+
List<String> CreateParameter():
28522855
{
28532856
String retval = "";
28542857
Token tk = null;
28552858
Token sign = null;
2859+
List<String> param = new ArrayList<String>();
28562860
}
28572861
{
28582862
(
2859-
tk=<S_IDENTIFIER> { retval = tk.image; }
2863+
tk=<S_IDENTIFIER> { param.add(tk.image); }
28602864
|
2861-
tk=<K_NULL> { retval = tk.image; }
2865+
tk=<K_NULL> { param.add(tk.image); }
28622866
|
2863-
tk=<K_NOT> { retval = tk.image; }
2867+
tk=<K_NOT> { param.add(tk.image); }
28642868
|
2865-
tk=<K_PRIMARY> { retval = tk.image; }
2869+
tk=<K_PRIMARY> { param.add(tk.image); }
28662870
|
2867-
tk=<K_FOREIGN> { retval=tk.image; }
2871+
tk=<K_FOREIGN> { param.add(tk.image); }
28682872
|
2869-
tk=<K_REFERENCES> { retval=tk.image; }
2873+
tk=<K_REFERENCES> { param.add(tk.image); }
28702874
|
2871-
tk=<K_KEY> { retval = tk.image; }
2875+
tk=<K_KEY> { param.add(tk.image); }
28722876
|
2873-
tk=<S_CHAR_LITERAL> { retval = tk.image; }
2877+
tk=<S_CHAR_LITERAL> { param.add(tk.image); }
28742878
|
28752879
("+" {retval = "+";} | "-" {retval = "-";})?
28762880
(
28772881
tk=<S_LONG> { retval += tk.image; }
28782882
|
28792883
tk=<S_DOUBLE> { retval += tk.image; }
2880-
)
2884+
)
2885+
{ param.add(retval); }
28812886
|
2882-
tk=<K_ON> { retval = tk.image; }
2887+
tk=<K_ON> { param.add(tk.image); }
28832888
|
2884-
tk=<K_COMMIT> { retval = tk.image; }
2889+
tk=<K_COMMIT> { param.add(tk.image); }
28852890
|
2886-
tk=<K_ROWS> { retval = tk.image; }
2891+
tk=<K_ROWS> { param.add(tk.image); }
28872892
|
2888-
tk=<K_UNIQUE> { retval = tk.image; }
2893+
tk=<K_UNIQUE> { param.add(tk.image); }
28892894
|
2890-
tk=<K_CASCADE> { retval = tk.image; }
2895+
tk=<K_CASCADE> { param.add(tk.image); }
28912896
|
2892-
tk=<K_DELETE> { retval = tk.image; }
2897+
tk=<K_DELETE> { param.add(tk.image); }
28932898
|
2894-
tk=<K_UPDATE> { retval = tk.image; }
2899+
tk=<K_UPDATE> { param.add(tk.image); }
28952900
|
2896-
tk=<K_TIME_KEY_EXPR> { retval = new TimeKeyExpression(tk.image).toString(); }
2901+
tk=<K_TIME_KEY_EXPR> { param.add(new TimeKeyExpression(tk.image).toString()); }
28972902
|
2898-
"=" { retval = "="; }
2903+
"=" { param.add("="); }
28992904
|
2900-
retval=AList()
2905+
<K_USING> <K_INDEX> <K_TABLESPACE> retval=RelObjectName() { param.add("USING"); param.add("INDEX"); param.add("TABLESPACE"); param.add(retval); }
2906+
|
2907+
<K_TABLESPACE> retval=RelObjectName() { param.add("TABLESPACE"); param.add(retval); }
2908+
|
2909+
retval=AList() { param.add(retval); }
29012910
)
2902-
{return retval;}
2911+
{return param;}
29032912
}
29042913

29052914
String AList():

src/test/java/net/sf/jsqlparser/test/create/CreateTableTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,14 @@ public void testCreateTableIssue270_1() throws JSQLParserException {
207207
public void testCreateTempTableIssue293() throws JSQLParserException {
208208
assertSqlCanBeParsedAndDeparsed("CREATE GLOBAL TEMPORARY TABLE T1 (PROCESSID VARCHAR (32))");
209209
}
210+
211+
public void testCreateTableWithTablespaceIssue247() throws JSQLParserException {
212+
assertSqlCanBeParsedAndDeparsed("CREATE TABLE TABLE1 (COLUMN1 VARCHAR2 (15), COLUMN2 VARCHAR2 (15), CONSTRAINT P_PK PRIMARY KEY (COLUMN1) USING INDEX TABLESPACE \"T_INDEX\") TABLESPACE \"T_SPACE\"");
213+
}
214+
215+
public void testCreateTableWithTablespaceIssue247_1() throws JSQLParserException {
216+
assertSqlCanBeParsedAndDeparsed("CREATE TABLE TABLE1 (COLUMN1 VARCHAR2 (15), COLUMN2 VARCHAR2 (15), CONSTRAINT P_PK PRIMARY KEY (COLUMN1) USING INDEX TABLESPACE \"T_INDEX\")");
217+
}
210218

211219
public void testRUBiSCreateList() throws Exception {
212220
BufferedReader in = new BufferedReader(new InputStreamReader(CreateTableTest.class.getResourceAsStream("/RUBiS-create-requests.txt")));

0 commit comments

Comments
 (0)