de.mhus.lib.adb.ParserJdbc Maven / Gradle / Ivy
/**
* Copyright (C) 2020 Mike Hummel ([email protected])
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.mhus.lib.adb;
import java.util.LinkedList;
import java.util.List;
import de.mhus.lib.basics.RC;
import de.mhus.lib.errors.MRuntimeException;
import net.sf.jsqlparser.expression.AllComparisonExpression;
import net.sf.jsqlparser.expression.AnalyticExpression;
import net.sf.jsqlparser.expression.AnyComparisonExpression;
import net.sf.jsqlparser.expression.ArrayExpression;
import net.sf.jsqlparser.expression.CaseExpression;
import net.sf.jsqlparser.expression.CastExpression;
import net.sf.jsqlparser.expression.CollateExpression;
import net.sf.jsqlparser.expression.DateTimeLiteralExpression;
import net.sf.jsqlparser.expression.DateValue;
import net.sf.jsqlparser.expression.DoubleValue;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.ExtractExpression;
import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.expression.HexValue;
import net.sf.jsqlparser.expression.IntervalExpression;
import net.sf.jsqlparser.expression.JdbcNamedParameter;
import net.sf.jsqlparser.expression.JdbcParameter;
import net.sf.jsqlparser.expression.JsonExpression;
import net.sf.jsqlparser.expression.KeepExpression;
import net.sf.jsqlparser.expression.LongValue;
import net.sf.jsqlparser.expression.MySQLGroupConcat;
import net.sf.jsqlparser.expression.NextValExpression;
import net.sf.jsqlparser.expression.NotExpression;
import net.sf.jsqlparser.expression.NullValue;
import net.sf.jsqlparser.expression.NumericBind;
import net.sf.jsqlparser.expression.OracleHierarchicalExpression;
import net.sf.jsqlparser.expression.OracleHint;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.RowConstructor;
import net.sf.jsqlparser.expression.SignedExpression;
import net.sf.jsqlparser.expression.StringValue;
import net.sf.jsqlparser.expression.TimeKeyExpression;
import net.sf.jsqlparser.expression.TimeValue;
import net.sf.jsqlparser.expression.TimestampValue;
import net.sf.jsqlparser.expression.UserVariable;
import net.sf.jsqlparser.expression.ValueListExpression;
import net.sf.jsqlparser.expression.WhenClause;
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.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.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.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.schema.Table;
import net.sf.jsqlparser.statement.Block;
import net.sf.jsqlparser.statement.Commit;
import net.sf.jsqlparser.statement.DeclareStatement;
import net.sf.jsqlparser.statement.DescribeStatement;
import net.sf.jsqlparser.statement.ExplainStatement;
import net.sf.jsqlparser.statement.SetStatement;
import net.sf.jsqlparser.statement.ShowColumnsStatement;
import net.sf.jsqlparser.statement.ShowStatement;
import net.sf.jsqlparser.statement.StatementVisitor;
import net.sf.jsqlparser.statement.Statements;
import net.sf.jsqlparser.statement.UseStatement;
import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.comment.Comment;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
import net.sf.jsqlparser.statement.create.table.CreateTable;
import net.sf.jsqlparser.statement.create.view.AlterView;
import net.sf.jsqlparser.statement.create.view.CreateView;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.drop.Drop;
import net.sf.jsqlparser.statement.execute.Execute;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.merge.Merge;
import net.sf.jsqlparser.statement.replace.Replace;
import net.sf.jsqlparser.statement.select.AllColumns;
import net.sf.jsqlparser.statement.select.AllTableColumns;
import net.sf.jsqlparser.statement.select.FromItemVisitor;
import net.sf.jsqlparser.statement.select.Join;
import net.sf.jsqlparser.statement.select.LateralSubSelect;
import net.sf.jsqlparser.statement.select.OrderByElement;
import net.sf.jsqlparser.statement.select.OrderByVisitor;
import net.sf.jsqlparser.statement.select.ParenthesisFromItem;
import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SelectBody;
import net.sf.jsqlparser.statement.select.SelectExpressionItem;
import net.sf.jsqlparser.statement.select.SelectItem;
import net.sf.jsqlparser.statement.select.SelectItemVisitor;
import net.sf.jsqlparser.statement.select.SelectVisitor;
import net.sf.jsqlparser.statement.select.SetOperationList;
import net.sf.jsqlparser.statement.select.SubJoin;
import net.sf.jsqlparser.statement.select.SubSelect;
import net.sf.jsqlparser.statement.select.TableFunction;
import net.sf.jsqlparser.statement.select.ValuesList;
import net.sf.jsqlparser.statement.select.WithItem;
import net.sf.jsqlparser.statement.truncate.Truncate;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.statement.upsert.Upsert;
import net.sf.jsqlparser.statement.values.ValuesStatement;
public class ParserJdbc
implements QueryParser,
SelectVisitor,
FromItemVisitor,
ExpressionVisitor,
ItemsListVisitor,
SelectItemVisitor,
StatementVisitor,
OrderByVisitor {
private static final String NOT_SUPPORTED_YET = "Not supported yet.";
private String entityName;
private Class> entity;
private DbManager manager;
private LinkedList columns = new LinkedList<>();
private StringBuilder sql = null;
@Override
public void visit(Select select) {
if (select.getWithItemsList() != null) {
for (WithItem withItem : select.getWithItemsList()) {
withItem.accept(this);
}
}
select.getSelectBody().accept(this);
}
@Override
public void visit(WithItem withItem) {
withItem.getSelectBody().accept(this);
}
@Override
public void visit(PlainSelect plainSelect) {
if (plainSelect.getSelectItems() != null) {
for (SelectItem item : plainSelect.getSelectItems()) {
item.accept(this);
}
}
if (plainSelect.getFromItem() != null) {
plainSelect.getFromItem().accept(this);
}
if (plainSelect.getJoins() != null) {
for (Join join : plainSelect.getJoins()) {
join.getRightItem().accept(this);
}
}
if (plainSelect.getWhere() != null) {
plainSelect.getWhere().accept(this);
}
if (plainSelect.getHaving() != null) {
plainSelect.getHaving().accept(this);
}
if (plainSelect.getOracleHierarchical() != null) {
plainSelect.getOracleHierarchical().accept(this);
}
if (plainSelect.getOrderByElements() != null) {
sql.append(" ORDER BY ");
boolean first = true;
for (OrderByElement order : plainSelect.getOrderByElements()) {
if (!first) sql.append(",");
order.accept(this);
first = false;
}
}
if (plainSelect.getLimit() != null && !plainSelect.getLimit().isLimitAll()) {
sql.append(" LIMIT " + plainSelect.getLimit().getRowCount());
}
}
@Override
public void visit(Table tableName) {
if (entityName != null)
throw new MRuntimeException(RC.ERROR, "only one table is supported");
entityName = tableName.getFullyQualifiedName().toLowerCase();
if (manager != null) {
try {
entity = manager.getType(entityName).newInstance().getClass();
} catch (Exception e) {
throw new MRuntimeException(RC.STATUS.ERROR, entityName, e);
}
}
}
@Override
public void visit(SubSelect subSelect) {
if (subSelect.getWithItemsList() != null) {
for (WithItem withItem : subSelect.getWithItemsList()) {
withItem.accept(this);
}
}
subSelect.getSelectBody().accept(this);
}
@Override
public void visit(Addition expression) {
expression.getLeftExpression().accept(this);
sql.append("+");
expression.getRightExpression().accept(this);
}
@Override
public void visit(AndExpression expression) {
expression.getLeftExpression().accept(this);
sql.append(" AND ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(Between between) {
between.getLeftExpression().accept(this);
between.getBetweenExpressionStart().accept(this);
between.getBetweenExpressionEnd().accept(this);
}
@Override
public void visit(Column tableColumn) {
// if (tableColumn.getTable() != null && tableColumn.getTable().getName() != null) {
// visit(tableColumn.getTable());
// }
if (entityName == null) columns.add(tableColumn.toString());
else
sql.append("$db.")
.append(entityName)
.append(".")
.append(tableColumn.toString().toLowerCase())
.append("$");
}
@Override
public void visit(Division expression) {
expression.getLeftExpression().accept(this);
sql.append("/");
expression.getRightExpression().accept(this);
}
@Override
public void visit(IntegerDivision expression) {
expression.getLeftExpression().accept(this);
sql.append("/");
expression.getRightExpression().accept(this);
}
@Override
public void visit(DoubleValue doubleValue) {
sql.append(doubleValue.getValue());
}
@Override
public void visit(EqualsTo expression) {
expression.getLeftExpression().accept(this);
sql.append(" = ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(Function function) {
ExpressionList exprList = function.getParameters();
sql.append(function.getName()).append("(");
if (exprList != null) {
visit(exprList);
}
sql.append(")");
}
@Override
public void visit(GreaterThan expression) {
expression.getLeftExpression().accept(this);
sql.append(" > ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(GreaterThanEquals expression) {
expression.getLeftExpression().accept(this);
sql.append(" >= ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(InExpression inExpression) {
if (inExpression.getLeftExpression() != null) {
inExpression.getLeftExpression().accept(this);
} else if (inExpression.getLeftItemsList() != null) {
inExpression.getLeftItemsList().accept(this);
}
sql.append(" IN (");
inExpression.getRightItemsList().accept(this);
sql.append(")");
}
@Override
public void visit(FullTextSearch fullTextSearch) {}
@Override
public void visit(SignedExpression signedExpression) {
signedExpression.getExpression().accept(this);
}
@Override
public void visit(IsNullExpression isNullExpression) {
sql.append(" IS NULL ");
}
@Override
public void visit(IsBooleanExpression isBooleanExpression) {}
@Override
public void visit(JdbcParameter jdbcParameter) {
sql.append("$").append(jdbcParameter.getIndex()).append("$");
}
@Override
public void visit(LikeExpression expression) {
expression.getLeftExpression().accept(this);
sql.append(" LIKE ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(ExistsExpression existsExpression) {
existsExpression.getRightExpression().accept(this);
}
@Override
public void visit(LongValue longValue) {
sql.append(longValue.getStringValue());
}
@Override
public void visit(MinorThan expression) {
expression.getLeftExpression().accept(this);
sql.append(" < ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(MinorThanEquals expression) {
expression.getLeftExpression().accept(this);
sql.append(" <= ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(Multiplication expression) {
expression.getLeftExpression().accept(this);
sql.append("*");
expression.getRightExpression().accept(this);
}
@Override
public void visit(NotEqualsTo expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(NullValue nullValue) {}
@Override
public void visit(OrExpression expression) {
expression.getLeftExpression().accept(this);
sql.append(" OR ");
expression.getRightExpression().accept(this);
}
@Override
public void visit(Parenthesis parenthesis) {
sql.append("(");
parenthesis.getExpression().accept(this);
sql.append(")");
}
@Override
public void visit(StringValue stringValue) {
sql.append(stringValue);
}
@Override
public void visit(Subtraction expression) {
expression.getLeftExpression().accept(this);
sql.append("-");
expression.getRightExpression().accept(this);
}
@Override
public void visit(NotExpression notExpr) {
sql.append(" NOT ");
notExpr.getExpression().accept(this);
}
@Override
public void visit(BitwiseRightShift expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(BitwiseLeftShift expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(ExpressionList expressionList) {
for (Expression expression : expressionList.getExpressions()) {
expression.accept(this);
}
}
@Override
public void visit(NamedExpressionList namedExpressionList) {
for (Expression expression : namedExpressionList.getExpressions()) {
expression.accept(this);
}
}
@Override
public void visit(DateValue dateValue) {
sql.append(dateValue); // TODO
}
@Override
public void visit(TimestampValue timestampValue) {
sql.append(timestampValue); // TODO
}
@Override
public void visit(TimeValue timeValue) {
sql.append(timeValue); // TODO
}
/*
* (non-Javadoc)
*
* @see net.sf.jsqlparser.expression.ExpressionVisitor#visit(net.sf.jsqlparser.expression.CaseExpression)
*/
@Override
public void visit(CaseExpression caseExpression) {
if (caseExpression.getSwitchExpression() != null) {
caseExpression.getSwitchExpression().accept(this);
}
if (caseExpression.getWhenClauses() != null) {
for (WhenClause when : caseExpression.getWhenClauses()) {
when.accept(this);
}
}
if (caseExpression.getElseExpression() != null) {
caseExpression.getElseExpression().accept(this);
}
}
/*
* (non-Javadoc)
*
* @see net.sf.jsqlparser.expression.ExpressionVisitor#visit(net.sf.jsqlparser.expression.WhenClause)
*/
@Override
public void visit(WhenClause whenClause) {
if (whenClause.getWhenExpression() != null) {
whenClause.getWhenExpression().accept(this);
}
if (whenClause.getThenExpression() != null) {
whenClause.getThenExpression().accept(this);
}
}
@Override
public void visit(AllComparisonExpression allComparisonExpression) {
allComparisonExpression.getSubSelect().getSelectBody().accept(this);
}
@Override
public void visit(AnyComparisonExpression anyComparisonExpression) {
anyComparisonExpression.getSubSelect().getSelectBody().accept(this);
}
@Override
public void visit(SubJoin subjoin) {
subjoin.getLeft().accept(this);
for (Join join : subjoin.getJoinList()) {
join.getRightItem().accept(this);
}
}
@Override
public void visit(Concat expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(Matches expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(BitwiseAnd expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(BitwiseOr expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(BitwiseXor expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(CastExpression cast) {
cast.getLeftExpression().accept(this);
}
@Override
public void visit(Modulo expression) {
expression.getLeftExpression().accept(this);
sql.append("%");
expression.getRightExpression().accept(this);
}
@Override
public void visit(AnalyticExpression analytic) {}
@Override
public void visit(SetOperationList list) {
for (SelectBody plainSelect : list.getSelects()) {
plainSelect.accept(this);
}
}
@Override
public void visit(ExtractExpression eexpr) {}
@Override
public void visit(LateralSubSelect lateralSubSelect) {
lateralSubSelect.getSubSelect().getSelectBody().accept(this);
}
@Override
public void visit(MultiExpressionList multiExprList) {
for (ExpressionList exprList : multiExprList.getExprList()) {
exprList.accept(this);
}
}
@Override
public void visit(ValuesList valuesList) {
sql.append("(");
valuesList.accept(this);
sql.append(")");
}
public void init(DbManager manager) {
this.manager = manager;
entityName = null;
entity = null;
sql = new StringBuilder();
}
@Override
public void visit(IntervalExpression iexpr) {}
@Override
public void visit(JdbcNamedParameter jdbcNamedParameter) {}
@Override
public void visit(OracleHierarchicalExpression oexpr) {
if (oexpr.getStartExpression() != null) {
oexpr.getStartExpression().accept(this);
}
if (oexpr.getConnectExpression() != null) {
oexpr.getConnectExpression().accept(this);
}
}
@Override
public void visit(RegExpMatchOperator expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(RegExpMySQLOperator expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(JsonExpression jsonExpr) {}
@Override
public void visit(JsonOperator jsonExpr) {}
@Override
public void visit(AllColumns allColumns) {
columns.add(allColumns.toString());
}
@Override
public void visit(AllTableColumns allTableColumns) {}
@Override
public void visit(SelectExpressionItem item) {
item.getExpression().accept(this);
}
@Override
public void visit(UserVariable var) {}
@Override
public void visit(NumericBind bind) {}
@Override
public void visit(KeepExpression aexpr) {}
@Override
public void visit(MySQLGroupConcat groupConcat) {}
@Override
public void visit(ValueListExpression valueList) {
valueList.getExpressionList().accept(this);
}
@Override
public void visit(Delete delete) {
visit(delete.getTable());
if (delete.getJoins() != null) {
for (Join join : delete.getJoins()) {
join.getRightItem().accept(this);
}
}
if (delete.getWhere() != null) {
delete.getWhere().accept(this);
}
}
@Override
public void visit(Update update) {
visit(update.getTable());
if (update.getStartJoins() != null) {
for (Join join : update.getStartJoins()) {
join.getRightItem().accept(this);
}
}
if (update.getExpressions() != null) {
for (Expression expression : update.getExpressions()) {
expression.accept(this);
}
}
if (update.getFromItem() != null) {
update.getFromItem().accept(this);
}
if (update.getJoins() != null) {
for (Join join : update.getJoins()) {
join.getRightItem().accept(this);
}
}
if (update.getWhere() != null) {
update.getWhere().accept(this);
}
}
@Override
public void visit(Insert insert) {
visit(insert.getTable());
if (insert.getItemsList() != null) {
insert.getItemsList().accept(this);
}
if (insert.getSelect() != null) {
visit(insert.getSelect());
}
}
@Override
public void visit(Replace replace) {
visit(replace.getTable());
if (replace.getExpressions() != null) {
for (Expression expression : replace.getExpressions()) {
expression.accept(this);
}
}
if (replace.getItemsList() != null) {
replace.getItemsList().accept(this);
}
}
@Override
public void visit(Drop drop) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(Truncate truncate) {
visit(truncate.getTable());
}
@Override
public void visit(CreateIndex createIndex) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(CreateTable create) {
visit(create.getTable());
if (create.getSelect() != null) {
create.getSelect().accept(this);
}
}
@Override
public void visit(CreateView createView) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(Alter alter) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(Statements stmts) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(Execute execute) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(SetStatement set) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(ShowColumnsStatement set) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(RowConstructor rowConstructor) {
for (Expression expr : rowConstructor.getExprList().getExpressions()) {
expr.accept(this);
}
}
@Override
public void visit(HexValue hexValue) {}
@Override
public void visit(Merge merge) {
visit(merge.getTable());
if (merge.getUsingTable() != null) {
merge.getUsingTable().accept(this);
} else if (merge.getUsingSelect() != null) {
merge.getUsingSelect().accept((FromItemVisitor) this);
}
}
@Override
public void visit(OracleHint hint) {}
@Override
public void visit(TableFunction valuesList) {}
@Override
public void visit(AlterView alterView) {
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
}
@Override
public void visit(TimeKeyExpression timeKeyExpression) {}
@Override
public void visit(DateTimeLiteralExpression literal) {}
@Override
public void visit(Commit commit) {}
@Override
public void visit(Upsert upsert) {
visit(upsert.getTable());
if (upsert.getItemsList() != null) {
upsert.getItemsList().accept(this);
}
if (upsert.getSelect() != null) {
visit(upsert.getSelect());
}
}
@Override
public void visit(UseStatement use) {}
@Override
public void visit(ParenthesisFromItem parenthesis) {
parenthesis.getFromItem().accept(this);
}
@Override
public void visit(Block block) {
if (block.getStatements() != null) {
visit(block.getStatements());
}
}
@Override
public void visit(Comment comment) {
if (comment.getTable() != null) {
visit(comment.getTable());
}
if (comment.getColumn() != null) {
Table table = comment.getColumn().getTable();
if (table != null) {
visit(table);
}
}
}
@Override
public void visit(ValuesStatement values) {
for (Expression expr : values.getExpressions()) {
expr.accept(this);
}
}
@Override
public void visit(DescribeStatement describe) {
describe.getTable().accept(this);
}
@Override
public void visit(ExplainStatement explain) {
explain.getStatement().accept(this);
}
@Override
public void visit(NextValExpression nextVal) {}
@Override
public void visit(CollateExpression col) {
col.getLeftExpression().accept(this);
}
@Override
public void visit(ShowStatement aThis) {}
@Override
public void visit(SimilarToExpression expression) {
expression.getLeftExpression().accept(this);
expression.getRightExpression().accept(this);
}
@Override
public void visit(DeclareStatement aThis) {}
@Override
public void visit(ArrayExpression array) {
array.getObjExpression().accept(this);
array.getIndexExpression().accept(this);
}
@Override
public String getEntityName() {
return entityName;
}
public Class> getEntity() {
return entity;
}
@Override
public String getQualification() {
return sql.toString();
}
@Override
public List getColumnNames() {
return columns;
}
@Override
public void visit(OrderByElement orderBy) {
orderBy.getExpression().accept(this);
if (orderBy.isAsc()) sql.append(" ASC");
else sql.append(" DESC");
}
}