Skip to content

Commit 3dee404

Browse files
authored
Merge pull request #818 from tomershay/support_div_operator
Adding support for the DIV operator
2 parents aa3bc78 + c8bbc0f commit 3dee404

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.*;
@@ -62,6 +52,8 @@ public interface ExpressionVisitor {
6252

6353
void visit(Division division);
6454

55+
void visit(IntegerDivision division);
56+
6557
void visit(Multiplication multiplication);
6658

6759
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.*;
@@ -244,6 +234,11 @@ public void visit(Division division) {
244234
visitBinaryExpression(division);
245235
}
246236

237+
@Override
238+
public void visit(IntegerDivision division) {
239+
visitBinaryExpression(division);
240+
}
241+
247242
@Override
248243
public void visit(DoubleValue doubleValue) {
249244
}

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.*;
@@ -134,6 +124,11 @@ public void visit(Division division) {
134124
visitBinaryExpression(division, " / ");
135125
}
136126

127+
@Override
128+
public void visit(IntegerDivision division) {
129+
visitBinaryExpression(division, " DIV ");
130+
}
131+
137132
@Override
138133
public void visit(DoubleValue doubleValue) {
139134
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">
@@ -2733,6 +2734,7 @@ Expression MultiplicativeExpression():
27332734
(
27342735
LOOKAHEAD(2) ("*" { result = new Multiplication(); }
27352736
| "/" { result = new Division(); }
2737+
| <K_DIV> { result = new IntegerDivision(); }
27362738
| "%" { result = new Modulo(); }
27372739
)
27382740

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

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

1940+
@Test
1941+
public void testIntegerDivOperator() throws Exception {
1942+
String stmt = "SELECT col DIV 3";
1943+
assertSqlCanBeParsedAndDeparsed(stmt);
1944+
}
1945+
19401946
@Test
19411947
public void testProblemSqlExcept() throws Exception {
19421948
String stmt = "(SELECT * FROM a) EXCEPT (SELECT * FROM b)";

0 commit comments

Comments
 (0)