@@ -33,7 +33,6 @@ options{
33
33
JDK_VERSION = "1.7";
34
34
TOKEN_EXTENDS ="BaseToken";
35
35
COMMON_TOKEN_ACTION=true;
36
- LEGACY_EXCEPTION_HANDLING = false;
37
36
}
38
37
39
38
PARSER_BEGIN(CCJSqlParser)
@@ -1708,10 +1707,22 @@ OrderByElement OrderByElement():
1708
1707
}
1709
1708
}
1710
1709
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
+
1711
1721
Limit LimitWithOffset() #LimitWithOffset:
1712
1722
{
1713
1723
Limit limit = new Limit();
1714
1724
Token token = null;
1725
+ JdbcParameter jdbc = null;
1715
1726
}
1716
1727
{
1717
1728
(
@@ -1721,7 +1732,7 @@ Limit LimitWithOffset() #LimitWithOffset:
1721
1732
(
1722
1733
token=<S_LONG> { limit.setOffset(new LongValue(token.image)); }
1723
1734
|
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); }
1725
1736
|
1726
1737
":" { limit.setOffset(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getOffset()).setName(token.image); } ]
1727
1738
@@ -1731,7 +1742,7 @@ Limit LimitWithOffset() #LimitWithOffset:
1731
1742
(
1732
1743
token=<S_LONG> { limit.setRowCount(new LongValue(token.image)); }
1733
1744
|
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); }
1735
1746
|
1736
1747
":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getRowCount()).setName(token.image); } ]
1737
1748
)
@@ -1748,14 +1759,15 @@ Limit PlainLimit() #PlainLimit:
1748
1759
{
1749
1760
Limit limit = new Limit();
1750
1761
Token token = null;
1762
+ JdbcParameter jdbc;
1751
1763
}
1752
1764
{
1753
1765
// mysql-postgresql-> LIMIT (row_count | ALL | NULL)
1754
1766
<K_LIMIT>
1755
1767
(
1756
1768
token=<S_LONG> { limit.setRowCount(new LongValue(token.image)); }
1757
1769
|
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); }
1759
1771
|
1760
1772
":" { limit.setRowCount(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)limit.getRowCount()).setName(token.image); } ]
1761
1773
|
@@ -1773,14 +1785,15 @@ Offset Offset():
1773
1785
{
1774
1786
Offset offset = new Offset();
1775
1787
Token token = null;
1788
+ JdbcParameter jdbc;
1776
1789
}
1777
1790
{
1778
1791
(
1779
1792
// postgresql-> OFFSET offset
1780
1793
// sqlserver-oracle-> OFFSET offset (ROW | ROWS)
1781
1794
<K_OFFSET>
1782
1795
(token=<S_LONG> { offset.setOffset(Long.parseLong(token.image)); }
1783
- | "?" { offset.setOffsetJdbcParameter(true ); } )
1796
+ | jdbc = SimpleJdbcParameter() { offset.setOffsetJdbcParameter(jdbc ); } )
1784
1797
[(<K_ROWS> { offset.setOffsetParam("ROWS"); } | <K_ROW> { offset.setOffsetParam("ROW"); })]
1785
1798
1786
1799
)
@@ -1793,14 +1806,15 @@ Fetch Fetch():
1793
1806
{
1794
1807
Fetch fetch = new Fetch();
1795
1808
Token token = null;
1809
+ JdbcParameter jdbc;
1796
1810
}
1797
1811
{
1798
1812
(
1799
1813
// sqlserver-oracle-> FETCH (FIRST | NEXT) row_count (ROW | ROWS) ONLY
1800
1814
<K_FETCH>
1801
1815
(<K_FIRST> { fetch.setFetchParamFirst(true); } | <K_NEXT>)
1802
1816
(token=<S_LONG> { fetch.setRowCount(Long.parseLong(token.image)); }
1803
- | "?" { fetch.setFetchJdbcParameter(true); } )
1817
+ | jdbc = SimpleJdbcParameter() { fetch.setFetchJdbcParameter(jdbc); } ) /* "?" { fetch.setFetchJdbcParameter(true); } ) */
1804
1818
(<K_ROWS> { fetch.setFetchParam("ROWS"); } | <K_ROW>)
1805
1819
<K_ONLY>
1806
1820
@@ -1816,13 +1830,15 @@ Top Top():
1816
1830
Top top = new Top();
1817
1831
Token token = null;
1818
1832
Expression expr = null;
1833
+ JdbcParameter jdbc = null;
1819
1834
}
1820
1835
{
1821
1836
<K_TOP>
1822
1837
(
1823
1838
token=<S_LONG> { top.setExpression(new LongValue(token.image)); }
1824
1839
|
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)); } ]*/
1826
1842
|
1827
1843
":" { top.setExpression(new JdbcNamedParameter()); } [ LOOKAHEAD(2) token = <S_IDENTIFIER> { ((JdbcNamedParameter)top.getExpression()).setName(token.image); } ]
1828
1844
|
@@ -1841,13 +1857,15 @@ Skip Skip():
1841
1857
{
1842
1858
Skip skip = new Skip();
1843
1859
Token token = null;
1860
+ JdbcParameter jdbc;
1844
1861
}
1845
1862
{
1846
1863
<K_SKIP>
1847
1864
(
1848
1865
token=<S_LONG> { skip.setRowCount(Long.parseLong(token.image)); }
1849
1866
| 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)); } ] */
1851
1869
)
1852
1870
{
1853
1871
return skip;
@@ -1875,6 +1893,7 @@ First First():
1875
1893
{
1876
1894
First first = new First();
1877
1895
Token token = null;
1896
+ JdbcParameter jdbc;
1878
1897
}
1879
1898
{
1880
1899
( <K_FIRST> { first.setKeyword(First.Keyword.FIRST); }
@@ -1883,7 +1902,8 @@ First First():
1883
1902
(
1884
1903
token=<S_LONG> { first.setRowCount(Long.parseLong(token.image)); }
1885
1904
| 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)); } ] */
1887
1907
)
1888
1908
{
1889
1909
return first;
@@ -2400,14 +2420,13 @@ Expression PrimaryExpression() #PrimaryExpression:
2400
2420
ColDataType type = null;
2401
2421
}
2402
2422
{
2403
- [sign="+" | sign="-"]
2423
+ [sign="+" | sign="-" | sign="~" ]
2404
2424
(
2405
2425
<K_NULL> { retval = new NullValue(); }
2406
2426
2407
2427
| retval=CaseWhenExpression()
2408
2428
2409
- | "?" { retval = new JdbcParameter(++jdbcParameterIndex, false); }
2410
- [ token = <S_LONG> { ((JdbcParameter)retval).setUseFixedIndex(true); ((JdbcParameter)retval).setIndex(Integer.valueOf(token.image)); } ]
2429
+ | retval = SimpleJdbcParameter()
2411
2430
2412
2431
| LOOKAHEAD(2) retval=JdbcNamedParameter()
2413
2432
@@ -3293,6 +3312,8 @@ Drop Drop():
3293
3312
tk=<K_TABLE>
3294
3313
|
3295
3314
tk=<K_INDEX>
3315
+ |
3316
+ tk=<K_VIEW>
3296
3317
)
3297
3318
{ drop.setType(tk.image); }
3298
3319
0 commit comments