[teiid-commits] teiid SVN: r1780 - in trunk: connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql and 2 other directories.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Jan 26 11:02:55 EST 2010


Author: shawkins
Date: 2010-01-26 11:02:53 -0500 (Tue, 26 Jan 2010)
New Revision: 1780

Modified:
   trunk/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java
   trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
   trunk/test-integration/common/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java
Log:
TEIID-939 fix for too eagerly adding set query nesting parens, which are not supported on mysql.

Modified: trunk/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java
===================================================================
--- trunk/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java	2010-01-26 04:55:59 UTC (rev 1779)
+++ trunk/connector-api/src/main/java/org/teiid/connector/visitor/util/SQLStringVisitor.java	2010-01-26 16:02:53 UTC (rev 1780)
@@ -72,6 +72,7 @@
 import org.teiid.connector.language.ISubqueryInCriteria;
 import org.teiid.connector.language.IUpdate;
 import org.teiid.connector.language.IParameter.Direction;
+import org.teiid.connector.language.ISetQuery.Operation;
 import org.teiid.connector.metadata.runtime.MetadataObject;
 import org.teiid.connector.visitor.framework.AbstractLanguageVisitor;
 
@@ -971,7 +972,7 @@
     }
     
     public void visit(ISetQuery obj) {
-        appendSetQuery(obj.getLeftQuery());
+        appendSetQuery(obj, obj.getLeftQuery(), false);
         
         buffer.append(SQLReservedWords.SPACE);
         
@@ -983,7 +984,7 @@
         }
         buffer.append(SQLReservedWords.SPACE);
 
-        appendSetQuery(obj.getRightQuery());
+        appendSetQuery(obj, obj.getRightQuery(), true);
         
         IOrderBy orderBy = obj.getOrderBy();
         if(orderBy != null) {
@@ -1006,8 +1007,11 @@
     	return false;
     }
 
-    protected void appendSetQuery(IQueryCommand obj) {
-        if(obj instanceof ISetQuery || useParensForSetQueries()) {
+    protected void appendSetQuery(ISetQuery parent, IQueryCommand obj, boolean right) {
+        if((!(obj instanceof ISetQuery) && useParensForSetQueries()) 
+        		|| (right && obj instanceof ISetQuery 
+        				&& ((parent.isAll() && !((ISetQuery)obj).isAll()) 
+        						|| parent.getOperation() != ((ISetQuery)obj).getOperation()))) {
             buffer.append(SQLReservedWords.LPAREN);
             append(obj);
             buffer.append(SQLReservedWords.RPAREN);

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java	2010-01-26 04:55:59 UTC (rev 1779)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/mysql/TestMySQLTranslator.java	2010-01-26 16:02:53 UTC (rev 1780)
@@ -25,6 +25,7 @@
 import java.util.Properties;
 
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.jdbc.TranslationHelper;
@@ -342,4 +343,23 @@
             output, TRANSLATOR);
     }
     
+    @Test public void testThreeUnionBranches() throws Exception {
+    	String input = "select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id"; //$NON-NLS-1$
+        String output = "(SELECT PARTS.PART_ID AS id FROM PARTS) UNION ALL (SELECT PARTS.PART_NAME FROM PARTS) UNION ALL (SELECT PARTS.PART_ID FROM PARTS) ORDER BY id"; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.PARTS_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+    
+    @Ignore("There's no good workaround for this case on mysql 4 and for 5 can be done with a suquery, but only if the first union branch has no parens...")
+    @Test public void testNestedSetQuery() throws Exception {
+    	String input = "select part_id id FROM parts UNION ALL (select part_name FROM parts UNION select part_id FROM parts)"; //$NON-NLS-1$
+        String output = ""; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.PARTS_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+    
 }

Modified: trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java
===================================================================
--- trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java	2010-01-26 04:55:59 UTC (rev 1779)
+++ trunk/connectors/connector-jdbc/src/test/java/org/teiid/connector/jdbc/oracle/TestOracleSQLConversionVisitor.java	2010-01-26 16:02:53 UTC (rev 1780)
@@ -139,7 +139,7 @@
         helpTestVisitor(getTestVDB(),
                         "select part_id id FROM parts UNION ALL select part_name FROM parts UNION ALL select part_id FROM parts ORDER BY id", //$NON-NLS-1$
                         null,
-                        "(SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1) UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
+                        "SELECT g_2.PART_ID AS c_0 FROM PARTS g_2 UNION ALL SELECT g_1.PART_NAME AS c_0 FROM PARTS g_1 UNION ALL SELECT g_0.PART_ID AS c_0 FROM PARTS g_0 ORDER BY c_0 NULLS FIRST", //$NON-NLS-1$
                         true); 
     }
     

Modified: trunk/test-integration/common/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java
===================================================================
--- trunk/test-integration/common/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java	2010-01-26 04:55:59 UTC (rev 1779)
+++ trunk/test-integration/common/src/test/java/com/metamatrix/connector/jdbc/extension/TestSQLConversionVisitor.java	2010-01-26 16:02:53 UTC (rev 1780)
@@ -22,10 +22,12 @@
 
 package com.metamatrix.connector.jdbc.extension;
 
+import static org.junit.Assert.*;
+
 import java.util.Properties;
 
-import junit.framework.TestCase;
-
+import org.junit.BeforeClass;
+import org.junit.Test;
 import org.teiid.connector.api.ConnectorException;
 import org.teiid.connector.api.ExecutionContext;
 import org.teiid.connector.jdbc.JDBCPropertyNames;
@@ -43,10 +45,9 @@
 import org.teiid.dqp.internal.datamgr.language.TstLanguageBridgeFactory;
 
 import com.metamatrix.cdk.api.EnvironmentUtility;
-
 /**
  */
-public class TestSQLConversionVisitor extends TestCase {
+public class TestSQLConversionVisitor {
 
     public static final ExecutionContext context = new ExecutionContextImpl("VDB",  //$NON-NLS-1$
                                                                             "Version",  //$NON-NLS-1$
@@ -55,15 +56,17 @@
                                                                             "ExecutionPayload",  //$NON-NLS-1$            
                                                                             "ConnectionID",   //$NON-NLS-1$
                                                                             "Connector", //$NON-NLS-1$
-                                                                            "RequestID", "PartID", "ExecCount");     //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-    /**
-     * Constructor for TestSQLConversionVisitor.
-     * @param name
-     */
-    public TestSQLConversionVisitor(String name) {
-        super(name);
-    }
-
+                                                                            "RequestID", "PartID", "ExecCount");     //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+    
+    private static Translator TRANSLATOR; 
+    
+    @BeforeClass public static void oneTimeSetup() throws ConnectorException {
+    	TRANSLATOR = new Translator();
+        Properties p = new Properties();
+    	p.setProperty(JDBCPropertyNames.TRIM_STRINGS, Boolean.TRUE.toString());
+    	TRANSLATOR.initialize(EnvironmentUtility.createEnvironment(p, false));
+    }
+    
     public String getTestVDB() {
         return TranslationHelper.PARTS_VDB;
     }
@@ -99,244 +102,244 @@
         return visitor.toString();
     }    
     
-    public void testSimple() {
+    @Test public void testSimple() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testAliasInSelect() {
+    @Test public void testAliasInSelect() {
         helpTestVisitor(getTestVDB(),
             "select part_name as x from parts", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME AS x FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testAliasedGroup() {
+    @Test public void testAliasedGroup() {
         helpTestVisitor(getTestVDB(),
             "select y.part_name from parts y", //$NON-NLS-1$
             "SELECT y.PART_NAME FROM PARTS AS y"); //$NON-NLS-1$
     }
 
-    public void testAliasedGroupAndElement() {
+    @Test public void testAliasedGroupAndElement() {
         helpTestVisitor(getTestVDB(),
             "select y.part_name AS z from parts y", //$NON-NLS-1$
             "SELECT y.PART_NAME AS z FROM PARTS AS y"); //$NON-NLS-1$
     }
 
-    public void testLiteralString() {
+    @Test public void testLiteralString() {
         helpTestVisitor(getTestVDB(),
             "select 'x' from parts", //$NON-NLS-1$
             "SELECT 'x' FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralInteger() {
+    @Test public void testLiteralInteger() {
         helpTestVisitor(getTestVDB(),
             "select 5 from parts", //$NON-NLS-1$
             "SELECT 5 FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralFloat() {
+    @Test public void testLiteralFloat() {
         helpTestVisitor(getTestVDB(),
             "select 5.2 from parts", //$NON-NLS-1$
             "SELECT 5.2 FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralLowFloat() {
+    @Test public void testLiteralLowFloat() {
         helpTestVisitor(getTestVDB(),
             "select 0.012 from parts", //$NON-NLS-1$
             "SELECT 0.012 FROM PARTS"); //$NON-NLS-1$
     }
     
-    public void testLiteralLowFloat2() {
+    @Test public void testLiteralLowFloat2() {
         helpTestVisitor(getTestVDB(),
             "select 0.00012 from parts", //$NON-NLS-1$
             "SELECT 0.00012 FROM PARTS"); //$NON-NLS-1$
     }    
     
-    public void testLiteralHighFloat() {
+    @Test public void testLiteralHighFloat() {
         helpTestVisitor(getTestVDB(),
             "select 12345.123 from parts", //$NON-NLS-1$
             "SELECT 12345.123 FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralHighFloat2() {
+    @Test public void testLiteralHighFloat2() {
         helpTestVisitor(getTestVDB(),
             "select 1234567890.1234567 from parts", //$NON-NLS-1$
             "SELECT 1234567890.1234567 FROM PARTS"); //$NON-NLS-1$
     }
     
-    public void testLiteralBoolean() {
+    @Test public void testLiteralBoolean() {
         helpTestVisitor(getTestVDB(),
             "select {b'true'}, {b'false'} from parts", //$NON-NLS-1$
             "SELECT 1, 0 FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralDate() {
+    @Test public void testLiteralDate() {
         helpTestVisitor(getTestVDB(),
             "select {d '2003-12-31'} from parts", //$NON-NLS-1$
             "SELECT {d '2003-12-31'} FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralTime() {
+    @Test public void testLiteralTime() {
         helpTestVisitor(getTestVDB(),
             "select {t '23:59:59'} from parts", //$NON-NLS-1$
             "SELECT {t '23:59:59'} FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralNull() {
+    @Test public void testLiteralNull() {
         helpTestVisitor(getTestVDB(),
             "select null from parts", //$NON-NLS-1$
             "SELECT NULL FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testLiteralTimestamp() {
+    @Test public void testLiteralTimestamp() {
         helpTestVisitor(getTestVDB(),
             "select {ts '2003-12-31 23:59:59.123'} from parts", //$NON-NLS-1$
             "SELECT {ts '2003-12-31 23:59:59.123'} FROM PARTS"); //$NON-NLS-1$
     }
 
-    public void testSQL89Join() {
+    @Test public void testSQL89Join() {
         helpTestVisitor(getTestVDB(),
             "select p.part_name from parts p, supplier_parts s where p.part_id = s.part_id", //$NON-NLS-1$
             "SELECT p.PART_NAME FROM PARTS AS p, SUPPLIER_PARTS AS s WHERE p.PART_ID = s.PART_ID"); //$NON-NLS-1$
     }
 
-    public void testSQL92Join() {
+    @Test public void testSQL92Join() {
         helpTestVisitor(getTestVDB(),
             "select p.part_name from parts p join supplier_parts s on p.part_id = s.part_id", //$NON-NLS-1$
             "SELECT p.PART_NAME FROM PARTS AS p INNER JOIN SUPPLIER_PARTS AS s ON p.PART_ID = s.PART_ID"); //$NON-NLS-1$
     }
 
-    public void testSelfJoin() {
+    @Test public void testSelfJoin() {
         helpTestVisitor(getTestVDB(),
             "select p.part_name from parts p join parts p2 on p.part_id = p2.part_id", //$NON-NLS-1$
             "SELECT p.PART_NAME FROM PARTS AS p INNER JOIN PARTS AS p2 ON p.PART_ID = p2.PART_ID"); //$NON-NLS-1$
     }
 
-    public void testRightOuterJoin() {
+    @Test public void testRightOuterJoin() {
         helpTestVisitor(getTestVDB(),
             "select p.part_name from parts p right join supplier_parts s on p.part_id = s.part_id", //$NON-NLS-1$
             "SELECT p.PART_NAME FROM SUPPLIER_PARTS AS s LEFT OUTER JOIN PARTS AS p ON p.PART_ID = s.PART_ID"); //$NON-NLS-1$
     }
 
-    public void testLeftOuterJoin() {
+    @Test public void testLeftOuterJoin() {
         helpTestVisitor(getTestVDB(),
             "select p.part_name from parts p left join supplier_parts s on p.part_id = s.part_id", //$NON-NLS-1$
             "SELECT p.PART_NAME FROM PARTS AS p LEFT OUTER JOIN SUPPLIER_PARTS AS s ON p.PART_ID = s.PART_ID"); //$NON-NLS-1$
     }
 
-    public void testFullOuterJoin() {
+    @Test public void testFullOuterJoin() {
         helpTestVisitor(getTestVDB(),
             "select p.part_name from parts p full join supplier_parts s on p.part_id = s.part_id", //$NON-NLS-1$
             "SELECT p.PART_NAME FROM PARTS AS p FULL OUTER JOIN SUPPLIER_PARTS AS s ON p.PART_ID = s.PART_ID"); //$NON-NLS-1$
     }
 
-    public void testCompare1() {
+    @Test public void testCompare1() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id = 'x'", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID = 'x'"); //$NON-NLS-1$
     }
 
-    public void testCompare2() {
+    @Test public void testCompare2() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id <> 'x'", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID <> 'x'"); //$NON-NLS-1$
     }
 
-    public void testCompare3() {
+    @Test public void testCompare3() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id < 'x'", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID < 'x'"); //$NON-NLS-1$
     }
 
-    public void testCompare4() {
+    @Test public void testCompare4() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id <= 'x'", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID <= 'x'"); //$NON-NLS-1$
     }
 
-    public void testCompare5() {
+    @Test public void testCompare5() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id > 'x'", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID > 'x'"); //$NON-NLS-1$
     }
 
-    public void testCompare6() {
+    @Test public void testCompare6() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id >= 'x'", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID >= 'x'"); //$NON-NLS-1$
     }
 
-    public void testIn1() {
+    @Test public void testIn1() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id in ('x')", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID = 'x'"); //$NON-NLS-1$
     }
 
-    public void testIn2() {
+    @Test public void testIn2() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id in ('x', 'y')", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID IN ('x', 'y')"); //$NON-NLS-1$
     }
 
-    public void testIn3() {
+    @Test public void testIn3() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id not in ('x', 'y')", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID NOT IN ('x', 'y')"); //$NON-NLS-1$
     }
 
-    public void testIsNull1() {
+    @Test public void testIsNull1() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id is null", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID IS NULL"); //$NON-NLS-1$
     }
 
-    public void testIsNull2() {
+    @Test public void testIsNull2() {
         helpTestVisitor(getTestVDB(),
             "select part_name from parts where part_id is not null", //$NON-NLS-1$
             "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_ID IS NOT NULL"); //$NON-NLS-1$
     }
 
-    public void testInsertNull() {
+    @Test public void testInsertNull() {
         helpTestVisitor(getTestVDB(),
             "insert into parts (part_id, part_name, part_color, part_weight) values ('a', null, 'c', 'd')", //$NON-NLS-1$
             "INSERT INTO PARTS (PART_ID, PART_NAME, PART_COLOR, PART_WEIGHT) VALUES ('a', NULL, 'c', 'd')"); //$NON-NLS-1$
     }
 
-    public void testUpdateNull() {
+    @Test public void testUpdateNull() {
         helpTestVisitor(getTestVDB(),
             "update parts set part_weight = null where part_color = 'b'", //$NON-NLS-1$
             "UPDATE PARTS SET PART_WEIGHT = NULL WHERE PARTS.PART_COLOR = 'b'"); //$NON-NLS-1$
     }
 
-    public void testUpdateWhereNull() {
+    @Test public void testUpdateWhereNull() {
         helpTestVisitor(getTestVDB(),
             "update parts set part_weight = 'a' where part_weight = null", //$NON-NLS-1$
             "UPDATE PARTS SET PART_WEIGHT = 'a' WHERE NULL <> NULL"); //$NON-NLS-1$
     }
 
-    public void testPreparedStatementCreationWithUpdate() {
+    @Test public void testPreparedStatementCreationWithUpdate() {
         helpTestVisitor(getTestVDB(),
                         "update parts set part_weight = 'a' where part_weight < 5", //$NON-NLS-1$
                         "UPDATE PARTS SET PART_WEIGHT = ? WHERE PARTS.PART_WEIGHT < ?", //$NON-NLS-1$
                         true); 
     }
     
-    public void testPreparedStatementCreationWithInsert() {
+    @Test public void testPreparedStatementCreationWithInsert() {
         helpTestVisitor(getTestVDB(),
                         "insert into parts (part_weight) values (5)", //$NON-NLS-1$
                         "INSERT INTO PARTS (PART_WEIGHT) VALUES (?)", //$NON-NLS-1$
                         true); 
     }
     
-    public void testPreparedStatementCreationWithSelect() {
+    @Test public void testPreparedStatementCreationWithSelect() {
         helpTestVisitor(getTestVDB(),
                         "select part_name from parts where part_id not in ('x', 'y') and part_weight < 6", //$NON-NLS-1$
                         "SELECT PARTS.PART_NAME FROM PARTS WHERE (PARTS.PART_ID NOT IN (?, ?)) AND (PARTS.PART_WEIGHT < ?)", //$NON-NLS-1$
                         true); 
     }
     
-    public void testPreparedStatementCreationWithLike() {
+    @Test public void testPreparedStatementCreationWithLike() {
         helpTestVisitor(getTestVDB(),
                         "select part_name from parts where part_name like '%foo'", //$NON-NLS-1$
                         "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_NAME LIKE ?", //$NON-NLS-1$
@@ -358,53 +361,76 @@
      * In the future, functions can be made smarter about which of their literal arguments
      * either are (or are not) eligible to be bind variables 
      */
-    public void testPreparedStatementCreationWithFunction() {
+    @Test public void testPreparedStatementCreationWithFunction() {
         helpTestVisitor(getTestVDB(),
                         "select part_name from parts where concat(part_name, 'x') = concat('y', part_weight)", //$NON-NLS-1$
                         "SELECT PARTS.PART_NAME FROM PARTS WHERE concat(PARTS.PART_NAME, 'x') = concat('y', PARTS.PART_WEIGHT)", //$NON-NLS-1$
                         true); 
     }
     
-    public void testPreparedStatementCreationWithCase() {
+    @Test public void testPreparedStatementCreationWithCase() {
         helpTestVisitor(getTestVDB(),
                         "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_WEIGHT = CASE WHEN PARTS.PART_NAME='a' THEN 'b' ELSE 'c' END", //$NON-NLS-1$
                         "SELECT PARTS.PART_NAME FROM PARTS WHERE PARTS.PART_WEIGHT = CASE WHEN PARTS.PART_NAME = ? THEN 'b' ELSE 'c' END", //$NON-NLS-1$
                         true); 
     }
 
-    public void testVisitIDeleteWithComment() throws Exception {
+    @Test public void testVisitIDeleteWithComment() throws Exception {
         String expected = "DELETE /*teiid sessionid:ConnectionID, requestid:RequestID.PartID*/ FROM g1 WHERE (100 >= 200) AND (500 < 600)"; //$NON-NLS-1$
         assertEquals(expected, getStringWithContext(TestDeleteImpl.example()));
     }
 
-    public void testVisitIInsertWithComment() throws Exception {
+    @Test public void testVisitIInsertWithComment() throws Exception {
         String expected = "INSERT /*teiid sessionid:ConnectionID, requestid:RequestID.PartID*/ INTO g1 (e1, e2, e3, e4) VALUES (1, 2, 3, 4)"; //$NON-NLS-1$
         assertEquals(expected, getStringWithContext(TestInsertImpl.example("g1"))); //$NON-NLS-1$
     }  
     
-    public void testVisitISelectWithComment() throws Exception {
+    @Test public void testVisitISelectWithComment() throws Exception {
         String expected = "SELECT /*teiid sessionid:ConnectionID, requestid:RequestID.PartID*/ g1.e1, g1.e2, g1.e3, g1.e4"; //$NON-NLS-1$
         assertEquals(expected, getStringWithContext(TestSelectImpl.example(false)));
         expected = "SELECT /*teiid sessionid:ConnectionID, requestid:RequestID.PartID*/ DISTINCT g1.e1, g1.e2, g1.e3, g1.e4"; //$NON-NLS-1$
         assertEquals(expected, getStringWithContext(TestSelectImpl.example(true)));
     }
     
-    public void testVisitIUpdateWithComment() throws Exception {
+    @Test public void testVisitIUpdateWithComment() throws Exception {
         String expected = "UPDATE /*teiid sessionid:ConnectionID, requestid:RequestID.PartID*/ g1 SET e1 = 1, e2 = 1, e3 = 1, e4 = 1 WHERE 1 = 1"; //$NON-NLS-1$
         assertEquals(expected, getStringWithContext(TestUpdateImpl.example()));
     }    
     
-    public void testVisitIProcedureWithComment() throws Exception {
+    @Test public void testVisitIProcedureWithComment() throws Exception {
         String expected = "{ /*teiid sessionid:ConnectionID, requestid:RequestID.PartID*/  call sq3(?,?)}"; //$NON-NLS-1$
         assertEquals(expected, getStringWithContext(TestProcedureImpl.example()));
     }  
     
-    public void testTrimStrings() throws Exception {
-    	Translator trans = new Translator();
-        Properties p = new Properties();
-    	p.setProperty(JDBCPropertyNames.TRIM_STRINGS, Boolean.TRUE.toString());
-        trans.initialize(EnvironmentUtility.createEnvironment(p, false));
-
-        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, "select stringkey from bqt1.smalla", "SELECT rtrim(SmallA.StringKey) FROM SmallA", trans); //$NON-NLS-1$ //$NON-NLS-2$
-    }
+    @Test public void testTrimStrings() throws Exception {
+        TranslationHelper.helpTestVisitor(TranslationHelper.BQT_VDB, "select stringkey from bqt1.smalla", "SELECT rtrim(SmallA.StringKey) FROM SmallA", TRANSLATOR); //$NON-NLS-1$ //$NON-NLS-2$
+    }
+    
+    @Test public void testNestedSetQuery() throws Exception {
+    	String input = "select part_id id FROM parts UNION ALL (select part_name FROM parts UNION select part_id FROM parts)"; //$NON-NLS-1$
+        String output = "SELECT rtrim(PARTS.PART_ID) AS id FROM PARTS UNION ALL (SELECT PARTS.PART_NAME FROM PARTS UNION SELECT rtrim(PARTS.PART_ID) FROM PARTS)"; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.PARTS_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+    
+    @Test public void testNestedSetQuery1() throws Exception {
+    	String input = "select part_id id FROM parts UNION (select part_name FROM parts EXCEPT select part_id FROM parts)"; //$NON-NLS-1$
+        String output = "SELECT rtrim(PARTS.PART_ID) AS id FROM PARTS UNION (SELECT PARTS.PART_NAME FROM PARTS EXCEPT SELECT rtrim(PARTS.PART_ID) FROM PARTS)"; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.PARTS_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+    
+    @Test public void testNestedSetQuery2() throws Exception {
+    	String input = "select part_id id FROM parts UNION select part_name FROM parts EXCEPT select part_id FROM parts"; //$NON-NLS-1$
+        String output = "SELECT rtrim(PARTS.PART_ID) AS id FROM PARTS UNION SELECT PARTS.PART_NAME FROM PARTS EXCEPT SELECT rtrim(PARTS.PART_ID) FROM PARTS"; //$NON-NLS-1$
+          
+        TranslationHelper.helpTestVisitor(TranslationHelper.PARTS_VDB,
+            input, 
+            output, TRANSLATOR);
+    }
+
 }



More information about the teiid-commits mailing list