diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index d2adb89e44..ce629dbb25 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -1013,6 +1013,16 @@ List RelObjectNameList() : { { return data; } } +List ColumnNameList() : { + String token = null; + List data = new ArrayList(); +} { + token = ColumnName() { data.add(token); } + ( LOOKAHEAD (2) "." ("." { data.add(null); })* token = ColumnName() { data.add(token); } ) * + + { return data; } +} + // See: http://technet.microsoft.com/en-us/library/ms187879%28v=sql.105%29.aspx Column Column() #Column : @@ -1022,7 +1032,7 @@ Column Column() #Column : List data = new ArrayList(); } { - data = RelObjectNameList() + data = ColumnNameList() { Column col = new Column(data); @@ -1070,6 +1080,20 @@ String RelObjectName() : } } +/* +Column names. +*/ +String ColumnName() : +{ Token tk = null; String result = null; } +{ + (result = RelObjectNameWithoutValue() | tk= | tk= | tk= | tk= | tk = "LIMIT") + + { + if (tk!=null) result=tk.image; + return result; + } +} + /* Extended version of object names. */ diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java index 23c06536a5..c5d42e765e 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -1586,6 +1586,20 @@ public void testWeirdSelect() throws JSQLParserException { parserManager.parse(new StringReader(sql)); } + @Test + public void testLimitColumnNameForOracle() throws JSQLParserException { + // 'limit' is not a restricted keyword in Oracle. + String sql = "SELECT limit FROM (SELECT * FROM table2 WHERE col1 = 'val')"; + assertSqlCanBeParsedAndDeparsed(sql); + } + + @Test + public void testLimitColumnInWhereClauseForOracle() throws JSQLParserException { + // 'limit' is not a restricted keyword in Oracle. + String sql = "SELECT * FROM table2 WHERE limit > 200"; + assertSqlCanBeParsedAndDeparsed(sql); + } + @Test public void testCast() throws JSQLParserException { String stmt = "SELECT CAST(a AS varchar) FROM tabelle1";