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 2014/05/31 12:09:43 UTC
git commit: METAMODEL-60: Adding Balendra Singh's contribution to
TOP/DISTINCT ms sql server query rewriting.
Repository: incubator-metamodel
Updated Branches:
refs/heads/master 49a1553ca -> 2023997c9
METAMODEL-60: Adding Balendra Singh's contribution to TOP/DISTINCT ms
sql server query rewriting.
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/2023997c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/2023997c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/2023997c
Branch: refs/heads/master
Commit: 2023997c98fd8e0b2da6639709c61843cb165f13
Parents: 49a1553
Author: Balendra Singh <ba...@gmail.com>
Authored: Sat May 31 12:08:51 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Sat May 31 12:08:51 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 3 +-
.../jdbc/dialects/SQLServerQueryRewriter.java | 6 +-
.../dialects/SQLServerQueryRewriterTest.java | 86 ++++++++++----------
3 files changed, 50 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2023997c/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ddd26a2..b69e4d2 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -15,7 +15,8 @@ Apache MetaModel 4.1.0-incubating
* [METAMODEL-33] - Ensured that Apache Rat plugin for Maven is properly activated.
* [METAMODEL-37] - Removed old site sources from project.
* [METAMODEL-3] - Improved writing of Byte-Order-Mark (BOM) for various encoding spelling variants
- * [METAMODEL-59] - Fixed a bug related to handling of date/time literals in MS SQL queries
+ * [METAMODEL-59] - Fixed a bug related to handling of date/time literals in MS SQL Server queries
+ * [METAMODEL-60] - Fixed a bug related to DISTINCT and TOP keywords in MS SQL Server queries
Apache MetaModel 4.0.0-incubating
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2023997c/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
index ebecb9a..d83d6d2 100644
--- a/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
+++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/dialects/SQLServerQueryRewriter.java
@@ -56,7 +56,11 @@ public class SQLServerQueryRewriter extends DefaultQueryRewriter {
Integer maxRows = query.getMaxRows();
if (maxRows != null) {
- result = "SELECT TOP " + maxRows + " " + result.substring(7);
+ if (query.getSelectClause().isDistinct()) {
+ result = "SELECT DISTINCT TOP " + maxRows + " " + result.substring("SELECT DISTINCT ".length());
+ } else {
+ result = "SELECT TOP " + maxRows + " " + result.substring("SELECT ".length());
+ }
}
return result;
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/2023997c/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
----------------------------------------------------------------------
diff --git a/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java b/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
index fa75491..fd55486 100644
--- a/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
+++ b/jdbc/src/test/java/org/apache/metamodel/dialects/SQLServerQueryRewriterTest.java
@@ -35,56 +35,56 @@ import org.apache.metamodel.util.TimeComparator;
public class SQLServerQueryRewriterTest extends TestCase {
- private MutableTable table;
- private MutableColumn column;
- private IQueryRewriter qr = new SQLServerQueryRewriter(null);
+ private MutableTable table;
+ private MutableColumn column;
+ private IQueryRewriter qr = new SQLServerQueryRewriter(null);
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- table = new MutableTable("foo");
- table.setSchema(new MutableSchema("MY_SCHEMA"));
- table.setQuote("\"");
- column = new MutableColumn("bar");
- column.setQuote("\"");
- column.setTable(table);
- }
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ table = new MutableTable("foo");
+ table.setSchema(new MutableSchema("MY_SCHEMA"));
+ table.setQuote("\"");
+ column = new MutableColumn("bar");
+ column.setQuote("\"");
+ column.setTable(table);
+ }
- public void testRewriteFromItem() throws Exception {
- assertEquals("foo",
- qr.rewriteFromItem(new FromItem(new MutableTable("foo"))));
- }
+ public void testRewriteFromItem() throws Exception {
+ assertEquals("foo", qr.rewriteFromItem(new FromItem(new MutableTable("foo"))));
+ }
- public void testAliasing() throws Exception {
- Query q = new Query().from(table).select(column);
+ public void testAliasing() throws Exception {
+ Query q = new Query().from(table).select(column);
- assertEquals("SELECT MY_SCHEMA.\"foo\".\"bar\" FROM MY_SCHEMA.\"foo\"",
- qr.rewriteQuery(q));
- }
+ assertEquals("SELECT MY_SCHEMA.\"foo\".\"bar\" FROM MY_SCHEMA.\"foo\"", qr.rewriteQuery(q));
+ }
- public void testSelectMaxRowsRewriting() throws Exception {
- Query q = new Query().from(table).select(column).setMaxRows(20);
+ public void testSelectMaxRowsRewriting() throws Exception {
+ Query q = new Query().from(table).select(column).setMaxRows(20);
- assertEquals(
- "SELECT TOP 20 MY_SCHEMA.\"foo\".\"bar\" FROM MY_SCHEMA.\"foo\"",
- qr.rewriteQuery(q));
- }
-
- public void testRewriteFilterItem() {
+ assertEquals("SELECT TOP 20 MY_SCHEMA.\"foo\".\"bar\" FROM MY_SCHEMA.\"foo\"", qr.rewriteQuery(q));
+ }
- MutableColumn timestampColumn = new MutableColumn("timestamp");
- timestampColumn.setType(ColumnType.TIMESTAMP);
- timestampColumn.setNativeType("DATETIME");
- Query q = new Query()
- .from(table)
- .select(column)
- .select(timestampColumn)
- .where(new FilterItem(new SelectItem(timestampColumn),
- OperatorType.LESS_THAN, TimeComparator.toDate("2014-06-28 14:06:00")));
+ public void testRewriteFilterItem() {
- assertEquals(
- "SELECT MY_SCHEMA.\"foo\".\"bar\", timestamp FROM MY_SCHEMA.\"foo\" WHERE timestamp < CAST('2014-06-28 14:06:00' AS DATETIME)",
- qr.rewriteQuery(q));
+ MutableColumn timestampColumn = new MutableColumn("timestamp");
+ timestampColumn.setType(ColumnType.TIMESTAMP);
+ timestampColumn.setNativeType("DATETIME");
+ Query q = new Query()
+ .from(table)
+ .select(column)
+ .select(timestampColumn)
+ .where(new FilterItem(new SelectItem(timestampColumn), OperatorType.LESS_THAN, TimeComparator
+ .toDate("2014-06-28 14:06:00")));
- }
+ assertEquals(
+ "SELECT MY_SCHEMA.\"foo\".\"bar\", timestamp FROM MY_SCHEMA.\"foo\" WHERE timestamp < CAST('2014-06-28 14:06:00' AS DATETIME)",
+ qr.rewriteQuery(q));
+ }
+
+ public void testSelectMaxRowsWithDistinctRewriting() throws Exception {
+ Query q = new Query().from(table).selectDistinct().select(column).setMaxRows(20);
+ assertEquals("SELECT DISTINCT TOP 20 MY_SCHEMA.\"foo\".\"bar\" FROM MY_SCHEMA.\"foo\"", qr.rewriteQuery(q));
+ }
}
\ No newline at end of file