Skip to content

Commit 5e2aac8

Browse files
committed
Merge origin/master
2 parents dec98ca + 0e571d1 commit 5e2aac8

File tree

9 files changed

+103
-38
lines changed

9 files changed

+103
-38
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,17 @@ To help JSqlParsers development you are encouraged to provide
3636
* pull requests for new features
3737
* improvement requests
3838
* fund new features
39+
* a little donation
40+
41+
**Please write in english, since it's the language most of the dev team knows.**
3942

4043
Also I would like to know about needed examples or documentation stuff.
4144

4245
## Extensions in the latest SNAPSHOT version 1.2
4346

47+
* support for bitwise not **~**
48+
* support for **drop view**
49+
* support for indexed JDBC parameters at multiple places
4450
* allowed **index** as object name
4551
* switched to JavaCC **modern template**
4652
* switched to JDK 1.7

src/main/java/net/sf/jsqlparser/expression/SignedExpression.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
2525

2626
/**
27-
* It represents a "-" or "+" before an expression
27+
* It represents a "-" or "+" or "~" before an expression
2828
*/
2929
public class SignedExpression extends ASTNodeAccessImpl implements Expression {
3030

@@ -42,8 +42,8 @@ public char getSign() {
4242

4343
public final void setSign(char sign) {
4444
this.sign = sign;
45-
if (sign != '+' && sign != '-') {
46-
throw new IllegalArgumentException("illegal sign character, only + - allowed");
45+
if (sign != '+' && sign != '-' && sign != '~') {
46+
throw new IllegalArgumentException("illegal sign character, only + - ~ allowed");
4747
}
4848
}
4949

src/main/java/net/sf/jsqlparser/statement/select/Fetch.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121
*/
2222
package net.sf.jsqlparser.statement.select;
2323

24+
import net.sf.jsqlparser.expression.JdbcParameter;
25+
2426
/**
2527
* A fetch clause in the form FETCH (FIRST | NEXT) row_count (ROW | ROWS) ONLY
2628
*/
2729
public class Fetch {
2830

2931
private long rowCount;
30-
private boolean fetchJdbcParameter = false;
32+
private JdbcParameter fetchJdbcParameter = null;
3133
private boolean isFetchParamFirst = false;
3234
private String fetchParam = "ROW";
3335

@@ -39,7 +41,7 @@ public void setRowCount(long l) {
3941
rowCount = l;
4042
}
4143

42-
public boolean isFetchJdbcParameter() {
44+
public JdbcParameter getFetchJdbcParameter() {
4345
return fetchJdbcParameter;
4446
}
4547

@@ -51,8 +53,8 @@ public boolean isFetchParamFirst() {
5153
return isFetchParamFirst;
5254
}
5355

54-
public void setFetchJdbcParameter(boolean b) {
55-
fetchJdbcParameter = b;
56+
public void setFetchJdbcParameter(JdbcParameter jdbc) {
57+
fetchJdbcParameter = jdbc;
5658
}
5759

5860
public void setFetchParam(String s) {
@@ -65,7 +67,8 @@ public void setFetchParamFirst(boolean b) {
6567

6668
@Override
6769
public String toString() {
68-
return " FETCH " + (isFetchParamFirst ? "FIRST" : "NEXT") + " " + (fetchJdbcParameter ? "?" : Long.
69-
toString(rowCount)) + " " + fetchParam + " ONLY";
70+
return " FETCH " + (isFetchParamFirst ? "FIRST" : "NEXT") + " "
71+
+ (fetchJdbcParameter!=null ? fetchJdbcParameter.toString() :
72+
Long.toString(rowCount)) + " " + fetchParam + " ONLY";
7073
}
7174
}

src/main/java/net/sf/jsqlparser/statement/select/Offset.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121
*/
2222
package net.sf.jsqlparser.statement.select;
2323

24+
import net.sf.jsqlparser.expression.JdbcParameter;
25+
2426
/**
2527
* An offset clause in the form OFFSET offset or in the form OFFSET offset (ROW | ROWS)
2628
*/
2729
public class Offset {
2830

2931
private long offset;
30-
private boolean offsetJdbcParameter = false;
32+
private JdbcParameter offsetJdbcParameter = null;
3133
private String offsetParam = null;
3234

3335
public long getOffset() {
@@ -46,16 +48,16 @@ public void setOffsetParam(String s) {
4648
offsetParam = s;
4749
}
4850

49-
public boolean isOffsetJdbcParameter() {
51+
public JdbcParameter getOffsetJdbcParameter() {
5052
return offsetJdbcParameter;
5153
}
5254

53-
public void setOffsetJdbcParameter(boolean b) {
54-
offsetJdbcParameter = b;
55+
public void setOffsetJdbcParameter(JdbcParameter jdbc) {
56+
offsetJdbcParameter = jdbc;
5557
}
5658

5759
@Override
5860
public String toString() {
59-
return " OFFSET " + (offsetJdbcParameter ? "?" : offset) + (offsetParam != null ? " " + offsetParam : "");
61+
return " OFFSET " + (offsetJdbcParameter!=null ? offsetJdbcParameter.toString() : offset) + (offsetParam != null ? " " + offsetParam : "");
6062
}
6163
}

src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,8 @@ public void visit(PivotXml pivot) {
280280
public void deparseOffset(Offset offset) {
281281
// OFFSET offset
282282
// or OFFSET offset (ROW | ROWS)
283-
if (offset.isOffsetJdbcParameter()) {
284-
buffer.append(" OFFSET ?");
283+
if (offset.getOffsetJdbcParameter()!=null) {
284+
buffer.append(" OFFSET ").append(offset.getOffsetJdbcParameter());
285285
} else if (offset.getOffset() != 0) {
286286
buffer.append(" OFFSET ");
287287
buffer.append(offset.getOffset());
@@ -300,8 +300,8 @@ public void deparseFetch(Fetch fetch) {
300300
} else {
301301
buffer.append("NEXT ");
302302
}
303-
if (fetch.isFetchJdbcParameter()) {
304-
buffer.append("?");
303+
if (fetch.getFetchJdbcParameter()!=null) {
304+
buffer.append(fetch.getFetchJdbcParameter().toString());
305305
} else {
306306
buffer.append(fetch.getRowCount());
307307
}

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

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

3938
PARSER_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+
17111721
Limit 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

src/test/java/net/sf/jsqlparser/test/drop/DropTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,14 @@ public void testDropIfExists() throws JSQLParserException {
4545
public void testDropRestrictIssue510() throws JSQLParserException {
4646
assertSqlCanBeParsedAndDeparsed("DROP TABLE TABLE2 RESTRICT");
4747
}
48+
49+
@Test
50+
public void testDropViewIssue545() throws JSQLParserException {
51+
assertSqlCanBeParsedAndDeparsed("DROP VIEW myview");
52+
}
53+
54+
@Test
55+
public void testDropViewIssue545_2() throws JSQLParserException {
56+
assertSqlCanBeParsedAndDeparsed("DROP VIEW IF EXISTS myview");
57+
}
4858
}

0 commit comments

Comments
 (0)