Skip to content

Commit 768f7cb

Browse files
committed
Merge origin/master
2 parents e91e074 + 0cb7484 commit 768f7cb

File tree

4 files changed

+76
-7
lines changed

4 files changed

+76
-7
lines changed

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public enum Keyword {
3939
private Keyword keyword;
4040
private Long rowCount;
4141
private JdbcParameter jdbcParameter;
42+
private String variable;
4243

4344
public Long getRowCount() {
4445
return rowCount;
@@ -64,11 +65,25 @@ public void setKeyword(Keyword keyword) {
6465
this.keyword = keyword;
6566
}
6667

68+
public String getVariable() {
69+
return variable;
70+
}
71+
72+
public void setVariable(String variable) {
73+
this.variable = variable;
74+
}
75+
6776
@Override
6877
public String toString() {
6978
String result = keyword.name() + " ";
7079

71-
result += jdbcParameter != null ? jdbcParameter.toString() : rowCount;
80+
if(rowCount != null) {
81+
result += rowCount;
82+
} else if (jdbcParameter != null) {
83+
result += jdbcParameter.toString();
84+
} else if (variable != null){
85+
result += variable;
86+
}
7287

7388
return result;
7489
}

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class Skip {
3333

3434
private Long rowCount;
3535
private JdbcParameter jdbcParameter;
36+
private String variable;
3637

3738
public Long getRowCount() {
3839
return rowCount;
@@ -50,11 +51,25 @@ public void setJdbcParameter(JdbcParameter jdbcParameter) {
5051
this.jdbcParameter = jdbcParameter;
5152
}
5253

54+
public String getVariable() {
55+
return variable;
56+
}
57+
58+
public void setVariable(String variable) {
59+
this.variable = variable;
60+
}
61+
5362
@Override
5463
public String toString() {
5564
String result = "SKIP ";
5665

57-
result += jdbcParameter != null ? jdbcParameter.toString() : rowCount;
66+
if(rowCount != null) {
67+
result += rowCount;
68+
} else if (jdbcParameter != null) {
69+
result += jdbcParameter.toString();
70+
} else if (variable != null){
71+
result += variable;
72+
}
5873

5974
return result;
6075
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1315,6 +1315,7 @@ Skip Skip():
13151315
<K_SKIP>
13161316
(
13171317
token=<S_LONG> { skip.setRowCount(Long.parseLong(token.image)); }
1318+
| token=<S_IDENTIFIER> { skip.setVariable(token.image); }
13181319
| "?" { skip.setJdbcParameter(new JdbcParameter()); } [ LOOKAHEAD(2) token = <S_LONG> { skip.getJdbcParameter().setIndex(Integer.valueOf(token.image)); } ]
13191320
)
13201321
{
@@ -1333,6 +1334,7 @@ First First():
13331334
)
13341335
(
13351336
token=<S_LONG> { first.setRowCount(Long.parseLong(token.image)); }
1337+
| token=<S_IDENTIFIER> { first.setVariable(token.image); }
13361338
| "?" { first.setJdbcParameter(new JdbcParameter()); } [ LOOKAHEAD(2) token = <S_LONG> { first.getJdbcParameter().setIndex(Integer.valueOf(token.image)); } ]
13371339
)
13381340
{

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

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -437,13 +437,31 @@ public void testSkip() throws JSQLParserException {
437437
final Skip skip = selectBody.getSkip();
438438
assertEquals((long) 5, (long) skip.getRowCount());
439439
assertNull(skip.getJdbcParameter());
440+
assertNull(skip.getVariable());
440441

441442
final List<SelectItem> selectItems = selectBody.getSelectItems();
442443
assertEquals(2, selectItems.size());
443444
assertEquals(firstColumnName, selectItems.get(0).toString());
444445
assertEquals(secondColumnName, selectItems.get(1).toString());
445446

446447
assertStatementCanBeDeparsedAs(select, statement);
448+
449+
final String statement2 = "SELECT SKIP skipVar c1, c2 FROM t";
450+
final Select select2 = (Select) parserManager.parse(new StringReader(statement2));
451+
452+
final PlainSelect selectBody2 = (PlainSelect) select2.getSelectBody();
453+
454+
final Skip skip2 = selectBody2.getSkip();
455+
assertNull(skip2.getRowCount());
456+
assertNull(skip2.getJdbcParameter());
457+
assertEquals("skipVar", skip2.getVariable());
458+
459+
final List<SelectItem> selectItems2 = selectBody2.getSelectItems();
460+
assertEquals(2, selectItems2.size());
461+
assertEquals("c1", selectItems2.get(0).toString());
462+
assertEquals("c2", selectItems2.get(1).toString());
463+
464+
assertStatementCanBeDeparsedAs(select2, statement2);
447465
}
448466

449467
public void testFirst() throws JSQLParserException {
@@ -465,6 +483,24 @@ public void testFirst() throws JSQLParserException {
465483
assertEquals(secondColumnName, selectItems.get(1).toString());
466484

467485
assertStatementCanBeDeparsedAs(select, statement);
486+
487+
488+
final String statement2 = "SELECT FIRST firstVar c1, c2 FROM t";
489+
final Select select2 = (Select) parserManager.parse(new StringReader(statement2));
490+
491+
final PlainSelect selectBody2 = (PlainSelect) select2.getSelectBody();
492+
493+
final First first2 = selectBody2.getFirst();
494+
assertNull(first2.getRowCount());
495+
assertNull(first2.getJdbcParameter());
496+
assertEquals("firstVar", first2.getVariable());
497+
498+
final List<SelectItem> selectItems2 = selectBody2.getSelectItems();
499+
assertEquals(2, selectItems2.size());
500+
assertEquals("c1", selectItems2.get(0).toString());
501+
assertEquals("c2", selectItems2.get(1).toString());
502+
503+
assertStatementCanBeDeparsedAs(select2, statement2);
468504
}
469505

470506
public void testFirstWithKeywordLimit() throws JSQLParserException {
@@ -490,7 +526,7 @@ public void testFirstWithKeywordLimit() throws JSQLParserException {
490526
}
491527

492528
public void testSkipFirst() throws JSQLParserException {
493-
final String statement = "SELECT SKIP ?1 FIRST ?2 c1, c2 FROM t1";
529+
final String statement = "SELECT SKIP ?1 FIRST f1 c1, c2 FROM t1";
494530
final Select select = (Select) parserManager.parse(new StringReader(statement));
495531

496532
final PlainSelect selectBody = (PlainSelect) select.getSelectBody();
@@ -499,11 +535,12 @@ public void testSkipFirst() throws JSQLParserException {
499535
assertNotNull(skip.getJdbcParameter());
500536
assertNotNull(skip.getJdbcParameter().getIndex());
501537
assertEquals((int) 1, (int) skip.getJdbcParameter().getIndex());
538+
assertNull(skip.getVariable());
502539
final First first = selectBody.getFirst();
503-
assertNotNull(first.getJdbcParameter());
504-
assertNotNull(first.getJdbcParameter().getIndex());
505-
assertEquals((int) 2, (int) first.getJdbcParameter().getIndex());
506-
540+
assertNull(first.getJdbcParameter());
541+
assertNull(first.getRowCount());
542+
assertEquals("f1", first.getVariable());
543+
507544
final List<SelectItem> selectItems = selectBody.getSelectItems();
508545
assertEquals(2, selectItems.size());
509546
assertEquals("c1", selectItems.get(0).toString());

0 commit comments

Comments
 (0)