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);