Skip to content

Refactor Parenthesed SelectBody and FromItem #1754

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 59 commits into from
Apr 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
747152a
Fixes #1684: Support CREATE MATERIALIZED VIEW with AUTO REFRESH
zaza Dec 11, 2022
9e09005
Merge branch 'master' into 1684-create-mv-auto-refresh
zaza Dec 22, 2022
ea4477b
Reduce cyclomatic complexity in CreateView.toString
zaza Jan 8, 2023
b5321d6
Enhanced Keywords
manticore-projects Oct 18, 2021
5fae2f5
Fix incorrect tests
manticore-projects Oct 18, 2021
f49e828
Define Reserved Keywords explicitly
manticore-projects Oct 24, 2021
86f337d
Fix test resources
manticore-projects Oct 24, 2021
2d51a82
Adjust Gradle to JUnit 5
manticore-projects Nov 22, 2021
232aff6
Do not mark SpeedTest for concurrent execution
manticore-projects Nov 24, 2021
3ba5410
Remove unused imports
manticore-projects Nov 28, 2021
e960a35
Adjust Gradle to JUnit 5
manticore-projects Nov 22, 2021
67f7951
Do not mark SpeedTest for concurrent execution
manticore-projects Nov 24, 2021
a016be0
Remove unused imports
manticore-projects Nov 28, 2021
2ef6637
Sphinx Documentation
manticore-projects Sep 2, 2022
57193b8
doc: request for `Conventional Commit` messages
manticore-projects Sep 6, 2022
b94b2cc
feat: make important Classes Serializable
manticore-projects Sep 15, 2022
02202c5
chore: Make Serializable
manticore-projects Oct 14, 2022
a3ca325
doc: Better integration of the RR diagrams
manticore-projects Jan 7, 2023
fcb5ab1
Merge
manticore-projects Jan 7, 2023
c57c427
feat: Oracle Alternative Quoting
manticore-projects Jan 29, 2023
2aec1f6
style: Appease PMD/Codacy
manticore-projects Jan 29, 2023
1c8d8da
feat: CREATE VIEW ... REFRESH AUTO...
manticore-projects Jan 30, 2023
b707b23
doc: fix the issue template
manticore-projects Feb 1, 2023
46314c4
Update issue templates
manticore-projects Feb 1, 2023
4aeafbc
Update issue templates
manticore-projects Feb 1, 2023
b081484
feat: Support more Statement Separators
manticore-projects Feb 2, 2023
5885e1c
Merge remote-tracking branch 'origin/master'
manticore-projects Feb 13, 2023
581d97a
Merge branch 'master' of https://github.com/JSQLParser/JSqlParser
manticore-projects Feb 24, 2023
0979b2e
feat: FETCH uses EXPRESSION
manticore-projects Mar 7, 2023
ed17f87
style: apply Spotless
manticore-projects Mar 7, 2023
96808d2
test: commit missing test
manticore-projects Mar 7, 2023
21c4550
Merge branch 'master' of https://github.com/JSQLParser/JSqlParser
manticore-projects Mar 12, 2023
029588f
fix: JSon Operator can use Simple Function
manticore-projects Mar 14, 2023
4b312ff
style: Reformat changed files and headers
manticore-projects Mar 14, 2023
91c9503
style: Remove unused variable
manticore-projects Mar 14, 2023
64fe908
feat: Add support for Hangul "\uAC00"-"\uD7A3"
manticore-projects Mar 17, 2023
a6d9e40
style: expose `SetStatement` key-value list
manticore-projects Mar 17, 2023
c5ec0c5
style: Appease PMD/Codacy
manticore-projects Mar 17, 2023
8bfcde6
Merge remote-tracking branch 'manticore/JSonOperatorIssue1571' into J…
manticore-projects Mar 17, 2023
043b71a
feat: `ConflictTarget` allows multiple `IndexColumnNames`
manticore-projects Mar 18, 2023
f75df51
doc: fix reference in the Java Doc
manticore-projects Mar 18, 2023
500046f
build: better Upload Groovy Task
manticore-projects Mar 18, 2023
e460cda
feat: ParenthesedSelectBody and ParenthesedFromItem
manticore-projects Mar 23, 2023
ad9e98d
feat: ParenthesedSelectBody and ParenthesedFromItem
manticore-projects Mar 23, 2023
31935b3
Merge remote-tracking branch 'origin/master' into ParenthesedSelectBody
manticore-projects Mar 23, 2023
f0f8876
feat: ParenthesedSelectBody and ParenthesedFromItem
manticore-projects Mar 23, 2023
d134137
feat: ParenthesedSelectBody and ParenthesedFromItem
manticore-projects Mar 23, 2023
616bf23
feat: ParenthesedSelectBody and ParenthesedFromItem
manticore-projects Mar 24, 2023
465934c
feat: ParenthesedSelectBody and ParenthesedFromItem
manticore-projects Mar 25, 2023
9b3294c
style: Appease PMD/Codacy
manticore-projects Mar 25, 2023
e470d6e
style: Appease PMD/Codacy
manticore-projects Mar 25, 2023
9f999e3
feat: Refactor SelectBody implementations
manticore-projects Mar 26, 2023
8cddd39
feat: Refactor SelectBody implementations
manticore-projects Mar 27, 2023
d0ea5e0
style: Code cleanup
manticore-projects Mar 27, 2023
4056ca5
feat: Merge `SelectBody` into `Select` Statement
manticore-projects Mar 27, 2023
a6aab00
style: Remove unused import
manticore-projects Mar 27, 2023
a914fe0
test: @Disabled invalid Test
manticore-projects Mar 27, 2023
8b9dd3e
style: Appease PMD/Codacy
manticore-projects Mar 27, 2023
ab127d4
test: Add a SubSelect Parsing Test
manticore-projects Apr 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 10 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,20 @@ SELECT 1 FROM dual WHERE a = b

```text
SQL Text
└─Statements: net.sf.jsqlparser.statement.select.Select
└─selectBody: net.sf.jsqlparser.statement.select.PlainSelect
├─selectItems -> Collection<SelectExpressionItem>
│ └─selectItems: net.sf.jsqlparser.statement.select.SelectExpressionItem
│ └─LongValue: 1
├─Table: dual
└─where: net.sf.jsqlparser.expression.operators.relational.EqualsTo
├─Column: a
└─Column: b
└─Statements: net.sf.jsqlparser.statement.select.PlainSelect
├─selectItems -> Collection<SelectExpressionItem>
│ └─selectItems: net.sf.jsqlparser.statement.select.SelectExpressionItem
│ └─LongValue: 1
├─Table: dual
└─where: net.sf.jsqlparser.expression.operators.relational.EqualsTo
├─Column: a
└─Column: b
```

```java
Statement statement = CCJSqlParserUtil.parse(sqlStr);
if (statement instanceof Select) {
Select select = (Select) statement;
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
if (statement instanceof PlainSelect) {
PlainSelect plainSelect = (PlainSelect) statement;

SelectExpressionItem selectExpressionItem =
(SelectExpressionItem) plainSelect.getSelectItems().get(0);
Expand Down
2 changes: 1 addition & 1 deletion config/formatter/eclipse-java-google-style.xml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_non_simple_local_variable_annotation" value="true"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

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

/**
* Combines ANY and SOME expressions.
Expand All @@ -22,10 +22,10 @@ public class AnyComparisonExpression extends ASTNodeAccessImpl implements Expres

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

public AnyComparisonExpression(AnyType anyType, SubSelect subSelect) {
public AnyComparisonExpression(AnyType anyType, ParenthesedSelect subSelect) {
this.anyType = anyType;
this.subSelect = subSelect;
this.itemsList = null;
Expand All @@ -37,7 +37,7 @@ public AnyComparisonExpression(AnyType anyType, ItemsList itemsList) {
this.subSelect = null;
}

public SubSelect getSubSelect() {
public ParenthesedSelect getSubSelect() {
return subSelect;
}

Expand All @@ -46,13 +46,13 @@ public ItemsList getItemsList() {
}

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

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

public boolean isUsingBracketsForValues() {
return useBracketsForValues;
}
Expand All @@ -77,11 +77,8 @@ public AnyType getAnyType() {

@Override
public String toString() {
String s = anyType.name()
+ " ("
+ ( subSelect!=null
? subSelect.toString()
: "VALUES " + itemsList.toString())
String s = anyType.name() + " ("
+ (subSelect != null ? subSelect.toString() : "VALUES " + itemsList.toString())
+ " )";
return s;
}
Expand Down
45 changes: 39 additions & 6 deletions src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,46 @@
*/
package net.sf.jsqlparser.expression;

import net.sf.jsqlparser.expression.operators.arithmetic.*;
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor;
import net.sf.jsqlparser.expression.operators.arithmetic.Concat;
import net.sf.jsqlparser.expression.operators.arithmetic.Division;
import net.sf.jsqlparser.expression.operators.arithmetic.IntegerDivision;
import net.sf.jsqlparser.expression.operators.arithmetic.Modulo;
import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication;
import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.conditional.XorExpression;
import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.expression.operators.relational.Between;
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
import net.sf.jsqlparser.expression.operators.relational.ExistsExpression;
import net.sf.jsqlparser.expression.operators.relational.FullTextSearch;
import net.sf.jsqlparser.expression.operators.relational.GeometryDistance;
import net.sf.jsqlparser.expression.operators.relational.GreaterThan;
import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
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.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.NotEqualsTo;
import net.sf.jsqlparser.expression.operators.relational.RegExpMatchOperator;
import net.sf.jsqlparser.expression.operators.relational.RegExpMySQLOperator;
import net.sf.jsqlparser.expression.operators.relational.SimilarToExpression;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.statement.select.AllColumns;
import net.sf.jsqlparser.statement.select.AllTableColumns;
import net.sf.jsqlparser.statement.select.SubSelect;
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
import net.sf.jsqlparser.statement.select.Select;

public interface ExpressionVisitor {

Expand Down Expand Up @@ -69,7 +100,7 @@ public interface ExpressionVisitor {

void visit(Between between);

void visit (OverlapsCondition overlapsCondition);
void visit(OverlapsCondition overlapsCondition);

void visit(EqualsTo equalsTo);

Expand All @@ -93,9 +124,9 @@ public interface ExpressionVisitor {

void visit(NotEqualsTo notEqualsTo);

void visit(Column tableColumn);
void visit(ParenthesedSelect selectBody);

void visit(SubSelect subSelect);
void visit(Column tableColumn);

void visit(CaseExpression caseExpression);

Expand Down Expand Up @@ -194,4 +225,6 @@ public interface ExpressionVisitor {
void visit(IsDistinctExpression isDistinctExpression);

void visit(GeometryDistance geometryDistance);

void visit(Select selectBody);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,30 +9,66 @@
*/
package net.sf.jsqlparser.expression;

import net.sf.jsqlparser.expression.operators.arithmetic.*;
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift;
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor;
import net.sf.jsqlparser.expression.operators.arithmetic.Concat;
import net.sf.jsqlparser.expression.operators.arithmetic.Division;
import net.sf.jsqlparser.expression.operators.arithmetic.IntegerDivision;
import net.sf.jsqlparser.expression.operators.arithmetic.Modulo;
import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication;
import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
import net.sf.jsqlparser.expression.operators.conditional.XorExpression;
import net.sf.jsqlparser.expression.operators.relational.*;
import net.sf.jsqlparser.expression.operators.relational.Between;
import net.sf.jsqlparser.expression.operators.relational.EqualsTo;
import net.sf.jsqlparser.expression.operators.relational.ExistsExpression;
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
import net.sf.jsqlparser.expression.operators.relational.FullTextSearch;
import net.sf.jsqlparser.expression.operators.relational.GeometryDistance;
import net.sf.jsqlparser.expression.operators.relational.GreaterThan;
import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals;
import net.sf.jsqlparser.expression.operators.relational.InExpression;
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;
import net.sf.jsqlparser.expression.operators.relational.SimilarToExpression;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.statement.create.table.ColumnDefinition;
import net.sf.jsqlparser.statement.select.AllColumns;
import net.sf.jsqlparser.statement.select.AllTableColumns;
import net.sf.jsqlparser.statement.select.ExpressionListItem;
import net.sf.jsqlparser.statement.select.FunctionItem;
import net.sf.jsqlparser.statement.select.OrderByElement;
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
import net.sf.jsqlparser.statement.select.Pivot;
import net.sf.jsqlparser.statement.select.PivotVisitor;
import net.sf.jsqlparser.statement.select.PivotXml;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItemVisitor;
import net.sf.jsqlparser.statement.select.SelectVisitor;
import net.sf.jsqlparser.statement.select.SubSelect;
import net.sf.jsqlparser.statement.select.UnPivot;
import net.sf.jsqlparser.statement.select.WithItem;

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

private SelectVisitor selectVisitor;

Expand Down Expand Up @@ -237,17 +273,17 @@ public void visit(Column column) {
}

@Override
public void visit(SubSelect subSelect) {
public void visit(ParenthesedSelect selectBody) {
if (selectVisitor != null) {
if (subSelect.getWithItemsList() != null) {
for (WithItem item : subSelect.getWithItemsList()) {
if (selectBody.getWithItemsList() != null) {
for (WithItem item : selectBody.getWithItemsList()) {
item.accept(selectVisitor);
}
}
subSelect.getSelectBody().accept(selectVisitor);
selectBody.accept(selectVisitor);
}
if (subSelect.getPivot() != null) {
subSelect.getPivot().accept(this);
if (selectBody.getPivot() != null) {
selectBody.getPivot().accept(this);
}
}

Expand All @@ -274,7 +310,7 @@ public void visit(WhenClause expr) {
public void visit(ExistsExpression expr) {
expr.getRightExpression().accept(this);
}

@Override
public void visit(AnyComparisonExpression expr) {

Expand Down Expand Up @@ -356,8 +392,7 @@ public void visit(ExtractExpression expr) {
}

@Override
public void visit(IntervalExpression expr) {
}
public void visit(IntervalExpression expr) {}

@Override
public void visit(OracleHierarchicalExpression expr) {
Expand Down Expand Up @@ -502,16 +537,13 @@ public void visit(UnPivot unpivot) {
}

@Override
public void visit(AllColumns allColumns) {
}
public void visit(AllColumns allColumns) {}

@Override
public void visit(AllTableColumns allTableColumns) {
}
public void visit(AllTableColumns allTableColumns) {}

@Override
public void visit(AllValue allValue) {
}
public void visit(AllValue allValue) {}

@Override
public void visit(IsDistinctExpression isDistinctExpression) {
Expand All @@ -526,9 +558,9 @@ public void visit(SelectExpressionItem selectExpressionItem) {
@Override
public void visit(RowConstructor rowConstructor) {
if (rowConstructor.getColumnDefinitions().isEmpty()) {
for (Expression expression: rowConstructor.getExprList().getExpressions()) {
for (Expression expression : rowConstructor.getExprList().getExpressions()) {
expression.accept(this);
}
}
} else {
for (ColumnDefinition columnDefinition : rowConstructor.getColumnDefinitions()) {
columnDefinition.accept(this);
Expand Down Expand Up @@ -557,12 +589,10 @@ public void visit(TimeKeyExpression timeKeyExpression) {
}

@Override
public void visit(DateTimeLiteralExpression literal) {
}
public void visit(DateTimeLiteralExpression literal) {}

@Override
public void visit(NextValExpression nextVal) {
}
public void visit(NextValExpression nextVal) {}

@Override
public void visit(CollateExpression col) {
Expand Down Expand Up @@ -617,19 +647,19 @@ public void visit(TimezoneExpression expr) {
@Override
public void visit(JsonAggregateFunction expression) {
Expression expr = expression.getExpression();
if (expr!=null) {
if (expr != null) {
expr.accept(this);
}

expr = expression.getFilterExpression();
if (expr!=null) {
if (expr != null) {
expr.accept(this);
}
}

@Override
public void visit(JsonFunction expression) {
for (JsonFunctionExpression expr: expression.getExpressions()) {
for (JsonFunctionExpression expr : expression.getExpressions()) {
expr.getExpression().accept(this);
}
}
Expand All @@ -638,7 +668,7 @@ public void visit(JsonFunction expression) {
public void visit(ConnectByRootOperator connectByRootOperator) {
connectByRootOperator.getColumn().accept(this);
}

@Override
public void visit(OracleNamedFunctionParameter oracleNamedFunctionParameter) {
oracleNamedFunctionParameter.getExpression().accept(this);
Expand All @@ -649,7 +679,12 @@ public void visit(GeometryDistance geometryDistance) {
visitBinaryExpression(geometryDistance);
}

@Override
public void visit(Select selectBody) {

}

public void visit(ColumnDefinition columnDefinition) {
columnDefinition.accept(this);
}
columnDefinition.accept(this);
}
}
Loading