@@ -33,7 +33,6 @@ options{
3333 JDK_VERSION = "1.7";
3434 TOKEN_EXTENDS ="BaseToken";
3535 COMMON_TOKEN_ACTION=true;
36- LEGACY_EXCEPTION_HANDLING = false;
3736}
3837
3938PARSER_BEGIN(CCJSqlParser)
@@ -1708,10 +1707,22 @@ OrderByElement OrderByElement():
17081707 }
17091708}
17101709
1710+ JdbcParameter SimpleJdbcParameter() : {
1711+ JdbcParameter retval;
1712+ }
1713+ {
1714+ "?" { retval = new JdbcParameter(++jdbcParameterIndex, false); }
1715+ [ LOOKAHEAD(2) token = <S_LONG> { retval.setUseFixedIndex(true); retval.setIndex(Integer.valueOf(token.image)); } ]
1716+ {
1717+ return retval;
1718+ }
1719+ }
1720+
17111721Limit LimitWithOffset() #LimitWithOffset:
17121722{
17131723 Limit limit = new Limit();
17141724 Token token = null;
1725+ JdbcParameter jdbc = null;
17151726}
17161727{
17171728 (
@@ -1721,7 +1732,7 @@ Limit LimitWithOffset() #LimitWithOffset:
17211732 (
17221733 token=<S_LONG> { limit.setOffset(new LongValue(token.image)); }
17231734 |
1724- "?" { limit.setOffset(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { ((JdbcParameter) limit.getOffset()).setUseFixedIndex(true); ((JdbcParameter)limit.getOffset()).setIndex(Integer.valueOf(token.image)); } ]
1735+ jdbc = SimpleJdbcParameter() { limit.setOffset(jdbc); }
17251736 |
17261737 ":" { limit.setOffset(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getOffset()).setName(token.image); } ]
17271738
@@ -1731,7 +1742,7 @@ Limit LimitWithOffset() #LimitWithOffset:
17311742 (
17321743 token=<S_LONG> { limit.setRowCount(new LongValue(token.image)); }
17331744 |
1734- "?" { limit.setRowCount(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { ((JdbcParameter) limit.getRowCount()).setUseFixedIndex(true); ((JdbcParameter)limit.getRowCount()).setIndex(Integer.valueOf(token.image)); } ]
1745+ jdbc = SimpleJdbcParameter() { limit.setRowCount(jdbc); }
17351746 |
17361747 ":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getRowCount()).setName(token.image); } ]
17371748 )
@@ -1748,14 +1759,15 @@ Limit PlainLimit() #PlainLimit:
17481759{
17491760 Limit limit = new Limit();
17501761 Token token = null;
1762+ JdbcParameter jdbc;
17511763}
17521764{
17531765 // mysql-postgresql-> LIMIT (row_count | ALL | NULL)
17541766 <K_LIMIT>
17551767 (
17561768 token=<S_LONG> { limit.setRowCount(new LongValue(token.image)); }
17571769 |
1758- "?" { limit.setRowCount(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { ((JdbcParameter) limit.getRowCount()).setUseFixedIndex(true); ((JdbcParameter)limit.getRowCount()).setIndex(Integer.valueOf(token.image)); } ]
1770+ jdbc = SimpleJdbcParameter() { limit.setRowCount(jdbc); }
17591771 |
17601772 ":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getRowCount()).setName(token.image); } ]
17611773 |
@@ -1773,14 +1785,15 @@ Offset Offset():
17731785{
17741786 Offset offset = new Offset();
17751787 Token token = null;
1788+ JdbcParameter jdbc;
17761789}
17771790{
17781791 (
17791792 // postgresql-> OFFSET offset
17801793 // sqlserver-oracle-> OFFSET offset (ROW | ROWS)
17811794 <K_OFFSET>
17821795 (token=<S_LONG> { offset.setOffset(Long.parseLong(token.image)); }
1783- | "?" { offset.setOffsetJdbcParameter(true ); } )
1796+ | jdbc = SimpleJdbcParameter() { offset.setOffsetJdbcParameter(jdbc ); } )
17841797 [(<K_ROWS> { offset.setOffsetParam("ROWS"); } | <K_ROW> { offset.setOffsetParam("ROW"); })]
17851798
17861799 )
@@ -1793,14 +1806,15 @@ Fetch Fetch():
17931806{
17941807 Fetch fetch = new Fetch();
17951808 Token token = null;
1809+ JdbcParameter jdbc;
17961810}
17971811{
17981812 (
17991813 // sqlserver-oracle-> FETCH (FIRST | NEXT) row_count (ROW | ROWS) ONLY
18001814 <K_FETCH>
18011815 (<K_FIRST> { fetch.setFetchParamFirst(true); } | <K_NEXT>)
18021816 (token=<S_LONG> { fetch.setRowCount(Long.parseLong(token.image)); }
1803- | "?" { fetch.setFetchJdbcParameter(true); } )
1817+ | jdbc = SimpleJdbcParameter() { fetch.setFetchJdbcParameter(jdbc); } ) /* "?" { fetch.setFetchJdbcParameter(true); } ) */
18041818 (<K_ROWS> { fetch.setFetchParam("ROWS"); } | <K_ROW>)
18051819 <K_ONLY>
18061820
@@ -1816,13 +1830,15 @@ Top Top():
18161830 Top top = new Top();
18171831 Token token = null;
18181832 Expression expr = null;
1833+ JdbcParameter jdbc = null;
18191834}
18201835{
18211836 <K_TOP>
18221837 (
18231838 token=<S_LONG> { top.setExpression(new LongValue(token.image)); }
18241839 |
1825- "?" { top.setExpression(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { ((JdbcParameter)(top.getExpression())).setUseFixedIndex(true); ((JdbcParameter)(top.getExpression())).setIndex(Integer.valueOf(token.image)); } ]
1840+ jdbc = SimpleJdbcParameter() { top.setExpression(jdbc); }
1841+ /*"?" { top.setExpression(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { ((JdbcParameter)(top.getExpression())).setUseFixedIndex(true); ((JdbcParameter)(top.getExpression())).setIndex(Integer.valueOf(token.image)); } ]*/
18261842 |
18271843 ":" { top.setExpression(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)top.getExpression()).setName(token.image); } ]
18281844 |
@@ -1841,13 +1857,15 @@ Skip Skip():
18411857{
18421858 Skip skip = new Skip();
18431859 Token token = null;
1860+ JdbcParameter jdbc;
18441861}
18451862{
18461863 <K_SKIP>
18471864 (
18481865 token=<S_LONG> { skip.setRowCount(Long.parseLong(token.image)); }
18491866 | token=<S_IDENTIFIER> { skip.setVariable(token.image); }
1850- | "?" { skip.setJdbcParameter(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { skip.getJdbcParameter().setUseFixedIndex(true); skip.getJdbcParameter().setIndex(Integer.valueOf(token.image)); } ]
1867+ | jdbc = SimpleJdbcParameter() { skip.setJdbcParameter(jdbc); }
1868+ /* "?" { skip.setJdbcParameter(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { skip.getJdbcParameter().setUseFixedIndex(true); skip.getJdbcParameter().setIndex(Integer.valueOf(token.image)); } ] */
18511869 )
18521870 {
18531871 return skip;
@@ -1875,6 +1893,7 @@ First First():
18751893{
18761894 First first = new First();
18771895 Token token = null;
1896+ JdbcParameter jdbc;
18781897}
18791898{
18801899 ( <K_FIRST> { first.setKeyword(First.Keyword.FIRST); }
@@ -1883,7 +1902,8 @@ First First():
18831902 (
18841903 token=<S_LONG> { first.setRowCount(Long.parseLong(token.image)); }
18851904 | token=<S_IDENTIFIER> { first.setVariable(token.image); }
1886- | "?" { first.setJdbcParameter(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { first.getJdbcParameter().setUseFixedIndex(true); first.getJdbcParameter().setIndex(Integer.valueOf(token.image)); } ]
1905+ | jdbc = SimpleJdbcParameter() { first.setJdbcParameter(jdbc); }
1906+ /* "?" { first.setJdbcParameter(new JdbcParameter(++jdbcParameterIndex, false)); } [ LOOKAHEAD(2) token = <S_LONG> { first.getJdbcParameter().setUseFixedIndex(true); first.getJdbcParameter().setIndex(Integer.valueOf(token.image)); } ] */
18871907 )
18881908 {
18891909 return first;
@@ -2400,14 +2420,13 @@ Expression PrimaryExpression() #PrimaryExpression:
24002420 ColDataType type = null;
24012421}
24022422{
2403- [sign="+" | sign="-"]
2423+ [sign="+" | sign="-" | sign="~" ]
24042424(
24052425 <K_NULL> { retval = new NullValue(); }
24062426
24072427 | retval=CaseWhenExpression()
24082428
2409- | "?" { retval = new JdbcParameter(++jdbcParameterIndex, false); }
2410- [ token = <S_LONG> { ((JdbcParameter)retval).setUseFixedIndex(true); ((JdbcParameter)retval).setIndex(Integer.valueOf(token.image)); } ]
2429+ | retval = SimpleJdbcParameter()
24112430
24122431 | LOOKAHEAD(2) retval=JdbcNamedParameter()
24132432
@@ -3293,6 +3312,8 @@ Drop Drop():
32933312 tk=<K_TABLE>
32943313 |
32953314 tk=<K_INDEX>
3315+ |
3316+ tk=<K_VIEW>
32963317 )
32973318 { drop.setType(tk.image); }
32983319
0 commit comments