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 ma...@apache.org on 2012/05/19 00:39:40 UTC

svn commit: r1340293 - in /db/derby/code/branches/10.3: ./ java/engine/org/apache/derby/iapi/sql/dictionary/ java/testing/org/apache/derbyTesting/functionTests/tests/lang/ java/testing/org/apache/derbyTesting/junit/

Author: mamta
Date: Fri May 18 22:39:39 2012
New Revision: 1340293

URL: http://svn.apache.org/viewvc?rev=1340293&view=rev
Log:
Backporting 2 jiras to 10.3 with some manual changes because of code conflict(this backport is a merge from 10.4 rather than from trunk to make the backporting easier without too many conflicts to resolve)

DERBY-5681 When a foreign key constraint on a table is dropped, the associated statistics row for the conglomerate is not removed

DERBY-4834 Add helper class for working with index statistics in JUnit tests


Added:
    db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/functionTests/tests/lang/Derby5681Test.java
      - copied unchanged from r1338905, db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/functionTests/tests/lang/Derby5681Test.java
    db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/junit/IndexStatsUtil.java
      - copied unchanged from r1338905, db/derby/code/branches/10.4/java/testing/org/apache/derbyTesting/junit/IndexStatsUtil.java
Modified:
    db/derby/code/branches/10.3/   (props changed)
    db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java
    db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/junit/Utilities.java

Propchange: db/derby/code/branches/10.3/
------------------------------------------------------------------------------
  Merged /db/derby/code/branches/10.5:r1337032
  Merged /db/derby/code/branches/10.4:r1338905
  Merged /db/derby/code/branches/10.7:r1336809
  Merged /db/derby/code/trunk:r1005347,1031559,1041374,1042537,1329359

Modified: db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java?rev=1340293&r1=1340292&r2=1340293&view=diff
==============================================================================
--- db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java (original)
+++ db/derby/code/branches/10.3/java/engine/org/apache/derby/iapi/sql/dictionary/ConglomerateDescriptor.java Fri May 18 22:39:39 2012
@@ -364,13 +364,13 @@ public final class ConglomerateDescripto
         // depended on the index (including this one)
         dm.invalidateFor(this, DependencyManager.DROP_INDEX, lcc);
 	    
+        /* DERBY-5681 Drop statistics */
+        dd.dropStatisticsDescriptors(td.getUUID(), getUUID(), tc);
+
         // only drop the conglomerate if no similar index but with different
-	    // name. Get from dd in case we drop other dup indexes with a cascade operation	    
+	    // name. Get from dd in case we drop other dup indexes with a cascade operation
 	    if (dd.getConglomerateDescriptors(getConglomerateNumber()).length == 1)
 	    {
-	        /* Drop statistics */
-	        dd.dropStatisticsDescriptors(td.getUUID(), getUUID(), tc);
-	        
 	        /* Drop the conglomerate */
 	        tc.dropConglomerate(getConglomerateNumber());
         }	    

Modified: db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/junit/Utilities.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/junit/Utilities.java?rev=1340293&r1=1340292&r2=1340293&view=diff
==============================================================================
--- db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/junit/Utilities.java (original)
+++ db/derby/code/branches/10.3/java/testing/org/apache/derbyTesting/junit/Utilities.java Fri May 18 22:39:39 2012
@@ -1,6 +1,6 @@
 /*
  *
- * Derby - Class Utilities
+ * Derby - Class org.apache.derbyTesting.junit.Utilities
  *
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -22,141 +22,131 @@ package org.apache.derbyTesting.junit;
 import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
-import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 import java.io.StringReader;
 import java.io.UnsupportedEncodingException;
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
 import java.sql.ResultSet;
 import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.StringTokenizer;
+
+import junit.framework.Assert;
 
 
 /**
- * General non-JDBC related utilities relocated from TestUtil
- *
- *
+ * General non-JDBC related utilities.
+ * Some of these were relocated from TestUtil.
  */
 public class Utilities {
 
-    public Utilities() {
-        // TODO Auto-generated constructor stub
-    }
-        /**
-         * Just converts a string to a hex literal to assist in converting test
-         * cases that used to insert strings into bit data tables
-         * Converts using UTF-16BE just like the old casts used to.
-         *
-         * @param s  String to convert  (e.g
-         * @return hex literal that can be inserted into a bit column.
-         */
-        public static String stringToHexLiteral(String s)
-        {
-                byte[] bytes;
-                String hexLiteral = null;
-                try {
-                        bytes = s.getBytes("UTF-16BE");
-                        hexLiteral = convertToHexString(bytes);
-                }
-                catch (UnsupportedEncodingException ue)
-                {
-                        System.out.println("This shouldn't happen as UTF-16BE should be supported");
-                        ue.printStackTrace();
-                }
+    private Utilities() { }
 
-                return hexLiteral;
+    /**
+     * Converts a string to a hex literal to assist in converting test
+     * cases that used to insert strings into bit data tables.
+     * <p>
+     * Converts using UTF-16BE just like the old casts used to.
+     *
+     * @param s string to convert
+     * @return hex literal that can be inserted into a bit column.
+     */
+    public static String stringToHexLiteral(String s) {
+        byte[] bytes;
+        String hexLiteral = null;
+        try {
+            bytes = s.getBytes("UTF-16BE");
+            hexLiteral = convertToHexString(bytes);
+        } catch (UnsupportedEncodingException ue) {
+            Assert.fail("Encoding UTF-16BE unavailable: " + ue.getMessage());
         }
 
-        /**
-         * Convert a byte array to a hex string suitable for insert 
-         * @param buf  byte array to convert
-         * @return     formated string representing byte array
-         */
-        private static String convertToHexString(byte [] buf)
-        {
-                StringBuffer str = new StringBuffer();
-                str.append("X'");
-                String val;
-                int byteVal;
-                for (int i = 0; i < buf.length; i++)
-                {
-                        byteVal = buf[i] & 0xff;
-                        val = Integer.toHexString(byteVal);
-                        if (val.length() < 2)
-                                str.append("0");
-                        str.append(val);
-                }
-                return str.toString() +"'";
+        return hexLiteral;
+    }
+
+    /**
+     * Convert a byte array to a hex string suitable for insert.
+     *
+     * @param buf  byte array to convert
+     * @return     formated string representing byte array
+     */
+    private static String convertToHexString(byte[] buf) {
+        StringBuffer str = new StringBuffer();
+        str.append("X'");
+        String val;
+        int byteVal;
+        for (int i = 0; i < buf.length; i++) {
+            byteVal = buf[i] & 0xff;
+            val = Integer.toHexString(byteVal);
+            if (val.length() < 2) {
+                str.append("0");
+            }
+            str.append(val);
         }
+        return str.toString() + "'";
+    }
+
+    /**
+     * Creates a string with the specified length.
+     * <p>
+     * Called from various tests to test edge cases and such.
+     *
+     * @param c             character to repeat
+     * @param repeatCount   Number of times to repeat character
+     * @return              String of repeatCount characters c
+     */
+    public static String repeatChar(String c, int repeatCount) {
+        char[] chArray = new char[repeatCount];
+        Arrays.fill(chArray, c.charAt(0));
+        return String.valueOf(chArray);
+    }
 
-    	/**
-    	 * repeatChar is used to create strings of varying lengths.
-    	 * called from various tests to test edge cases and such.
-    	 *
-    	 * @param c             character to repeat
-    	 * @param repeatCount   Number of times to repeat character
-    	 * @return              String of repeatCount characters c
-    	 */
-       public static String repeatChar(String c, int repeatCount)
-       {
-    	   char ch = c.charAt(0);
-
-    	   char[] chArray = new char[repeatCount];
-    	   for (int i = 0; i < repeatCount; i++)
-    	   {
-    		   chArray[i] = ch;
-    	   }
-
-    	   return new String(chArray);
-
-       }
-
-        /**
-         * Print out resultSet in two dimensional array format, for use by
-         * JDBC.assertFullResultSet(rs,expectedRows) expectedRows argument.
-         * Useful while converting tests to get output in correct format.
-         * 
-         * @param rs
-         * @throws SQLException
-         */
-        public static void showResultSet(ResultSet rs) throws SQLException {
+    /**
+     * Print out resultSet in two dimensional array format, for use by
+     * JDBC.assertFullResultSet(rs,expectedRows) expectedRows argument.
+     * Useful while converting tests to get output in correct format.
+     *
+     * @param rs result set to print
+     * @throws SQLException if accessing the result set fails
+     */
+    public static void showResultSet(ResultSet rs) throws SQLException {
+        System.out.print("{");
+        int row = 0;
+        boolean next = rs.next();
+        while (next) {
+            row++;
+            ResultSetMetaData rsmd = rs.getMetaData();
+            int nocols = rsmd.getColumnCount();
             System.out.print("{");
-            int row = 0;
-            boolean next = rs.next();
-            while (next) {
-                row++;
-                ResultSetMetaData rsmd = rs.getMetaData();
-                int nocols = rsmd.getColumnCount();
-                System.out.print("{");
-                
-                for (int i = 0; i < nocols; i++)
-                {
-                	String val = rs.getString(i+1);
-                	if (val == null)
-                		System.out.print("null");
-                	else
-                		System.out.print("\"" + rs.getString(i+1) + "\"");
-                    if (i == (nocols -1))
-                        System.out.print("}");
-                    else
-                        System.out.print(",");
-                           
+
+            for (int i = 0; i < nocols; i++) {
+                String val = rs.getString(i + 1);
+                if (val == null) {
+                    System.out.print("null");
+                } else {
+                    System.out.print("\"" + rs.getString(i + 1) + "\"");
                 }
-                next = rs.next();
-                   
-                if (next)
-                    System.out.println(",");
-                else
-                    System.out.println("};\n");
+                if (i == (nocols - 1)) {
+                    System.out.print("}");
+                } else {
+                    System.out.print(",");
+                }
+
+            }
+            next = rs.next();
+
+            if (next) {
+                System.out.println(",");
+            } else {
+                System.out.println("};\n");
             }
         }
+    }
         
     /**
-     * Calls the public method <code>getInfo</code> of the sysinfo tool within
-     * this JVM and returns a <code>BufferedReader</code> for reading its 
+     * Calls the public method {@code getInfo} of the sysinfo tool within
+     * this JVM and returns a {@code BufferedReader} for reading its
      * output. This is useful for obtaining system information that could be 
      * used to verify, for example, values returned by Derby MBeans.
      * 
@@ -172,13 +162,13 @@ public class Utilities {
         pw.close();
         byte[] outBytes = byteStream.toByteArray();
         BufferedReader sysinfoOutput = new BufferedReader(
-                    new InputStreamReader(
-                            new ByteArrayInputStream(outBytes)));
+                new InputStreamReader(
+                new ByteArrayInputStream(outBytes)));
         return sysinfoOutput;
     }
     
     /**
-     * <p>Calls the public method <code>getSysInfo()</code> of the Network 
+     * <p>Calls the public method {@code getSysInfo} of the Network
      * Server instance associated with the current test configuration and 
      * returns the result as a BufferedReader, making it easy to analyse the 
      * output line by line.</p>
@@ -196,4 +186,51 @@ public class Utilities {
                 NetworkServerTestSetup.getNetworkServerControl().getSysinfo()));
     }
 
+    /**
+     * Splits a string around matches of the given delimiter character.
+     * Copied from org.apache.derby.iapi.util.StringUtil
+     *
+     * Where applicable, this method can be used as a substitute for
+     * {@code String.split(String regex)}, which is not available
+     * on a JSR169/Java ME platform.
+     *
+     * @param str the string to be split
+     * @param delim the delimiter
+     * @throws NullPointerException if str is null
+     */
+    public static String[] split(String str, char delim) {
+        // Note the javadoc on StringTokenizer:
+        //     StringTokenizer is a legacy class that is retained for
+        //     compatibility reasons although its use is discouraged in
+        //     new code.
+        // In other words, if StringTokenizer is ever removed from the JDK,
+        // we need to have a look at String.split() (or java.util.regex)
+        // if it is supported on a JSR169/Java ME platform by then.
+        StringTokenizer st = new StringTokenizer(str, String.valueOf(delim));
+        int n = st.countTokens();
+        String[] s = new String[n];
+        for (int i = 0; i < n; i++) {
+            s[i] = st.nextToken();
+        }
+        return s;
+    }
+
+    /**
+     * Sleeps the specified number of milliseconds.
+     *
+     * @param millis sleep duration
+     */
+    public static void sleep(long millis) {
+        long started = System.currentTimeMillis();
+        long waited = 0;
+        while (waited < millis) {
+            try {
+                Thread.sleep(millis - waited);
+            } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+            }
+            waited = System.currentTimeMillis() - started;
+        }
+    }
+
 }