Skip to content

Commit 01a5fb7

Browse files
refactor: simplify production CreateParameter()
1 parent 9fa0f4b commit 01a5fb7

2 files changed

Lines changed: 61 additions & 103 deletions

File tree

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

Lines changed: 31 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -5339,13 +5339,11 @@ AlterView AlterView():
53395339
List<String> CreateParameter():
53405340
{
53415341
String retval = "";
5342-
Token tk = null;
5343-
Token tk2 = null;
5344-
StringBuilder identifier = new StringBuilder("");
5342+
Token tk = null, tk2 = null;
53455343
Expression exp = null;
5346-
List<String> param = new ArrayList<String>();
53475344
ColDataType colDataType;
5348-
Function function;
5345+
5346+
List<String> param = new ArrayList<String>();
53495347
}
53505348
{
53515349
(
@@ -5357,118 +5355,48 @@ List<String> CreateParameter():
53575355
|
53585356
(
53595357
(tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>)
5360-
{ identifier.append(tk.image); }
5358+
{ retval+=tk.image; }
53615359

53625360
[
53635361
"."
53645362
(tk2=<S_IDENTIFIER> | tk2=<S_QUOTED_IDENTIFIER>)
5365-
{ identifier.append("."); identifier.append(tk2.image); }
5363+
{ retval+="."+tk2.image; }
53665364
]
5367-
{ param.add(identifier.toString()); }
5365+
{ param.add(retval); }
53685366
)
53695367
|
5370-
tk=<K_NULL> { param.add(tk.image); }
5371-
|
5372-
tk=<K_NOT> { param.add(tk.image); }
5373-
|
5374-
tk=<K_PRIMARY> { param.add(tk.image); }
5375-
|
5376-
tk=<K_DEFAULT> { param.add(tk.image); }
5377-
|
5378-
tk=<K_FOREIGN> { param.add(tk.image); }
5379-
|
5380-
tk=<K_REFERENCES> { param.add(tk.image); }
5381-
|
5382-
tk=<K_KEY> { param.add(tk.image); }
5383-
|
5384-
tk=<S_CHAR_LITERAL> { param.add(tk.image); }
5385-
|
5386-
("+" {retval = "+";} | "-" {retval = "-";})?
5387-
(
5388-
tk=<S_LONG> { retval += tk.image; }
5389-
|
5390-
tk=<S_DOUBLE> { retval += tk.image; }
5391-
)
5392-
{ param.add(retval); }
5368+
LOOKAHEAD(3) [<K_USING> <K_INDEX> { param.add("USING INDEX"); }] <K_TABLESPACE> retval=RelObjectName()
5369+
{ param.add("TABLESPACE " + retval); }
53935370
|
5394-
tk=<K_AS> (
5395-
("(" exp = Expression() ")") { param.add("AS"); param.add("(" + exp.toString() + ")");}
5396-
|
5397-
{ param.add(tk.image);}
5371+
(
5372+
tk=<S_CHAR_LITERAL> | tk=<K_NULL> | tk=<K_NOT> | tk=<K_PRIMARY> | tk=<K_FOREIGN>
5373+
| tk=<K_REFERENCES> | tk=<K_KEY> | tk=<K_STORED> | tk=<K_ON> | tk=<K_COMMIT> | tk=<K_DROP>
5374+
| tk=<K_ROWS> | tk=<K_UNIQUE> | tk=<K_CASCADE> | tk=<K_DELETE> | tk=<K_UPDATE>
5375+
| tk=<K_CONSTRAINT> | tk=<K_WITH> | tk=<K_EXCLUDE> | tk=<K_WHERE> | tk=<K_UNSIGNED>
5376+
| tk=<K_TEMP> | tk=<K_TEMPORARY> | tk=<K_PARTITION> | tk=<K_BY> | tk=<K_IN>
5377+
| tk=<K_TYPE> | tk=<K_COMMENT> | tk=<K_USING> | tk=<K_COLLATE> | tk=<K_ASC>
5378+
| tk=<K_DESC> | tk=<K_TRUE> | tk=<K_FALSE> | tk=<K_PARALLEL> | tk=<K_BINARY> | tk=<K_START>
5379+
| tk=<K_TIME_KEY_EXPR>
5380+
| tk="="
53985381
)
5382+
{ param.add(tk.image); }
53995383
|
5400-
tk=<K_STORED> { param.add(tk.image); }
5401-
|
5402-
tk=<K_ON> { param.add(tk.image); }
5403-
|
5404-
tk=<K_COMMIT> { param.add(tk.image); }
5405-
|
5406-
tk=<K_DROP> { param.add(tk.image); }
5407-
|
5408-
tk=<K_ROWS> { param.add(tk.image); }
5409-
|
5410-
tk=<K_UNIQUE> { param.add(tk.image); }
5411-
|
5412-
tk=<K_CASCADE> { param.add(tk.image); }
5413-
|
5414-
tk=<K_DELETE> { param.add(tk.image); }
5415-
|
5416-
tk=<K_UPDATE> { param.add(tk.image); }
5417-
|
5418-
tk=<K_TIME_KEY_EXPR> { param.add(new TimeKeyExpression(tk.image).toString()); }
5419-
|
5420-
"=" { param.add("="); }
5421-
|
5422-
LOOKAHEAD(3) <K_USING> <K_INDEX> <K_TABLESPACE> retval=RelObjectName() { param.add("USING"); param.add("INDEX"); param.add("TABLESPACE"); param.add(retval); }
5384+
( tk=<K_DEFAULT> | tk=<K_AS> | tk=<K_CHECK> ) [ LOOKAHEAD(2) "(" exp = Expression() ")" ]
5385+
{
5386+
param.add(tk.image);
5387+
if (exp!=null) {
5388+
param.add("(" + exp + ")");
5389+
}
5390+
}
54235391
|
5424-
<K_TABLESPACE> retval=RelObjectName() { param.add("TABLESPACE"); param.add(retval); }
5392+
(
5393+
[ ( tk="+" | tk="-" ) { retval = tk.image; } ]
5394+
tk=<S_LONG> | tk=<S_DOUBLE>
5395+
)
5396+
{ param.add( retval + tk.image ); }
54255397
|
54265398
retval=AList() { param.add(retval); }
54275399
|
5428-
<K_CHECK> ("(" exp = Expression() ")") { param.add("CHECK"); param.add("(" + exp.toString() + ")");}
5429-
|
5430-
tk=<K_CONSTRAINT> { param.add(tk.image); }
5431-
|
5432-
tk=<K_WITH> { param.add(tk.image); }
5433-
|
5434-
tk=<K_EXCLUDE> { param.add(tk.image); }
5435-
|
5436-
tk=<K_WHERE> { param.add(tk.image); }
5437-
|
5438-
tk=<K_UNSIGNED> { param.add(tk.image); }
5439-
|
5440-
tk=<K_TEMP> { param.add(tk.image); }
5441-
|
5442-
tk=<K_TEMPORARY> { param.add(tk.image); }
5443-
|
5444-
tk=<K_PARTITION> { param.add(tk.image); }
5445-
|
5446-
tk=<K_BY> { param.add(tk.image); }
5447-
|
5448-
tk=<K_IN> { param.add(tk.image); }
5449-
|
5450-
tk=<K_TYPE> { param.add(tk.image); }
5451-
|
5452-
tk=<K_COMMENT> { param.add(tk.image); }
5453-
|
5454-
tk=<K_USING> { param.add(tk.image); }
5455-
|
5456-
tk=<K_COLLATE> { param.add(tk.image); }
5457-
|
5458-
tk=<K_ASC> { param.add(tk.image); }
5459-
|
5460-
tk=<K_DESC> { param.add(tk.image); }
5461-
|
5462-
tk=<K_TRUE> { param.add(tk.image); }
5463-
|
5464-
tk=<K_FALSE> { param.add(tk.image); }
5465-
|
5466-
tk=<K_PARALLEL> { param.add(tk.image); }
5467-
|
5468-
tk=<K_BINARY> { param.add(tk.image); }
5469-
|
5470-
tk=<K_START> { param.add(tk.image); }
5471-
|
54725400
(tk=<K_CHARACTER> tk2=<K_SET>) { param.add(tk.image); param.add(tk2.image);}
54735401
|
54745402
(<K_ARRAY_LITERAL> exp=ArrayConstructor(true)) { param.add(exp.toString()); }

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,36 @@ void testCreateTableWithNextValueFor() throws JSQLParserException {
986986
+ " actor_id integer DEFAULT nextval('public.actor_actor_id_seq'::regclass) NOT NULL\n"
987987
+ ")";
988988
assertSqlCanBeParsedAndDeparsed(sqlStr, true);
989+
990+
sqlStr =
991+
" CREATE TABLE myschema.tableName (\n"
992+
+ " id bigint NOT NULL DEFAULT nextval('myschema.mysequence'::regclass), \n"
993+
+ " bool_col boolean NOT NULL DEFAULT false, \n"
994+
+ " int_col integer NOT NULL DEFAULT 0)";
995+
assertSqlCanBeParsedAndDeparsed(sqlStr, true);
996+
997+
sqlStr =
998+
" CREATE TABLE t1 (\n"
999+
+ " -- literal defaults\n"
1000+
+ " i INT DEFAULT 0,\n"
1001+
+ " c VARCHAR(10) DEFAULT '',\n"
1002+
+ " -- expression defaults\n"
1003+
+ " f FLOAT DEFAULT (RAND() * RAND()),\n"
1004+
+ " b BINARY(16) DEFAULT (UUID_TO_BIN(UUID())),\n"
1005+
+ " d DATE DEFAULT (CURRENT_DATE + INTERVAL 1 YEAR),\n"
1006+
+ " p POINT DEFAULT (Point(0,0)),\n"
1007+
+ " j JSON DEFAULT (JSON_ARRAY())\n"
1008+
+ ")";
1009+
assertSqlCanBeParsedAndDeparsed(sqlStr, true);
1010+
1011+
sqlStr =
1012+
" CREATE TABLE pagila_dev.actor (\n"
1013+
+ "actor_id integer DEFAULT nextval('pagila_dev.actor_actor_id_seq'::regclass) NOT NULL,\n"
1014+
+ "first_name text NOT NULL,\n"
1015+
+ "last_name text NOT NULL,\n"
1016+
+ "last_update timestamp with time zone DEFAULT now() NOT NULL\n"
1017+
+ ")";
1018+
assertSqlCanBeParsedAndDeparsed(sqlStr, true);
9891019
}
9901020

9911021
}

0 commit comments

Comments
 (0)