Skip to content

Commit c30e29d

Browse files
Merge commit 'e630354df1cd0f412770c96b0cd83f9fa1e56a62' into JsonFunctions
Conflicts: pmd-rules.xml
2 parents e386eae + e630354 commit c30e29d

File tree

14 files changed

+111
-95
lines changed

14 files changed

+111
-95
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ Also I would like to know about needed examples or documentation stuff.
5555

5656
## Extensions in the latest SNAPSHOT version 4.2
5757

58+
* API change: merge ALL and ANY expressions class
59+
* allow `CURRENT DATE`in addition to `CURRENT_DATE` (without underbar)
60+
5861
## Extensions of JSqlParser releases
5962

6063
* [Release Notes](https://github.com/JSQLParser/JSqlParser/releases)

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
<configuration>
104104
<rulesets>
105105
<!-- Custom local file system rule set -->
106-
<ruleset>${basedir}/pmd-rules.xml</ruleset>
106+
<ruleset>${basedir}/ruleset.xml</ruleset>
107107
</rulesets>
108108
<excludes>
109109
<exclude>**/*Bean.java</exclude>

pmd-rules.xml renamed to ruleset.xml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,10 +105,9 @@ under the License.
105105
<rule ref="category/java/errorprone.xml/UnusedNullCheckInEquals" />
106106
<rule ref="category/java/errorprone.xml/UselessOperationOnImmutable" />
107107

108-
<!-- for Codazy -->
108+
<!-- for Codazy -->
109109
<rule ref="category/java/errorprone.xml/MissingBreakInSwitch" />
110110

111-
112111
<rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
113112
<rule ref="category/java/multithreading.xml/DontCallThreadRun" />
114113
<rule ref="category/java/multithreading.xml/DoubleCheckedLocking" />

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

Lines changed: 0 additions & 36 deletions
This file was deleted.

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

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package net.sf.jsqlparser.expression;
1111

12+
import net.sf.jsqlparser.expression.operators.relational.ItemsList;
1213
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
1314
import net.sf.jsqlparser.statement.select.SubSelect;
1415

@@ -19,18 +20,52 @@
1920
*/
2021
public class AnyComparisonExpression extends ASTNodeAccessImpl implements Expression {
2122

23+
private final ItemsList itemsList;
24+
private boolean useBracketsForValues = false;
2225
private final SubSelect subSelect;
2326
private final AnyType anyType;
2427

2528
public AnyComparisonExpression(AnyType anyType, SubSelect subSelect) {
2629
this.anyType = anyType;
2730
this.subSelect = subSelect;
31+
this.itemsList = null;
32+
}
33+
34+
public AnyComparisonExpression(AnyType anyType, ItemsList itemsList) {
35+
this.anyType = anyType;
36+
this.itemsList = itemsList;
37+
this.subSelect = null;
2838
}
2939

3040
public SubSelect getSubSelect() {
3141
return subSelect;
3242
}
3343

44+
public ItemsList getItemsList() {
45+
return itemsList;
46+
}
47+
48+
public boolean isUsingItemsList() {
49+
return itemsList!=null;
50+
}
51+
52+
public boolean isUsingSubSelect() {
53+
return subSelect!=null;
54+
}
55+
56+
public boolean isUsingBracketsForValues() {
57+
return useBracketsForValues;
58+
}
59+
60+
public void setUseBracketsForValues(boolean useBracketsForValues) {
61+
this.useBracketsForValues = useBracketsForValues;
62+
}
63+
64+
public AnyComparisonExpression withUseBracketsForValues(boolean useBracketsForValues) {
65+
this.setUseBracketsForValues(useBracketsForValues);
66+
return this;
67+
}
68+
3469
@Override
3570
public void accept(ExpressionVisitor expressionVisitor) {
3671
expressionVisitor.visit(this);
@@ -42,6 +77,12 @@ public AnyType getAnyType() {
4277

4378
@Override
4479
public String toString() {
45-
return anyType.name() + " " + subSelect.toString();
80+
String s = anyType.name()
81+
+ " ("
82+
+ ( subSelect!=null
83+
? subSelect.toString()
84+
: "VALUES " + itemsList.toString())
85+
+ " )";
86+
return s;
4687
}
4788
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@
1212
public enum AnyType {
1313

1414
ANY,
15-
SOME
15+
SOME,
16+
ALL
1617
}

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,6 @@ public interface ExpressionVisitor {
9999

100100
void visit(ExistsExpression existsExpression);
101101

102-
void visit(AllComparisonExpression allComparisonExpression);
103-
104102
void visit(AnyComparisonExpression anyComparisonExpression);
105103

106104
void visit(Concat concat);

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -269,12 +269,7 @@ public void visit(WhenClause expr) {
269269
public void visit(ExistsExpression expr) {
270270
expr.getRightExpression().accept(this);
271271
}
272-
273-
@Override
274-
public void visit(AllComparisonExpression expr) {
275-
276-
}
277-
272+
278273
@Override
279274
public void visit(AnyComparisonExpression expr) {
280275

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.ArrayList;
1313
import java.util.List;
1414

15-
import net.sf.jsqlparser.expression.AllComparisonExpression;
1615
import net.sf.jsqlparser.expression.AnalyticExpression;
1716
import net.sf.jsqlparser.expression.AnyComparisonExpression;
1817
import net.sf.jsqlparser.expression.ArrayExpression;
@@ -464,11 +463,6 @@ public void visit(WhenClause whenClause) {
464463
}
465464
}
466465

467-
@Override
468-
public void visit(AllComparisonExpression allComparisonExpression) {
469-
allComparisonExpression.getSubSelect().getSelectBody().accept(this);
470-
}
471-
472466
@Override
473467
public void visit(AnyComparisonExpression anyComparisonExpression) {
474468
anyComparisonExpression.getSubSelect().getSelectBody().accept(this);

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

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import java.util.List;
1414
import static java.util.stream.Collectors.joining;
1515

16-
import net.sf.jsqlparser.expression.AllComparisonExpression;
1716
import net.sf.jsqlparser.expression.AnalyticExpression;
1817
import net.sf.jsqlparser.expression.AnalyticType;
1918
import net.sf.jsqlparser.expression.AnyComparisonExpression;
@@ -103,6 +102,7 @@
103102
import net.sf.jsqlparser.schema.Column;
104103
import net.sf.jsqlparser.schema.Table;
105104
import net.sf.jsqlparser.statement.select.OrderByElement;
105+
import net.sf.jsqlparser.statement.select.PlainSelect;
106106
import net.sf.jsqlparser.statement.select.SelectVisitor;
107107
import net.sf.jsqlparser.statement.select.SubSelect;
108108
import net.sf.jsqlparser.statement.select.WithItem;
@@ -622,16 +622,19 @@ public void visit(WhenClause whenClause) {
622622
buffer.append(" ");
623623
}
624624

625-
@Override
626-
public void visit(AllComparisonExpression allComparisonExpression) {
627-
buffer.append("ALL ");
628-
allComparisonExpression.getSubSelect().accept((ExpressionVisitor) this);
629-
}
630-
631625
@Override
632626
public void visit(AnyComparisonExpression anyComparisonExpression) {
633-
buffer.append(anyComparisonExpression.getAnyType().name()).append(" ");
634-
anyComparisonExpression.getSubSelect().accept((ExpressionVisitor) this);
627+
buffer.append(anyComparisonExpression.getAnyType().name()).append(" ( ");
628+
SubSelect subSelect = anyComparisonExpression.getSubSelect();
629+
if (subSelect!=null) {
630+
subSelect.accept((ExpressionVisitor) this);
631+
} else {
632+
ExpressionList expressionList = (ExpressionList) anyComparisonExpression.getItemsList();
633+
buffer.append("VALUES ");
634+
buffer.append(
635+
PlainSelect.getStringList(expressionList.getExpressions(), true, anyComparisonExpression.isUsingBracketsForValues()));
636+
}
637+
buffer.append(" ) ");
635638
}
636639

637640
@Override

src/main/java/net/sf/jsqlparser/util/validation/validator/ExpressionValidator.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
*/
1010
package net.sf.jsqlparser.util.validation.validator;
1111

12-
import net.sf.jsqlparser.expression.AllComparisonExpression;
1312
import net.sf.jsqlparser.expression.AnalyticExpression;
1413
import net.sf.jsqlparser.expression.AnyComparisonExpression;
1514
import net.sf.jsqlparser.expression.ArrayConstructor;
@@ -360,11 +359,6 @@ public void visit(WhenClause whenClause) {
360359
whenClause.getThenExpression().accept(this);
361360
}
362361

363-
@Override
364-
public void visit(AllComparisonExpression allComparisonExpression) {
365-
allComparisonExpression.getSubSelect().accept(this);
366-
}
367-
368362
@Override
369363
public void visit(AnyComparisonExpression anyComparisonExpression) {
370364
anyComparisonExpression.getSubSelect().accept(this);

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

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,11 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
353353
| <K_THEN:"THEN">
354354
| <K_TEMP:"TEMP">
355355
| <K_TEMPORARY:"TEMPORARY">
356-
| <K_TIME_KEY_EXPR : ( "CURRENT_TIMESTAMP" | "CURRENT_TIME" | "CURRENT_DATE" ) ( "()" )?>
356+
| <K_TIME_KEY_EXPR : (
357+
("CURRENT" ( "_" | (" ")+ ) "TIMESTAMP")
358+
| ("CURRENT" ( "_" | (" ")+ ) "TIME")
359+
| ("CURRENT" ( "_" | (" ")+ ) "DATE")
360+
) ( "()" )?>
357361
| <K_TIMEOUT:"TIMEOUT">
358362
| <K_TO:"TO">
359363
| <K_TOP:"TOP">
@@ -1421,7 +1425,7 @@ String RelObjectNameWithoutValue() :
14211425
| tk=<K_DO> | tk=<K_EXTRACT> | tk=<K_FIRST> | tk=<K_FOLLOWING> | tk=<K_JSON>
14221426
| tk=<K_LAST> | tk=<K_LEADING> | tk=<K_MATERIALIZED> | tk=<K_NULLS> | tk=<K_PARTITION> | tk=<K_RANGE>
14231427
| tk=<K_ROW> | tk=<K_ROWS> | tk=<K_SIBLINGS> | tk=<K_XML>
1424-
| tk=<K_COLUMN> | tk=<K_REPLACE> | tk=<K_TRUNCATE> | tk=<K_KEY> | tk=<K_ANY>
1428+
| tk=<K_COLUMN> | tk=<K_REPLACE> | tk=<K_TRUNCATE> | tk=<K_KEY>
14251429
| tk=<K_OPEN> | tk=<K_OVER> | tk=<K_PERCENT> | tk=<K_PRIOR>
14261430
| tk=<K_SEPARATOR> | tk=<K_NO> | tk=<K_ACTION> | tk=<K_CASCADE> | tk=<K_END>
14271431
| tk=<K_TABLE> | tk=<K_DATETIMELITERAL> | tk=<K_COMMIT> | tk=<K_PRECISION>
@@ -1479,7 +1483,7 @@ String RelObjectNameExt():
14791483
String result=null;
14801484
}
14811485
{
1482-
( result=RelObjectName() | tk=<K_ALL> | tk=<K_LEFT> | tk=<K_RIGHT> | tk=<K_SET>
1486+
( result=RelObjectName() | tk=<K_ALL> | tk=<K_ANY> | tk=<K_SOME> | tk=<K_LEFT> | tk=<K_RIGHT> | tk=<K_SET>
14831487
| tk=<K_DOUBLE> | tk=<K_IF> | tk=<K_IIF> | tk=<K_OPTIMIZE> | tk=<K_LIMIT>
14841488
| tk=<K_OFFSET> | tk=<K_PROCEDURE> | tk=<K_PUBLIC>
14851489
| tk=<K_CASEWHEN> | tk=<K_IN> )
@@ -3200,8 +3204,7 @@ Expression ComparisonItem() :
32003204
}
32013205
{
32023206
(
3203-
LOOKAHEAD(3) retval=AllComparisonExpression()
3204-
| LOOKAHEAD(3) retval=AnyComparisonExpression()
3207+
LOOKAHEAD(3) retval=AnyComparisonExpression()
32053208
| LOOKAHEAD(ValueListExpression()) retval=ValueListExpression()
32063209
| LOOKAHEAD(3) retval=SimpleExpression()
32073210
| retval=RowConstructor()
@@ -3212,29 +3215,28 @@ Expression ComparisonItem() :
32123215
}
32133216
}
32143217

3215-
Expression AllComparisonExpression() :
3216-
{
3217-
AllComparisonExpression retval = null;
3218-
SubSelect subselect = null;
3219-
}
3220-
{
3221-
<K_ALL> "(" subselect=SubSelect() ")" { retval = new AllComparisonExpression(subselect); }
3222-
{
3223-
return retval;
3224-
}
3225-
}
3226-
32273218
Expression AnyComparisonExpression() :
32283219
{
3229-
AnyComparisonExpression retval = null;
3220+
AnyComparisonExpression anyComparisonExpr = null;
32303221
AnyType anyType;
3231-
SubSelect subselect = null;
3222+
SubSelect subSelect;
3223+
ItemsList simpleExpressionList;
32323224
}
32333225
{
3234-
(<K_ANY> { anyType = AnyType.ANY; } | <K_SOME> { anyType = AnyType.SOME; } )
3235-
"(" subselect=SubSelect() ")" { retval = new AnyComparisonExpression(anyType, subselect); }
3226+
(<K_ANY> { anyType = AnyType.ANY; } | <K_SOME> { anyType = AnyType.SOME; } | <K_ALL> { anyType = AnyType.ALL; } )
3227+
3228+
// if the next block looks alike an ExpressionList without Brackets, then parse as List
3229+
( LOOKAHEAD( "(" <K_VALUES> SimpleExpressionList(false) ")" )
3230+
"(" <K_VALUES>
3231+
simpleExpressionList = SimpleExpressionList(false) { anyComparisonExpr=new AnyComparisonExpression(anyType, simpleExpressionList).withUseBracketsForValues(false); }
3232+
")"
3233+
3234+
// Otherwise parse it as a SubSelect
3235+
| "(" subSelect = SubSelect() { anyComparisonExpr=new AnyComparisonExpression(anyType, subSelect.withUseBrackets(false)).withUseBracketsForValues(false); } ")"
3236+
3237+
)
32363238
{
3237-
return retval;
3239+
return anyComparisonExpr;
32383240
}
32393241
}
32403242

src/test/java/net/sf/jsqlparser/statement/builder/ReflectionModelTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ public class ReflectionModelTest {
3434

3535
private static final List<Object> MODEL_OBJECTS = asList(new net.sf.jsqlparser.expression.Alias("a"),
3636
new net.sf.jsqlparser.expression.Alias.AliasColumn("a", new ColDataType("varchar")),
37-
new net.sf.jsqlparser.expression.AllComparisonExpression(new SubSelect()),
3837
new net.sf.jsqlparser.expression.AnalyticExpression(),
3938
new net.sf.jsqlparser.expression.AnyComparisonExpression(AnyType.ANY, new SubSelect()),
39+
new net.sf.jsqlparser.expression.AnyComparisonExpression(AnyType.ALL, new SubSelect()),
40+
new net.sf.jsqlparser.expression.AnyComparisonExpression(AnyType.SOME, new SubSelect()),
4041
new net.sf.jsqlparser.expression.ArrayExpression(),
4142
new net.sf.jsqlparser.expression.CaseExpression(), new net.sf.jsqlparser.expression.CastExpression(),
4243
new net.sf.jsqlparser.expression.CollateExpression(),

0 commit comments

Comments
 (0)