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