Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ hikaricp = '6.2.0'
postgresql = '42.7.4'
sqlite = '3.47.0.0'
schemacrawler = '16.22.3'
jsqlparser = '3.2'
jsqlparser = '5.0'
jts = '1.20.0'
commonmark = '0.24.0'
vectortile = '1.3.23'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,21 @@
import java.util.Objects;
import java.util.Optional;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.parser.CCJSqlParser;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.parser.ParseException;
import net.sf.jsqlparser.parser.StringProvider;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
import net.sf.jsqlparser.statement.select.FromItemVisitorAdapter;
import net.sf.jsqlparser.statement.select.ParenthesedFromItem;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItem;
import net.sf.jsqlparser.statement.select.SelectItemVisitorAdapter;
import net.sf.jsqlparser.statement.select.SubJoin;
import net.sf.jsqlparser.util.TablesNamesFinder;

public class ViewInfo {
Expand All @@ -35,15 +37,23 @@ public static List<String> getOriginalTables(String viewDefinition) {
try {
PlainSelect select = parse(viewDefinition);

TablesNamesFinder tablesNamesFinder =
new TablesNamesFinder() {
TablesNamesFinder<Void> tablesNamesFinder =
new TablesNamesFinder<Void>() {
@Override
protected String extractTableName(Table table) {
return table.getName();
}
};

return tablesNamesFinder.getTableList(statementVisitor -> select.accept(tablesNamesFinder));
Statement statementVisitor =
new Statement() {
@Override
public <T, S> T accept(StatementVisitor<T> statementVisitor, S s) {
return select.accept(statementVisitor, null);
}
};

return tablesNamesFinder.getTableList(statementVisitor);

} catch (JSQLParserException | ParseException e) {
// ignore
Expand Down Expand Up @@ -74,11 +84,11 @@ private static Optional<Tuple<String, String>> getOriginalTableAndColumn(
ImmutableTuple.Builder<String, String> builder =
ImmutableTuple.<String, String>builder().second(columnName);

for (SelectItem selectItem : select.getSelectItems()) {
for (SelectItem<? extends Expression> selectItem : select.getSelectItems()) {
selectItem.accept(
new SelectItemVisitorAdapter() {
new SelectItemVisitorAdapter<Void>() {
@Override
public void visit(SelectExpressionItem item) {
public void visit(SelectItem<? extends Expression> item) {
if (item.getExpression() instanceof Column) {
Column column = (Column) item.getExpression();

Expand All @@ -90,7 +100,8 @@ public void visit(SelectExpressionItem item) {
}
}
}
});
},
null);
}
try {
return Optional.of(builder.build());
Expand All @@ -109,7 +120,7 @@ private static Tuple<String, String> resolveTableAlias(
select
.getFromItem()
.accept(
new FromItemVisitorAdapter() {
new FromItemVisitorAdapter<Void>() {
@Override
public void visit(Table tableName) {
if (Objects.nonNull(tableName.getAlias())
Expand All @@ -119,9 +130,9 @@ public void visit(Table tableName) {
}

@Override
public void visit(SubJoin subjoin) {
subjoin.getLeft().accept(this);
subjoin.getJoinList().forEach(join -> join.getRightItem().accept(this));
public void visit(ParenthesedFromItem subjoin) {
subjoin.getFromItem().accept(this);
subjoin.getJoins().forEach(join -> join.getRightItem().accept(this));
}
});

Expand Down