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 <[email protected]> Authored: Tue Oct 27 09:30:03 2015 +0100 Committer: Kasper Sørensen <[email protected]> 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);
