/* * #%L * model * %% * Copyright (C) 2012 - 2015 valdasraps * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Lesser Public License for more details. * * You should have received a copy of the GNU General Lesser Public * License along with this program. If not, see * <http://www.gnu.org/licenses/lgpl-3.0.html>. * #L% */ package lt.emasina.resthub.parser; import java.util.Iterator; import net.sf.jsqlparser.expression.AnalyticExpression; import net.sf.jsqlparser.expression.BinaryExpression; import net.sf.jsqlparser.expression.CaseExpression; import net.sf.jsqlparser.expression.CastExpression; 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.NullValue; import net.sf.jsqlparser.expression.NumericBind; 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.TimeValue; import net.sf.jsqlparser.expression.TimestampValue; import net.sf.jsqlparser.expression.UserVariable; import net.sf.jsqlparser.expression.WhenClause; import net.sf.jsqlparser.expression.WithinGroupExpression; import net.sf.jsqlparser.expression.operators.arithmetic.Addition; import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd; import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr; 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.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.GreaterThan; import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals; import net.sf.jsqlparser.expression.operators.relational.InExpression; import net.sf.jsqlparser.expression.operators.relational.IsNullExpression; import net.sf.jsqlparser.expression.operators.relational.ItemsListVisitor; 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.NotEqualsTo; import net.sf.jsqlparser.expression.operators.relational.RegExpMySQLOperator; import net.sf.jsqlparser.schema.Column; import net.sf.jsqlparser.expression.OracleHint; /** * SelectParser * @author valdo */ public abstract class AbstractExpressionParser implements ExpressionVisitor, ItemsListVisitor { // ExpressionVisitor @Override public void visit(NullValue nv) { // Fine } @Override public void visit(Function fnctn) { if (fnctn.getParameters() != null) { for (Iterator it = fnctn.getParameters().getExpressions().iterator(); it.hasNext();) { ((Expression) it.next()).accept(this); } } } @Override public void visit(JdbcParameter jp) { } @Override public void visit(DoubleValue dv) { } @Override public void visit(LongValue lv) { } @Override public void visit(DateValue dv) { } @Override public void visit(TimeValue tv) { } @Override public void visit(TimestampValue tv) { } @Override public void visit(Parenthesis prnths) { prnths.getExpression().accept(this); } @Override public void visit(StringValue sv) { } @Override public void visit(Addition adtn) { visitBinaryExpression(adtn); } @Override public void visit(Division dvsn) { visitBinaryExpression(dvsn); } @Override public void visit(Multiplication m) { visitBinaryExpression(m); } @Override public void visit(Subtraction s) { visitBinaryExpression(s); } @Override public void visit(AndExpression ae) { visitBinaryExpression(ae); } @Override public void visit(OrExpression oe) { visitBinaryExpression(oe); } @Override public void visit(Between btwn) { btwn.getLeftExpression().accept(this); btwn.getBetweenExpressionStart().accept(this); btwn.getBetweenExpressionEnd().accept(this); } @Override public void visit(EqualsTo et) { visitBinaryExpression(et); } @Override public void visit(GreaterThan gt) { visitBinaryExpression(gt); } @Override public void visit(GreaterThanEquals gte) { visitBinaryExpression(gte); } @Override public void visit(InExpression ie) { if (ie.getLeftExpression() != null) { ie.getLeftExpression().accept(this); } if (ie.getLeftItemsList() != null) { ie.getLeftItemsList().accept(this); } ie.getRightItemsList().accept(this); } @Override public void visit(IsNullExpression ine) { ine.getLeftExpression().accept(this); } @Override public void visit(LikeExpression le) { visitBinaryExpression(le); } @Override public void visit(MinorThan mt) { visitBinaryExpression(mt); } @Override public void visit(MinorThanEquals mte) { visitBinaryExpression(mte); } @Override public void visit(NotEqualsTo net) { visitBinaryExpression(net); } @Override public void visit(Column column) { } @Override public void visit(CaseExpression ce) { for (Iterator it = ce.getWhenClauses().iterator(); it.hasNext();) { ((WhenClause) it.next()).accept(this); } ce.getSwitchExpression().accept(this); ce.getElseExpression().accept(this); } @Override public void visit(WhenClause wc) { wc.getWhenExpression().accept(this); wc.getThenExpression().accept(this); } @Override public void visit(ExistsExpression ee) { ee.getRightExpression().accept(this); } @Override public void visit(Concat concat) { visitBinaryExpression(concat); } @Override public void visit(Matches mtchs) { visitBinaryExpression(mtchs); } @Override public void visit(BitwiseAnd ba) { visitBinaryExpression(ba); } @Override public void visit(BitwiseOr bo) { visitBinaryExpression(bo); } @Override public void visit(BitwiseXor bx) { visitBinaryExpression(bx); } @Override public void visit(JdbcNamedParameter jdbcNamedParameter) { } @Override public void visit(CastExpression cast) { cast.getLeftExpression().accept(this); } @Override public void visit(Modulo modulo) { visitBinaryExpression(modulo); } @Override public void visit(AnalyticExpression aexpr) { aexpr.getExpression().accept(this); } @Override public void visit(ExtractExpression eexpr) { eexpr.getExpression().accept(this); } @Override public void visit(IntervalExpression iexpr) { } // ItemsListVisitor @Override public void visit(ExpressionList el) { for (Iterator it = el.getExpressions().iterator(); it.hasNext();) { ((Expression) it.next()).accept(this); } } @Override public void visit(MultiExpressionList multiExprList) { for (ExpressionList expl: multiExprList.getExprList()) { expl.accept(this); } } // Utility protected void visitBinaryExpression(BinaryExpression be) { be.getLeftExpression().accept(this); be.getRightExpression().accept(this); } @Override public void visit(HexValue hv) { } @Override public void visit(WithinGroupExpression wge) { wge.getExprList().accept(this); } @Override public void visit(JsonExpression je) { je.getColumn().accept(this); } @Override public void visit(RegExpMySQLOperator rmsql) { rmsql.getLeftExpression().accept(this); rmsql.getRightExpression().accept(this); } @Override public void visit(UserVariable uv) { } @Override public void visit(NumericBind nb) { } @Override public void visit(KeepExpression ke) { } @Override public void visit(MySQLGroupConcat msqlgc) { msqlgc.getExpressionList().accept(this); } @Override public void visit(RowConstructor rc) { rc.getExprList().accept(this); } @Override public void visit(SignedExpression se) { } @Override public void visit(OracleHint hint) { } }