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 fu...@apache.org on 2005/03/03 02:30:47 UTC
svn commit: r155990 [15/15] - in incubator/derby/code/trunk: ./
java/testing/ java/testing/org/apache/derbyTesting/functionTests/harness/
java/testing/org/apache/derbyTesting/functionTests/master/
java/testing/org/apache/derbyTesting/functionTests/suites/
java/testing/org/apache/derbyTesting/functionTests/tests/lang/
java/testing/org/apache/derbyTesting/functionTests/tests/store/
java/testing/org/apache/derbyTesting/functionTests/tests/unit/
java/testing/org/apache/derbyTesting/unitTests/
java/testing/org/apache/derbyTesting/unitTests/crypto/
java/testing/org/apache/derbyTesting/unitTests/harness/
java/testing/org/apache/derbyTesting/unitTests/lang/
java/testing/org/apache/derbyTesting/unitTests/services/
java/testing/org/apache/derbyTesting/unitTests/store/
java/testing/org/apache/derbyTesting/unitTests/util/
Propchange: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/store/T_b2i.java
------------------------------------------------------------------------------
snv:eol-style = native
Added: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/BitUtil.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/BitUtil.java?view=auto&rev=155990
==============================================================================
--- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/BitUtil.java (added)
+++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/BitUtil.java Wed Mar 2 17:30:05 2005
@@ -0,0 +1,197 @@
+/*
+
+ Derby - Class org.apache.derbyTesting.unitTests.util.BitUtil
+
+ Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ */
+
+package org.apache.derbyTesting.unitTests.util;
+
+
+/**
+ * This class provides utility methods for
+ * converting byte arrays to hexidecimal Strings and manipulating BIT/BIT VARYING values as a
+ * packed vector of booleans.
+ *
+ * <P> The BIT/BIT VARYING methods are modeled after
+ * some methods in the <I>java.util.BitSet</I> class.
+ * An alternative to using a SQL BIT (VARYING) column
+ * in conjunction with the methods provided herein to
+ * provide bit manipulation would be to use a serialized
+ * <I>java.util.BitSet</I> column instead.
+ * <p>
+ * This class contains the following static methods: <UL>
+ * <LI> void <B>set</B>(byte[] bytes, int position) to set a bit</LI>
+ * <LI> void <B>clear</B>(byte[] bytes, int position) to clear a bit</LI>
+ * <LI> boolean <B>get</B>(byte[] bytes, int position) to get the
+ * bit status </LI> </UL>
+ * <p>
+ * Since these methods effectively allow a SQL BIT to be
+ * considered as an array of booleans, all offsets (position
+ * parameters) are zero based. So if you want to set
+ * the first bit of a BIT type, you would use <I>
+ * set(MyBitColumn, 0) </I>.
+ * <p>
+ * Examples: <UL>
+ * <LI> SELECT BitUtil::get(bitcol, 2) FROM mytab </LI>
+ * <LI> UPDATE mytab SET bitcol = BitUtil::set(bitcol, 2) </LI>
+ * <LI> UPDATE mytab SET bitcol = BitUtil::clear(bitcol, 2) </LI> </UL>
+ *
+ */
+public class BitUtil
+{
+ /**
+ * Set the bit at the specified position
+ *
+ * @param bytes the byte array
+ * @param position the bit to set, starting from zero
+ *
+ * @return the byte array with the set bit
+ *
+ * @exception IndexOutOfBoundsException on bad position
+ */
+ public static byte[] set(byte[] bytes, int position)
+ {
+ if (position >= 0)
+ {
+ int bytepos = position >> 3;
+ if (bytepos < bytes.length)
+ {
+ int bitpos = 7 - (position % 8);
+
+ bytes[bytepos] |= (1 << bitpos);
+ return bytes;
+ }
+ }
+ throw new IndexOutOfBoundsException(Integer.toString(position));
+ }
+
+ /**
+ * Clear the bit at the specified position
+ *
+ * @param bytes the byte array
+ * @param position the bit to clear, starting from zero
+ *
+ * @return the byte array with the cleared bit
+ *
+ * @exception IndexOutOfBoundsException on bad position
+ */
+ public static byte[] clear(byte[] bytes, int position)
+ {
+ if (position >= 0)
+ {
+ int bytepos = position >> 3;
+ if (bytepos < bytes.length)
+ {
+ int bitpos = 7 - (position % 8);
+ bytes[bytepos] &= ~(1 << bitpos);
+ return bytes;
+ }
+ }
+
+ throw new IndexOutOfBoundsException(Integer.toString(position));
+ }
+
+ /**
+ * Check to see if the specified bit is set
+ *
+ * @param bytes the byte array
+ * @param position the bit to check, starting from zero
+ *
+ * @return true/false
+ *
+ * @exception IndexOutOfBoundsException on bad position
+ */
+ public static boolean get(byte[] bytes, int position)
+ {
+ if (position >= 0)
+ {
+ int bytepos = position >> 3;
+ if (bytepos < bytes.length)
+ {
+ int bitpos = 7 - (position % 8);
+ return ((bytes[bytepos] & (1 << bitpos)) != 0);
+ }
+ }
+ throw new IndexOutOfBoundsException(Integer.toString(position));
+ }
+
+ private static char[] hex_table = {
+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'a', 'b', 'c', 'd', 'e', 'f'
+ };
+
+ /**
+ Convert a byte array to a human-readable String for debugging purposes.
+ */
+ public static String hexDump(byte[] data)
+ {
+ byte byte_value;
+
+
+ StringBuffer str = new StringBuffer(data.length * 3);
+
+ str.append("Hex dump:\n");
+
+ for (int i = 0; i < data.length; i += 16)
+ {
+ // dump the header: 00000000:
+ String offset = Integer.toHexString(i);
+
+ // "0" left pad offset field so it is always 8 char's long.
+ for (int offlen = offset.length(); offlen < 8; offlen++)
+ str.append("0");
+ str.append(offset);
+ str.append(":");
+
+ // dump hex version of 16 bytes per line.
+ for (int j = 0; (j < 16) && ((i + j) < data.length); j++)
+ {
+ byte_value = data[i + j];
+
+ // add spaces between every 2 bytes.
+ if ((j % 2) == 0)
+ str.append(" ");
+
+ // dump a single byte.
+ byte high_nibble = (byte) ((byte_value & 0xf0) >>> 4);
+ byte low_nibble = (byte) (byte_value & 0x0f);
+
+ str.append(hex_table[high_nibble]);
+ str.append(hex_table[low_nibble]);
+ }
+
+ // dump ascii version of 16 bytes
+ str.append(" ");
+
+ for (int j = 0; (j < 16) && ((i + j) < data.length); j++)
+ {
+ char char_value = (char) data[i + j];
+
+ // RESOLVE (really want isAscii() or isPrintable())
+ if (Character.isLetterOrDigit(char_value))
+ str.append(String.valueOf(char_value));
+ else
+ str.append(".");
+ }
+
+ // new line
+ str.append("\n");
+ }
+ return(str.toString());
+
+ }
+}
Propchange: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/BitUtil.java
------------------------------------------------------------------------------
snv:eol-style = native
Added: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/MsgTrace.java
URL: http://svn.apache.org/viewcvs/incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/MsgTrace.java?view=auto&rev=155990
==============================================================================
--- incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/MsgTrace.java (added)
+++ incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/MsgTrace.java Wed Mar 2 17:30:05 2005
@@ -0,0 +1,89 @@
+/*
+
+ Derby - Class org.apache.derbyTesting.unitTests.util.MsgTrace
+
+ Copyright 1998, 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ */
+
+package org.apache.derbyTesting.unitTests.util;
+
+import org.apache.derby.iapi.services.monitor.Monitor;
+import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.services.stream.HeaderPrintWriter;
+import org.apache.derby.iapi.services.property.PropertyUtil;
+
+import org.apache.derby.iapi.services.stream.InfoStreams;
+
+// static methods
+// set up automatically first time it's used
+// default trigger is time-bomb, but refer to config for other
+// possibilities
+// add timestamps, thread ID's, (stack location info?)
+
+public class MsgTrace implements Runnable {
+ //
+ // Number of seconds the memory trace waits before
+ // dumping its output.
+ public static final String
+ DELAY_PARAM_NAME = "derby.memoryTrace.bombDelay";
+
+ public static final String
+ RING_BUFFER_SIZE_PARAM_NAME = "derby.memoryTrace.ringBufferSize";
+
+ private static MsgTrace singleton = null;
+ long bombDelay; // 30 minutes
+ int ringBufferSize;
+ // InMemoryTrace recorder;
+ HeaderPrintWriter output;
+
+ private MsgTrace() {
+
+ output = Monitor.getMonitor().getSystemStreams().stream();
+
+ bombDelay = PropertyUtil.getSystemInt(DELAY_PARAM_NAME, 30 * 60); // 30 minutes default
+ bombDelay *= 1000;
+
+ ringBufferSize = PropertyUtil.getSystemInt(RING_BUFFER_SIZE_PARAM_NAME, 99/*InMemoryTrace.DEFAULT_RING_BUFFER_SIZE*/);
+
+ // recorder = new InMemoryTrace(ringBufferSize);
+
+ Thread t = new Thread(this);
+ t.setDaemon(true);
+ t.start();
+ }
+
+ public static void traceString(String msg) {
+ if (singleton == null)
+ singleton = new MsgTrace();
+ singleton.trace(msg);
+ }
+
+ private void trace(String msg) {
+// // wrap msg in a Dumpable
+// d.timestamp = System.currentTimeMillis();
+// d.threadId = Thread.currentThread().getName();
+// d.msg = msg;
+ // recorder.traceString(msg);
+ }
+
+ public void run() {
+ try { Thread.sleep(bombDelay); } catch (InterruptedException ie) {}
+
+ // recorder.dump(output);
+
+ System.exit(1);
+ }
+}
Propchange: incubator/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/util/MsgTrace.java
------------------------------------------------------------------------------
snv:eol-style = native