Skip to content

Commit c8bbc0f

Browse files
committed
Adding support for the DIV operator
1 parent 4d100a7 commit c8bbc0f

File tree

7 files changed

+54
-33
lines changed

7 files changed

+54
-33
lines changed

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitor.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,7 @@
99
*/
1010
package net.sf.jsqlparser.expression;
1111

12-
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
13-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
14-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
15-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr;
16-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift;
17-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor;
18-
import net.sf.jsqlparser.expression.operators.arithmetic.Concat;
19-
import net.sf.jsqlparser.expression.operators.arithmetic.Division;
20-
import net.sf.jsqlparser.expression.operators.arithmetic.Modulo;
21-
import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication;
22-
import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction;
12+
import net.sf.jsqlparser.expression.operators.arithmetic.*;
2313
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
2414
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
2515
import net.sf.jsqlparser.expression.operators.relational.Between;
@@ -77,6 +67,8 @@ public interface ExpressionVisitor {
7767

7868
void visit(Division division);
7969

70+
void visit(IntegerDivision division);
71+
8072
void visit(Multiplication multiplication);
8173

8274
void visit(Subtraction subtraction);

src/main/java/net/sf/jsqlparser/expression/ExpressionVisitorAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ public void visit(Division expr) {
115115
visitBinaryExpression(expr);
116116
}
117117

118+
@Override
119+
public void visit(IntegerDivision expr) {
120+
visitBinaryExpression(expr);
121+
}
122+
118123
@Override
119124
public void visit(Multiplication expr) {
120125
visitBinaryExpression(expr);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2019 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.expression.operators.arithmetic;
11+
12+
import net.sf.jsqlparser.expression.BinaryExpression;
13+
import net.sf.jsqlparser.expression.ExpressionVisitor;
14+
15+
public class IntegerDivision extends BinaryExpression {
16+
17+
@Override
18+
public void accept(ExpressionVisitor expressionVisitor) {
19+
expressionVisitor.visit(this);
20+
}
21+
22+
@Override
23+
public String getStringExpression() {
24+
return "DIV";
25+
}
26+
}

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,7 @@
4949
import net.sf.jsqlparser.expression.UserVariable;
5050
import net.sf.jsqlparser.expression.ValueListExpression;
5151
import net.sf.jsqlparser.expression.WhenClause;
52-
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
53-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
54-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
55-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr;
56-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift;
57-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor;
58-
import net.sf.jsqlparser.expression.operators.arithmetic.Concat;
59-
import net.sf.jsqlparser.expression.operators.arithmetic.Division;
60-
import net.sf.jsqlparser.expression.operators.arithmetic.Modulo;
61-
import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication;
62-
import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction;
52+
import net.sf.jsqlparser.expression.operators.arithmetic.*;
6353
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
6454
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
6555
import net.sf.jsqlparser.expression.operators.relational.Between;
@@ -263,6 +253,11 @@ public void visit(Division division) {
263253
visitBinaryExpression(division);
264254
}
265255

256+
@Override
257+
public void visit(IntegerDivision division) {
258+
visitBinaryExpression(division);
259+
}
260+
266261
@Override
267262
public void visit(DoubleValue doubleValue) {
268263
}

src/main/java/net/sf/jsqlparser/util/deparser/ExpressionDeParser.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,17 +50,7 @@
5050
import net.sf.jsqlparser.expression.ValueListExpression;
5151
import net.sf.jsqlparser.expression.WhenClause;
5252
import net.sf.jsqlparser.expression.WindowElement;
53-
import net.sf.jsqlparser.expression.operators.arithmetic.Addition;
54-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseAnd;
55-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseLeftShift;
56-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseOr;
57-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseRightShift;
58-
import net.sf.jsqlparser.expression.operators.arithmetic.BitwiseXor;
59-
import net.sf.jsqlparser.expression.operators.arithmetic.Concat;
60-
import net.sf.jsqlparser.expression.operators.arithmetic.Division;
61-
import net.sf.jsqlparser.expression.operators.arithmetic.Modulo;
62-
import net.sf.jsqlparser.expression.operators.arithmetic.Multiplication;
63-
import net.sf.jsqlparser.expression.operators.arithmetic.Subtraction;
53+
import net.sf.jsqlparser.expression.operators.arithmetic.*;
6454
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
6555
import net.sf.jsqlparser.expression.operators.conditional.OrExpression;
6656
import net.sf.jsqlparser.expression.operators.relational.Between;
@@ -155,6 +145,11 @@ public void visit(Division division) {
155145
visitBinaryExpression(division, " / ");
156146
}
157147

148+
@Override
149+
public void visit(IntegerDivision division) {
150+
visitBinaryExpression(division, " DIV ");
151+
}
152+
158153
@Override
159154
public void visit(DoubleValue doubleValue) {
160155
buffer.append(doubleValue.toString());

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
149149
| <K_DESCRIBE:"DESCRIBE">
150150
| <K_DISABLE : "DISABLE">
151151
| <K_DISTINCT:"DISTINCT">
152+
| <K_DIV:"DIV">
152153
| <K_DO:"DO">
153154
| <K_DOUBLE : "DOUBLE">
154155
| <K_DROP:"DROP">
@@ -2715,6 +2716,7 @@ Expression MultiplicativeExpression():
27152716
(
27162717
LOOKAHEAD(2) ("*" { result = new Multiplication(); }
27172718
| "/" { result = new Division(); }
2719+
| <K_DIV> { result = new IntegerDivision(); }
27182720
| "%" { result = new Modulo(); }
27192721
)
27202722

src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1913,6 +1913,12 @@ public void testProblemSqlIntersect() throws Exception {
19131913
assertStatementCanBeDeparsedAs(parsed, "SELECT * FROM a INTERSECT SELECT * FROM b");
19141914
}
19151915

1916+
@Test
1917+
public void testIntegerDivOperator() throws Exception {
1918+
String stmt = "SELECT col DIV 3";
1919+
assertSqlCanBeParsedAndDeparsed(stmt);
1920+
}
1921+
19161922
@Test
19171923
public void testProblemSqlExcept() throws Exception {
19181924
String stmt = "(SELECT * FROM a) EXCEPT (SELECT * FROM b)";

0 commit comments

Comments
 (0)