|
10 | 10 | package net.sf.jsqlparser.expression.operators.relational; |
11 | 11 |
|
12 | 12 | import net.sf.jsqlparser.JSQLParserException; |
| 13 | +import net.sf.jsqlparser.schema.Column; |
13 | 14 | import net.sf.jsqlparser.statement.select.PlainSelect; |
14 | 15 | import net.sf.jsqlparser.test.TestUtils; |
15 | 16 | import org.junit.jupiter.api.Assertions; |
@@ -50,4 +51,78 @@ void testBetweenASymmetricIssue2250() throws JSQLParserException { |
50 | 51 | Assertions.assertFalse(between.isUsingSymmetric()); |
51 | 52 | Assertions.assertTrue(between.isUsingAsymmetric()); |
52 | 53 | } |
| 54 | + |
| 55 | + @Test |
| 56 | + void testBetweenWithOldOracleJoinSyntaxOnBothOperandsIssue672() throws JSQLParserException { |
| 57 | + String sqlStr = |
| 58 | + "SELECT * FROM table1 t1, table2 t2 WHERE t1.col1 BETWEEN t2.col2(+) AND t2.col3(+)"; |
| 59 | + PlainSelect select = (PlainSelect) TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); |
| 60 | + Between between = (Between) select.getWhere(); |
| 61 | + |
| 62 | + assertEquals(EqualsTo.ORACLE_JOIN_RIGHT, |
| 63 | + ((Column) between.getBetweenExpressionStart()).getOldOracleJoinSyntax()); |
| 64 | + assertEquals(EqualsTo.ORACLE_JOIN_RIGHT, |
| 65 | + ((Column) between.getBetweenExpressionEnd()).getOldOracleJoinSyntax()); |
| 66 | + } |
| 67 | + |
| 68 | + @Test |
| 69 | + void testBetweenWithOldOracleJoinSyntaxOnStartOperandIssue672() throws JSQLParserException { |
| 70 | + TestUtils.assertSqlCanBeParsedAndDeparsed( |
| 71 | + "SELECT * FROM table1 t1, table2 t2 WHERE t1.col1 BETWEEN t2.col2(+) AND 5", true); |
| 72 | + } |
| 73 | + |
| 74 | + @Test |
| 75 | + void testBetweenWithOldOracleJoinSyntaxOnEndOperandIssue672() throws JSQLParserException { |
| 76 | + TestUtils.assertSqlCanBeParsedAndDeparsed( |
| 77 | + "SELECT * FROM table1 t1, table2 t2 WHERE t1.col1 BETWEEN 1 AND t2.col3(+)", true); |
| 78 | + } |
| 79 | + |
| 80 | + @Test |
| 81 | + void testNotBetweenWithOldOracleJoinSyntaxIssue672() throws JSQLParserException { |
| 82 | + String sqlStr = |
| 83 | + "SELECT * FROM table1 t1, table2 t2 WHERE t1.col1 NOT BETWEEN t2.col2(+) AND t2.col3(+)"; |
| 84 | + PlainSelect select = (PlainSelect) TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); |
| 85 | + Between between = (Between) select.getWhere(); |
| 86 | + |
| 87 | + assertTrue(between.isNot()); |
| 88 | + assertEquals(EqualsTo.ORACLE_JOIN_RIGHT, |
| 89 | + ((Column) between.getBetweenExpressionStart()).getOldOracleJoinSyntax()); |
| 90 | + assertEquals(EqualsTo.ORACLE_JOIN_RIGHT, |
| 91 | + ((Column) between.getBetweenExpressionEnd()).getOldOracleJoinSyntax()); |
| 92 | + } |
| 93 | + |
| 94 | + @Test |
| 95 | + void testBetweenSymmetricWithOldOracleJoinSyntaxIssue672() throws JSQLParserException { |
| 96 | + TestUtils.assertSqlCanBeParsedAndDeparsed( |
| 97 | + "SELECT * FROM t1, t2 WHERE t1.c BETWEEN SYMMETRIC t2.c(+) AND t2.d(+)", true); |
| 98 | + } |
| 99 | + |
| 100 | + @Test |
| 101 | + void testBetweenWithOldOracleJoinSyntaxInJoinOnClauseIssue672() throws JSQLParserException { |
| 102 | + TestUtils.assertSqlCanBeParsedAndDeparsed( |
| 103 | + "SELECT * FROM t1 JOIN t2 ON t1.c BETWEEN t2.c(+) AND t2.d(+)", true); |
| 104 | + } |
| 105 | + |
| 106 | + @Test |
| 107 | + void testBetweenWithOldOracleJoinSyntaxOnLeftOperand() throws JSQLParserException { |
| 108 | + TestUtils.assertSqlCanBeParsedAndDeparsed( |
| 109 | + "SELECT * FROM table1 t1, table2 t2 WHERE t2.col2(+) BETWEEN t1.col1 AND t1.col3", |
| 110 | + true); |
| 111 | + } |
| 112 | + |
| 113 | + @Test |
| 114 | + void testBetweenWithOldOracleJoinSyntaxBeforeComparisonSuffixOnOperand() |
| 115 | + throws JSQLParserException { |
| 116 | + // (+) directly followed by a comparison operator keeps the pre-existing |
| 117 | + // RegularConditionRHS path, where the marker sits on the comparison itself |
| 118 | + String sqlStr = |
| 119 | + "SELECT * FROM t1, t2 WHERE t1.c BETWEEN t2.c(+) = 5 AND 1"; |
| 120 | + PlainSelect select = (PlainSelect) TestUtils.assertSqlCanBeParsedAndDeparsed(sqlStr, true); |
| 121 | + Between between = (Between) select.getWhere(); |
| 122 | + EqualsTo comparison = (EqualsTo) between.getBetweenExpressionStart(); |
| 123 | + |
| 124 | + assertEquals(EqualsTo.ORACLE_JOIN_RIGHT, comparison.getOldOracleJoinSyntax()); |
| 125 | + assertEquals(EqualsTo.NO_ORACLE_JOIN, |
| 126 | + ((Column) comparison.getLeftExpression()).getOldOracleJoinSyntax()); |
| 127 | + } |
53 | 128 | } |
0 commit comments