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