Return-Path: X-Original-To: apmail-db-derby-commits-archive@www.apache.org Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 93CCBC1AC for ; Fri, 18 May 2012 22:40:04 +0000 (UTC) Received: (qmail 47155 invoked by uid 500); 18 May 2012 22:40:04 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 47106 invoked by uid 500); 18 May 2012 22:40:04 -0000 Mailing-List: contact derby-commits-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: "Derby Development" List-Id: Delivered-To: mailing list derby-commits@db.apache.org Received: (qmail 47098 invoked by uid 99); 18 May 2012 22:40:03 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 May 2012 22:40:03 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 18 May 2012 22:40:00 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8AFFF2388962; Fri, 18 May 2012 22:39:40 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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/ Date: Fri, 18 May 2012 22:39:40 -0000 To: derby-commits@db.apache.org From: mamta@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120518223940.8AFFF2388962@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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. + *

+ * 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. + *

+ * 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 getInfo of the sysinfo tool within - * this JVM and returns a BufferedReader 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; } /** - *

Calls the public method getSysInfo() of the Network + *

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.

@@ -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; + } + } + }