tkalkirill commented on code in PR #13464:
URL: https://github.com/apache/ignite/pull/13464#discussion_r3765790454
##########
modules/calcite/src/test/java/org/apache/ignite/internal/processors/query/calcite/integration/DynamicParametersIntegrationTest.java:
##########
@@ -216,6 +216,139 @@ public void testFractionalLimitOffset() {
assertThrowsSqlException("SELECT id FROM person ORDER BY id OFFSET ?
ROWS", null, BigDecimal.valueOf(-1.5));
}
+ /** */
+ @Test
+ public void testInvalidFetchExpression() {
+ createAndPopulateTable();
+
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS
ONLY", null, -2);
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS
ONLY", null, -1.5);
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS
ONLY", null, NULL_RESULT);
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS
ONLY", null, bigValue());
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (?) ROWS
ONLY", null, "abc");
+
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (1 + ? - 4)
ROWS ONLY", null, 1);
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST (? - (50 -
20)) ROWS ONLY", null, 2);
+
+ assertThrowsSqlException("SELECT * FROM PERSON FETCH FIRST SQRT(?)
ROWS ONLY", null, 4);
+ }
+
+ /** */
+ @Test
+ public void testFetchExpression() {
+ createAndPopulateTable();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (?) ROWS
ONLY")
+ .withParams(1)
+ .returns(0)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 + ? - 2)
ROWS ONLY")
+ .withParams(5)
+ .returns(0)
+ .returns(1)
+ .returns(2)
+ .returns(3)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 + (? -
1) + 1) ROWS ONLY")
+ .withParams(2)
+ .returns(0)
+ .returns(1)
+ .returns(2)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id DESC FETCH FIRST (1 +
(2 - 1) + ?) ROWS ONLY")
+ .withParams(2)
+ .returns(4)
+ .returns(3)
+ .returns(2)
+ .returns(1)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (ABS(?))
ROWS ONLY")
+ .withParams(-2)
+ .returns(0)
+ .returns(1)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (1 +
ABS(?)) ROWS ONLY")
+ .withParams(-2)
+ .returns(0)
+ .returns(1)
+ .returns(2)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (SQRT(?) +
1 + 0) ROWS ONLY")
+ .withParams(4)
+ .returns(0)
+ .returns(1)
+ .returns(2)
+ .check();
+ }
+
+ /** */
+ @Test
+ public void testFetchExpressionCachedQuery() {
+ createAndPopulateTable();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (? + 1)
ROWS ONLY")
+ .withParams(1)
+ .returns(0)
+ .returns(1)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id FETCH FIRST (? + 1)
ROWS ONLY")
+ .withParams(2)
+ .returns(0)
+ .returns(1)
+ .returns(2)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id DESC FETCH FIRST (? +
1) ROWS ONLY")
+ .withParams(1)
+ .returns(4)
+ .returns(3)
+ .check();
+
+ assertQuery("SELECT id FROM PERSON ORDER BY id DESC FETCH FIRST (? +
1) ROWS ONLY")
+ .withParams(2)
+ .returns(4)
+ .returns(3)
+ .returns(2)
+ .check();
+
+ // Check negative param.
+ assertThrowsSqlException("SELECT id FROM PERSON ORDER BY id FETCH
FIRST (? + 1) ROWS ONLY", null, -2);
+ assertThrowsSqlException("SELECT id FROM PERSON ORDER BY id DESC FETCH
FIRST (? + 1) ROWS ONLY", null, -2);
+ }
+
+ /** */
+ @Test
+ public void testFetchExpressionNested() {
+ createAndPopulateTable();
+
+ assertQuery("SELECT id FROM (SELECT id from PERSON ORDER BY id FETCH
FIRST (? + 3) ROWS ONLY) " +
+ "ORDER BY id FETCH NEXT (1 + ?) ROWS ONLY")
+ .withParams(2, 1)
+ .returns(0)
+ .returns(1)
+ .check();
+ }
+
+ /** */
+ @Test
+ public void testFetchExpressionWithRewrite() {
Review Comment:
It refers to the unconditional SQL-node rewrite performed by
`IgniteSqlCallRewriteTable`: the `NVL(?, 10000)` call is rewritten to an
equivalent `CASE` expression during validation. The test verifies that a
dynamic parameter inside `FETCH` is still typed and converted correctly after
this rewrite.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]