METAMODEL-239: Fixed
authorAnkit Kumar <ak.ankitkumar@gmail.com>
Wed, 9 Mar 2016 17:55:06 +0000 (18:55 +0100)
committerKasper Sørensen <i.am.kasper.sorensen@gmail.com>
Wed, 9 Mar 2016 17:55:06 +0000 (18:55 +0100)
Fixes #90

core/src/test/java/org/apache/metamodel/query/parser/QueryParserTest.java
jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/DB2QueryRewriter.java
jdbc/src/test/java/org/apache/metamodel/dialects/DB2QueryRewriterTest.java

index d081c39..fa9b66d 100644 (file)
@@ -50,6 +50,13 @@ public class QueryParserTest extends TestCase {
         MutableColumn col = (MutableColumn) dc.getColumnByQualifiedLabel("tbl.baz");
         col.setType(ColumnType.INTEGER);
     };
+       
+    public void testQueryWithParenthesis() throws Exception {
+        Query q = MetaModelHelper.parseQuery(dc,
+                "select foo from sch.tbl where (foo= 1) and (foo=2)");
+        assertEquals("SELECT tbl.foo FROM sch.tbl WHERE tbl.foo = '1' AND tbl.foo = '2'",
+                q.toSql());
+    }
 
     public void testQueryWithParenthesisAnd() throws Exception {
         Query q = MetaModelHelper.parseQuery(dc, "select foo from sch.tbl where (foo= 1) and (foo=2)");
index fa8ebe0..d75bf54 100644 (file)
@@ -69,11 +69,11 @@ public class DB2QueryRewriter extends DefaultQueryRewriter implements IQueryRewr
         final Integer firstRow = query.getFirstRow();
         final Integer maxRows = query.getMaxRows();
 
-        if (maxRows == null && firstRow == null) {
+        if (maxRows == null && (firstRow == null || firstRow.intValue() == 1)) {
             return super.rewriteQuery(query);
         }
 
-        if (firstRow == null || firstRow.intValue() == 1) {
+        if ((firstRow == null || firstRow.intValue() == 1) && maxRows != null && maxRows > 0) {
             // We prefer to use the "FETCH FIRST [n] ROWS ONLY" approach, if
             // firstRow is not specified.
             return super.rewriteQuery(query) + " FETCH FIRST " + maxRows + " ROWS ONLY";
index 06c667e..6d213d5 100644 (file)
@@ -60,6 +60,12 @@ public class DB2QueryRewriterTest extends TestCase {
         assertEquals("SELECT sch.foo.bar FROM sch.foo FETCH FIRST 200 ROWS ONLY", str);
     }
 
+    public void testRewriteFirstRowIsOneAndMaxRowsIsNull() throws Exception {
+        Query q = new Query().from(table).select(col).setFirstRow(1);
+        String str = new DB2QueryRewriter(null).rewriteQuery(q);
+        assertEquals("SELECT sch.foo.bar FROM sch.foo", str);
+    }
+
     public void testRewriteFirstRow() throws Exception {
         Query q = new Query().from(table).select(col).setFirstRow(401);
         String str = new DB2QueryRewriter(null).rewriteQuery(q);