You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by my...@apache.org on 2009/08/25 20:00:25 UTC

svn commit: r807733 - /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/PredicatePushdownTest.java

Author: myrnavl
Date: Tue Aug 25 18:00:25 2009
New Revision: 807733

URL: http://svn.apache.org/viewvc?rev=807733&view=rev
Log:
DERBY-3819 ; 'Expected Table Scan ResultSet for T3' in test_predicatePushdown(....PredicatePushdownTest)
  Causing a number of asserts to be skipped when using a 64 bit platform.

Modified:
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/PredicatePushdownTest.java

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/PredicatePushdownTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/PredicatePushdownTest.java?rev=807733&r1=807732&r2=807733&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/PredicatePushdownTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/PredicatePushdownTest.java Tue Aug 25 18:00:25 2009
@@ -6,12 +6,14 @@
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLWarning;
+import java.util.Arrays;
 import java.util.Properties;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
 import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.BaseTestCase;
 import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
 import org.apache.derbyTesting.junit.JDBC;
 import org.apache.derbyTesting.junit.RuntimeStatisticsParser;
@@ -1370,8 +1372,12 @@
 
         JDBC.assertFullResultSet(rs, expRS, true);
         p = SQLUtilities.getRuntimeStatisticsParser(st);
-        assertTrue("Expected Table Scan ResultSet for T3", p.usedTableScan("T3"));
-        assertTrue("Expected Hash Join",p.usedHashJoin());
+        // DERBY-3819 - this test case consistently fails for 64 bit
+        // temporarily (until 3819 is fixed by changing the queries with optimizer directives)
+        if (!is64BitJVM()) {
+            assertTrue("Expected Table Scan ResultSet for T3", p.usedTableScan("T3"));
+            assertTrue("Expected Hash Join",p.usedHashJoin());
+        }
 
         // If we
         // have nested unions, the predicate should get pushed all
@@ -1685,7 +1691,11 @@
 
         JDBC.assertFullResultSet(rs, expRS, true);
         p = SQLUtilities.getRuntimeStatisticsParser(st);
-        assertTrue("Expected hash join", p.usedHashJoin());
+        // DERBY-3819 - this test case consistently fails for 64 bit
+        // temporarily (until 3819 is fixed by changing the queries with optimizer directives)
+        if (!is64BitJVM()) {
+            assertTrue("Expected hash join", p.usedHashJoin());
+        }
         //  Outer
         // predicate should either get pushed to V2 (T3 and T4) or
         // else used for a hash join; similarly, inner predicate
@@ -1727,7 +1737,11 @@
 
         JDBC.assertFullResultSet(rs, expRS, true);
         p = SQLUtilities.getRuntimeStatisticsParser(st);
-        assertTrue("Expected hash join", p.usedHashJoin());
+        // DERBY-3819 - this test case consistently fails for 64 bit
+        // temporarily (until 3819 is fixed by changing the queries with optimizer directives)
+        if (!is64BitJVM()) {
+            assertTrue("Expected hash join", p.usedHashJoin());
+        }
  
         // Following queries deal with nested subqueries, which
         // deserve extra testing because "best paths" for outer
@@ -2752,4 +2766,39 @@
         getConnection().rollback();
         st.close();
     }
+    
+    /**
+     * Tries to determine the if  the VM we're running in is 32 or 64 bit by 
+     * looking at the system properties.
+     *
+     * @return true if 64 bit
+     */
+    private static boolean is64BitJVM() {
+        // Try the direct way first, by looking for 'sun.arch.data.model'
+        String dataModel = getSystemProperty("sun.arch.data.model");
+        try {
+            if (new Integer(dataModel).intValue() == 64)
+                return true;
+            else 
+                return false;
+        } catch (NumberFormatException ignoreNFE) {}
+
+        // Try 'os.arch'
+        String arch = getSystemProperty("os.arch");
+        // See if we recognize the property value.
+        if (arch != null) {
+            // Is it a known 32 bit architecture?
+            String[] b32 = new String[] {"i386", "x86", "sparc"};
+            if (Arrays.asList(b32).contains(arch)) return false;
+            // Is it a known 64 bit architecture?
+            String[] b64 = new String[] {"amd64", "x86_64", "sparcv9"};
+            if (Arrays.asList(b64).contains(arch)) return true;
+        }
+
+        // Didn't find out anything.
+        BaseTestCase.traceit("Bitness undetermined, sun.arch.data.model='" +
+                    dataModel + "', os.arch='" + arch + "', assuming we're 32 bit");
+        // we don't know, assume it's 32 bit.
+        return false;
+    }
 }