Skip to content

Commit

Permalink
refactor: Remove ItemsList, MultiExpressionList, Replace
Browse files Browse the repository at this point in the history
Since we have proper `ExpressionList` implementing `Expression` we can narrow down the API:

- remove `ItemsList`, `ItemsListVisitor`, `ItemsListValidator` in favor of `ExpressionList`
- remove `MultiExpressionList` in favor of `ExpressionList`
- refactor `NamedExpressionList` so it extends `ExpressionList` and uses `ExpressionListDeparser`
- simplify `InExpression` and `AnyComparisionExpression`

BREAKING-CHANGE: many Classes and Methods removed
  • Loading branch information
manticore-projects committed May 4, 2023
1 parent f449263 commit 141708e
Show file tree
Hide file tree
Showing 45 changed files with 253 additions and 1,091 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,62 +9,27 @@
*/
package net.sf.jsqlparser.expression;

import net.sf.jsqlparser.expression.operators.relational.ItemsList;
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
import net.sf.jsqlparser.statement.select.Select;

/**
* Combines ANY and SOME expressions.
*
* @author toben
*/
public class AnyComparisonExpression extends ASTNodeAccessImpl implements Expression {

private final ItemsList itemsList;
private boolean useBracketsForValues = false;
private final ParenthesedSelect subSelect;
private final Select select;
private final AnyType anyType;

public AnyComparisonExpression(AnyType anyType, ParenthesedSelect subSelect) {
this.anyType = anyType;
this.subSelect = subSelect;
this.itemsList = null;
}

public AnyComparisonExpression(AnyType anyType, ItemsList itemsList) {
public AnyComparisonExpression(AnyType anyType, Select select) {
this.anyType = anyType;
this.itemsList = itemsList;
this.subSelect = null;
}

public ParenthesedSelect getSubSelect() {
return subSelect;
}

public ItemsList getItemsList() {
return itemsList;
this.select = select;
}

public boolean isUsingItemsList() {
return itemsList != null;
public Select getSelect() {
return select;
}

public boolean isUsingSubSelect() {
return subSelect != null;
}

public boolean isUsingBracketsForValues() {
return useBracketsForValues;
}

public void setUseBracketsForValues(boolean useBracketsForValues) {
this.useBracketsForValues = useBracketsForValues;
}

public AnyComparisonExpression withUseBracketsForValues(boolean useBracketsForValues) {
this.setUseBracketsForValues(useBracketsForValues);
return this;
}

@Override
public void accept(ExpressionVisitor expressionVisitor) {
Expand All @@ -77,9 +42,7 @@ public AnyType getAnyType() {

@Override
public String toString() {
String s = anyType.name() + " ("
+ (subSelect != null ? subSelect.toString() : "VALUES " + itemsList.toString())
+ " )";
String s = anyType.name() + select;
return s;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,11 @@
import net.sf.jsqlparser.expression.operators.relational.IsBooleanExpression;
import net.sf.jsqlparser.expression.operators.relational.IsDistinctExpression;
import net.sf.jsqlparser.expression.operators.relational.IsNullExpression;
import net.sf.jsqlparser.expression.operators.relational.ItemsListVisitor;
import net.sf.jsqlparser.expression.operators.relational.JsonOperator;
import net.sf.jsqlparser.expression.operators.relational.LikeExpression;
import net.sf.jsqlparser.expression.operators.relational.Matches;
import net.sf.jsqlparser.expression.operators.relational.MinorThan;
import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals;
import net.sf.jsqlparser.expression.operators.relational.MultiExpressionList;
import net.sf.jsqlparser.expression.operators.relational.NamedExpressionList;
import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo;
import net.sf.jsqlparser.expression.operators.relational.RegExpMatchOperator;
import net.sf.jsqlparser.expression.operators.relational.RegExpMySQLOperator;
Expand All @@ -67,7 +64,7 @@

@SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.UncommentedEmptyMethodBody"})
public class ExpressionVisitorAdapter
implements ExpressionVisitor, ItemsListVisitor, PivotVisitor, SelectItemVisitor {
implements ExpressionVisitor, PivotVisitor, SelectItemVisitor {

private SelectVisitor selectVisitor;

Expand All @@ -87,7 +84,7 @@ public void visit(NullValue value) {
@Override
public void visit(Function function) {
if (function.getParameters() != null) {
function.getParameters().accept((ItemsListVisitor) this);
function.getParameters().accept(this);
}
if (function.getKeep() != null) {
function.getKeep().accept(this);
Expand Down Expand Up @@ -197,8 +194,8 @@ public void visit(Between expr) {
}

public void visit(OverlapsCondition overlapsCondition) {
overlapsCondition.getLeft().accept((ItemsListVisitor) this);
overlapsCondition.getRight().accept((ItemsListVisitor) this);
overlapsCondition.getLeft().accept(this);
overlapsCondition.getRight().accept(this);
}


Expand All @@ -219,14 +216,8 @@ public void visit(GreaterThanEquals expr) {

@Override
public void visit(InExpression expr) {
if (expr.getLeftExpression() != null) {
expr.getLeftExpression().accept(this);
}
if (expr.getRightExpression() != null) {
expr.getRightExpression().accept(this);
} else if (expr.getRightItemsList() != null) {
expr.getRightItemsList().accept(this);
}
expr.getLeftExpression().accept(this);
expr.getRightExpression().accept(this);
}

@Override
Expand Down Expand Up @@ -408,20 +399,6 @@ public void visit(RowConstructor<?> rowConstructor) {
}
}

@Override
public void visit(NamedExpressionList namedExpressionList) {
for (Expression expr : namedExpressionList.getExpressions()) {
expr.accept(this);
}
}

@Override
public void visit(MultiExpressionList<?> multiExprList) {
for (ExpressionList<?> list : multiExprList.getExprList()) {
visit(list);
}
}

@Override
public void visit(NotExpression notExpr) {
notExpr.getExpression().accept(this);
Expand Down Expand Up @@ -502,7 +479,7 @@ public void visit(Pivot pivot) {

if (pivot.getMultiInItems() != null) {
for (ExpressionListItem item : pivot.getMultiInItems()) {
item.getExpressionList().accept((ItemsListVisitor) this);
item.getExpressionList().accept(this);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/net/sf/jsqlparser/expression/Function.java
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public void setParameters(ExpressionList list) {
*
* @return the list of named parameters of the function (if any, else null)
*/
public NamedExpressionList getNamedParameters() {
public NamedExpressionList<?> getNamedParameters() {
return namedParameters;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* A list of expressions, as in SELECT A FROM TAB WHERE B IN (expr1,expr2,expr3)
*/
public class ExpressionList<T extends Expression> extends ArrayList<T>
implements ItemsList, Expression, Serializable {
implements Expression, Serializable {
private transient SimpleNode node;

public ExpressionList(Collection<? extends T> expressions) {
Expand Down Expand Up @@ -55,6 +55,11 @@ public void setExpressions(List<T> expressions) {
this.addAll(expressions);
}

public ExpressionList addExpression(T expression) {
this.add(expression);
return this;
}

public ExpressionList addExpressions(T... expressions) {
addAll(Arrays.asList(expressions));
return this;
Expand All @@ -75,11 +80,6 @@ public ExpressionList withExpressions(Collection<T> expressions) {
return addExpressions(expressions);
}

@Override
public void accept(ItemsListVisitor itemsListVisitor) {
itemsListVisitor.visit(this);
}

@Override
public String toString() {
return PlainSelect.getStringList(this, true, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,28 @@
import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;

public class InExpression extends ASTNodeAccessImpl implements Expression, SupportsOldOracleJoinSyntax {
public class InExpression extends ASTNodeAccessImpl
implements Expression, SupportsOldOracleJoinSyntax {

private Expression leftExpression;
private ItemsList rightItemsList;
private boolean not = false;
private Expression rightExpression;
private int oldOracleJoinSyntax = NO_ORACLE_JOIN;

public InExpression() {
}
public InExpression() {}

public InExpression(Expression leftExpression, ItemsList itemsList) {
setLeftExpression(leftExpression);
setRightItemsList(itemsList);
public InExpression(Expression leftExpression, Expression rightExpression) {
this.leftExpression = leftExpression;
this.rightExpression = rightExpression;
}

@Override
public void setOldOracleJoinSyntax(int oldOracleJoinSyntax) {
this.oldOracleJoinSyntax = oldOracleJoinSyntax;
if (oldOracleJoinSyntax < 0 || oldOracleJoinSyntax > 1) {
throw new IllegalArgumentException(
"unexpected join type for oracle found with IN (type=" + oldOracleJoinSyntax + ")");
"unexpected join type for oracle found with IN (type=" + oldOracleJoinSyntax
+ ")");
}
}

Expand All @@ -43,23 +43,10 @@ public int getOldOracleJoinSyntax() {
return oldOracleJoinSyntax;
}

public ItemsList getRightItemsList() {
return rightItemsList;
}

public Expression getLeftExpression() {
return leftExpression;
}

public InExpression withRightItemsList(ItemsList list) {
this.setRightItemsList(list);
return this;
}

public final void setRightItemsList(ItemsList list) {
rightItemsList = list;
}

public InExpression withLeftExpression(Expression expression) {
this.setLeftExpression(expression);
return this;
Expand Down Expand Up @@ -104,11 +91,7 @@ public String toString() {
statementBuilder.append("NOT ");
}
statementBuilder.append("IN ");
if (rightExpression == null) {
statementBuilder.append(rightItemsList);
} else {
statementBuilder.append(rightExpression);
}
statementBuilder.append(rightExpression);
return statementBuilder.toString();
}

Expand Down Expand Up @@ -146,10 +129,6 @@ public InExpression withNot(boolean not) {
return this;
}

public <E extends ItemsList> E getRightItemsList(Class<E> type) {
return type.cast(getRightItemsList());
}

public <E extends Expression> E getLeftExpression(Class<E> type) {
return type.cast(getLeftExpression());
}
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Loading

0 comments on commit 141708e

Please sign in to comment.