diff --git a/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java b/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java index b35bcb792..95f12f0b9 100644 --- a/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java +++ b/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java @@ -44,6 +44,8 @@ import net.sf.jsqlparser.expression.operators.relational.MinorThanEquals; import net.sf.jsqlparser.expression.operators.relational.NotEqualsTo; import net.sf.jsqlparser.expression.operators.relational.DoubleAnd;//Added by mathew on 21st Nov 2016 +import net.sf.jsqlparser.expression.operators.relational.Contains;//Added by mathew on 21st Nov 2016 +import net.sf.jsqlparser.expression.operators.relational.ContainedBy;//Added by mathew on 21st Nov 2016 import net.sf.jsqlparser.expression.operators.relational.RegExpMatchOperator; import net.sf.jsqlparser.expression.operators.relational.SimilarToExpression; import net.sf.jsqlparser.schema.Column; @@ -127,6 +129,10 @@ public interface ExpressionVisitor { void visit(NotEqualsTo notEqualsTo); void visit(DoubleAnd doubleAnd);//Added by mathew on 21st Nov 2016 + + void visit(Contains contains);//Added by mathew on 21st Nov 2016 + + void visit(ContainedBy containedBy);//Added by mathew on 21st Nov 2016 void visit(ParenthesedSelect selectBody); diff --git a/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java b/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java index 60881666f..07b943025 100644 --- a/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java +++ b/src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java @@ -260,6 +260,19 @@ public void visit(NotEqualsTo expr) { public void visit(DoubleAnd expr) { visitBinaryExpression(expr); } + + /*Added by mathew on 21st Nov 2016*/ + @Override + public void visit(Contains expr) { + visitBinaryExpression(expr); + } + + /*Added by mathew on 21st Nov 2016*/ + @Override + public void visit(ContainedBy expr) { + visitBinaryExpression(expr); + } + @Override public void visit(Column column) { diff --git a/src/main/java/net/sf/jsqlparser/expression/operators/relational/ContainedBy.java b/src/main/java/net/sf/jsqlparser/expression/operators/relational/ContainedBy.java new file mode 100644 index 000000000..ab154f18f --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/expression/operators/relational/ContainedBy.java @@ -0,0 +1,42 @@ +/* + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2013 JSQLParser + * %% + * 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 2.1 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 + * . + * #L% + */ +/*Added by Mathew on 21st Nov 2016*/ +package net.sf.jsqlparser.expression.operators.relational; + +import net.sf.jsqlparser.expression.ExpressionVisitor; + +public class ContainedBy extends ComparisonOperator { + + public ContainedBy() { + super("<&"); + } + + public ContainedBy(String operator) { + super(operator); + } + + @Override + public void accept(ExpressionVisitor expressionVisitor) { + expressionVisitor.visit(this); + } +} + diff --git a/src/main/java/net/sf/jsqlparser/expression/operators/relational/Contains.java b/src/main/java/net/sf/jsqlparser/expression/operators/relational/Contains.java new file mode 100644 index 000000000..98dcac02d --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/expression/operators/relational/Contains.java @@ -0,0 +1,42 @@ +/* + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2013 JSQLParser + * %% + * 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 2.1 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 + * . + * #L% + */ +/*Added by Mathew on 21st Nov 2016*/ +package net.sf.jsqlparser.expression.operators.relational; + +import net.sf.jsqlparser.expression.ExpressionVisitor; + +public class Contains extends ComparisonOperator { + + public Contains() { + super("&>"); + } + + public Contains(String operator) { + super(operator); + } + + @Override + public void accept(ExpressionVisitor expressionVisitor) { + expressionVisitor.visit(this); + } +} + diff --git a/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java b/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java index 16e2caf50..c1f920e65 100644 --- a/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java +++ b/src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java @@ -477,6 +477,22 @@ public void visit(NotEqualsTo notEqualsTo) { public void visit(DoubleAnd doubleAnd) { visitBinaryExpression(doubleAnd); } + + /* Added by Mathew on 21st Nov 2016 + * + */ + @Override + public void visit(Contains contains) { + visitBinaryExpression(contains); + } + + /* Added by Mathew on 21st Nov 2016 + * + */ + @Override + public void visit(ContainedBy containedBy) { + visitBinaryExpression(containedBy); + } @Override public void visit(NullValue nullValue) { diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java index a1e7f8e9d..67feadc41 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java @@ -408,6 +408,20 @@ public void visit(DoubleAnd doubleAnd) { visitOldOracleJoinBinaryExpression(doubleAnd, " " + doubleAnd.getStringExpression() + " "); } + + /*Added by Mathew on November 21st 2016*/ + @Override + public void visit(Contains contains) { + visitOldOracleJoinBinaryExpression(contains, " " + contains.getStringExpression() + " "); + + } + + /*Added by Mathew on November 21st 2016*/ + @Override + public void visit(ContainedBy containedBy) { + visitOldOracleJoinBinaryExpression(containedBy, " " + containedBy.getStringExpression() + " "); + + } @Override public void visit(NullValue nullValue) { diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 0e12a67ed..aafbecb1d 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -489,6 +489,8 @@ TOKEN : /* Operators */ | )* "|"> | )* ">"> | /*added by mathew on 21st Nov 2016*/ +| "> /*added by mathew on 21st Nov 2016*/ +| /*added by mathew on 21st Nov 2016*/ } TOKEN : /* Date/Time with time zones */ @@ -3389,6 +3391,8 @@ Expression RegularCondition() #RegularCondition: | token= { result = new NotEqualsTo(token.image); } | token= { result = new NotEqualsTo(token.image); } | token= { result = new DoubleAnd(token.image); } + | token= { result = new DoubleAnd(token.image); } + | token= { result = new DoubleAnd(token.image); } | "@@" { result = new Matches(); } | "~" { result = new RegExpMatchOperator(RegExpMatchOperatorType.MATCH_CASESENSITIVE); } | [ { binary=true; } ] { result = new RegExpMySQLOperator(binary?RegExpMatchOperatorType.MATCH_CASESENSITIVE:RegExpMatchOperatorType.MATCH_CASEINSENSITIVE); } diff --git a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java index d161c1826..6b63cb006 100644 --- a/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/test/select/SelectTest.java @@ -1852,6 +1852,16 @@ public void testNotEqualsTo() throws JSQLParserException { public void testDoubleAnd() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("SELECT * FROM foo WHERE a && b"); } + + /*Added by Mathew on 21st Nov 2016*/ + public void testContains() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("SELECT * FROM foo WHERE a &> b"); + } + + /*Added by Mathew on 21st Nov 2016*/ + public void testContainedBy() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("SELECT * FROM foo WHERE a <& b"); + } public void testJsonExpression() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram");