Skip to content

Commit 67a331e

Browse files
committed
fixes #961 - allow unsigned as type
1 parent b55141b commit 67a331e

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,14 +1329,13 @@ String RelObjectNameWithoutValue() :
13291329
| tk=<K_SEPARATOR> | tk=<K_NO> | tk=<K_ACTION> | tk=<K_CASCADE> | tk=<K_END>
13301330
| tk=<K_TABLE> | tk=<K_DATETIMELITERAL> | tk=<K_COMMIT> | tk=<K_PRECISION>
13311331
| tk=<K_INSERT> | tk=<K_INDEX> | tk=<K_PRIMARY> | tk=<K_ENABLE>
1332-
| tk=<K_UNSIGNED>
13331332
| tk=<K_TEMP> | tk=<K_TEMPORARY> | tk=<K_TO> | tk=<K_TYPE> | tk=<K_ISNULL>
13341333
| tk=<K_ZONE> | tk=<K_COLUMNS> | tk=<K_DESCRIBE> | tk=<K_FN> | tk=<K_PATH>
13351334
| tk=<K_DATE_LITERAL> | tk=<K_NEXTVAL> | tk=<K_TRUE> | tk=<K_FALSE> | tk=<K_DUPLICATE>
13361335
| tk=<K_READ> | tk=<K_SCHEMA> | tk=<K_SIZE> | tk=<K_SEQUENCE> | tk=<K_SESSION>
13371336
| tk=<K_VIEW> | tk=<K_NOLOCK> | tk=<K_VALIDATE> | tk=<K_CYCLE> | tk=<K_OF> | tk=<K_EXCLUDE>
13381337
/*| tk=<K_PLACING> | tk=<K_BOTH> | tk=<K_LEADING> | tk=<K_TRAILING> */
1339-
| tk=<K_FORMAT> | tk=<K_DIV>
1338+
| tk=<K_FORMAT> | tk=<K_DIV> | tk=<K_UNSIGNED>
13401339
)
13411340

13421341
{ return tk.image; }
@@ -1349,7 +1348,8 @@ String RelObjectName() :
13491348
{ Token tk = null; String result = null; }
13501349
{
13511350
(result = RelObjectNameWithoutValue()
1352-
| tk=<K_GROUP> | tk=<K_INTERVAL> | tk=<K_ON> | tk=<K_ORDER> | tk=<K_START> | tk=<K_TOP> | tk=<K_VALUE> | tk=<K_VALUES> | tk=<K_CREATE> | tk=<K_TABLES> )
1351+
| tk=<K_GROUP> | tk=<K_INTERVAL> | tk=<K_ON> | tk=<K_ORDER> | tk=<K_START> | tk=<K_TOP> | tk=<K_VALUE>
1352+
| tk=<K_VALUES> | tk=<K_CREATE> | tk=<K_TABLES> )
13531353

13541354
{
13551355
if (tk!=null) result=tk.image;
@@ -4233,7 +4233,8 @@ ColDataType ColDataType():
42334233
| ( tk=<S_IDENTIFIER> | tk=<K_DATETIMELITERAL> | tk=<K_DATE_LITERAL> | tk=<K_XML> | tk=<K_INTERVAL>
42344234
| tk=<DT_ZONE> | tk=<K_CHAR> | tk=<K_SET> | tk=<K_BINARY> | tk=<K_JSON> )
42354235
{ colDataType.setDataType(tk.image); }
4236-
| tk=<K_UNSIGNED> tk2=<S_IDENTIFIER> {colDataType.setDataType(tk.image + " " + tk2.image);}
4236+
| tk=<K_UNSIGNED> [LOOKAHEAD(2) tk2=<S_IDENTIFIER>]
4237+
{ if (tk2!=null) colDataType.setDataType(tk.image + " " + tk2.image); else colDataType.setDataType(tk.image); }
42374238
| LOOKAHEAD(2) tk=<K_SIGNED> tk2=<S_IDENTIFIER> {colDataType.setDataType(tk.image + " " + tk2.image);}
42384239
| tk=<K_SIGNED> { colDataType.setDataType(tk.image);}
42394240
)

src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4378,4 +4378,9 @@ public void testMissingLimitKeywordIssue1006() throws JSQLParserException {
43784378
Statement stmt = CCJSqlParserUtil.parse("SELECT id, name FROM test OFFSET 20 LIMIT 10");
43794379
assertEquals("SELECT id, name FROM test LIMIT 10 OFFSET 20", stmt.toString());
43804380
}
4381+
4382+
@Test
4383+
public void testKeywordUnsignedIssue961() throws JSQLParserException {
4384+
assertSqlCanBeParsedAndDeparsed("SELECT COLUMN1, COLUMN2, CASE WHEN COLUMN1.DATA NOT IN ('1', '3') THEN CASE WHEN CAST(COLUMN2 AS UNSIGNED) IN ('1', '2', '3') THEN 'Q1' ELSE 'Q2' END END AS YEAR FROM TESTTABLE");
4385+
}
43814386
}

0 commit comments

Comments
 (0)