You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2015/10/27 09:30:12 UTC

metamodel git commit: METAMODEL-204: Fixed Fixes #66

Repository: metamodel
Updated Branches:
  refs/heads/master 36ad14e08 -> 447dd1854


METAMODEL-204: Fixed
Fixes #66

Project: http://git-wip-us.apache.org/repos/asf/metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/metamodel/commit/447dd185
Tree: http://git-wip-us.apache.org/repos/asf/metamodel/tree/447dd185
Diff: http://git-wip-us.apache.org/repos/asf/metamodel/diff/447dd185

Branch: refs/heads/master
Commit: 447dd18543e380fbb465900d352f5ed36108a443
Parents: 36ad14e
Author: Kasper Sørensen <i....@gmail.com>
Authored: Tue Oct 27 09:30:03 2015 +0100
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Tue Oct 27 09:30:03 2015 +0100

----------------------------------------------------------------------
 .../java/org/apache/metamodel/query/SelectItem.java   | 14 +++++++++++++-
 .../jdbc/dialects/AbstractQueryRewriter.java          |  6 ++++++
 .../java/org/apache/metamodel/jdbc/HsqldbTest.java    |  8 ++++++++
 3 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metamodel/blob/447dd185/core/src/main/java/org/apache/metamodel/query/SelectItem.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/metamodel/query/SelectItem.java b/core/src/main/java/org/apache/metamodel/query/SelectItem.java
index 287d1a6..a1e33de 100644
--- a/core/src/main/java/org/apache/metamodel/query/SelectItem.java
+++ b/core/src/main/java/org/apache/metamodel/query/SelectItem.java
@@ -48,7 +48,7 @@ import org.slf4j.LoggerFactory;
 public class SelectItem extends BaseObject implements QueryItem, Cloneable {
 
     public static final String FUNCTION_APPROXIMATION_PREFIX = "APPROXIMATE ";
-    
+
     private static final long serialVersionUID = 317475105509663973L;
     private static final Logger logger = LoggerFactory.getLogger(SelectItem.class);
 
@@ -526,6 +526,18 @@ public class SelectItem extends BaseObject implements QueryItem, Cloneable {
     }
 
     /**
+     * Creates a copy of the {@link SelectItem}, with a different
+     * {@link #isFunctionApproximationAllowed()} flag set.
+     * 
+     * @param functionApproximationAllowed
+     * @return
+     */
+    public SelectItem replaceFunctionApproximationAllowed(boolean functionApproximationAllowed) {
+        return new SelectItem(_column, _fromItem, _function, _expression, _subQuerySelectItem, _alias,
+                functionApproximationAllowed);
+    }
+
+    /**
      * Investigates whether or not this SelectItem references a particular
      * column. This will search for direct references and indirect references
      * via subqueries.

http://git-wip-us.apache.org/repos/asf/metamodel/blob/447dd185/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
index cf8cfd8..f4f50aa 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/AbstractQueryRewriter.java
@@ -280,6 +280,12 @@ public abstract class AbstractQueryRewriter implements IQueryRewriter {
     }
 
     protected String rewriteSelectItem(Query query, SelectItem item) {
+        if (item.isFunctionApproximationAllowed()) {
+            // function approximation is not included in any standard SQL
+            // constructions - will have to be overridden by subclasses if there
+            // are specialized dialects for it.
+            item = item.replaceFunctionApproximationAllowed(false);
+        }
         return item.toSql(isSchemaIncludedInColumnPaths());
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metamodel/blob/447dd185/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java b/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
index db969c4..12d5fe2 100644
--- a/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/jdbc/HsqldbTest.java
@@ -72,6 +72,14 @@ public class HsqldbTest extends TestCase {
         _connection.close();
     }
     
+    public void testApproximateCount() throws Exception {
+        final JdbcDataContext dataContext = new JdbcDataContext(_connection);
+        final DataSet dataSet = dataContext.executeQuery("SELECT APPROXIMATE COUNT(*) FROM customers");
+        assertTrue(dataSet.next());
+        assertEquals(122, dataSet.getRow().getValue(0));
+        assertFalse(dataSet.next());
+    }
+    
     public void testTimestampValueInsertSelect() throws Exception {
         Connection connection = DriverManager.getConnection("jdbc:hsqldb:mem:" + getName(), USERNAME, PASSWORD);
         JdbcTestTemplates.timestampValueInsertSelect(connection, TimeUnit.NANOSECONDS);