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 km...@apache.org on 2006/05/26 18:08:49 UTC
svn commit: r409688 - in /db/derby/code/trunk/java:
client/org/apache/derby/client/am/ClobWriter.java
testing/org/apache/derbyTesting/functionTests/master/lobStreams.out
testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/lobStreams.java
Author: kmarsden
Date: Fri May 26 09:08:48 2006
New Revision: 409688
URL: http://svn.apache.org/viewvc?rev=409688&view=rev
Log:
DERBY-1245 Add o.a.derby.client.am.ClobWriter test coverage
DERBY-1354 Writer.write(int c) to writer from Clob.setCharacterStream(long pos) appends integer value, not character
Contributed by Anders Morken
Modified:
db/derby/code/trunk/java/client/org/apache/derby/client/am/ClobWriter.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/lobStreams.out
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/lobStreams.java
Modified: db/derby/code/trunk/java/client/org/apache/derby/client/am/ClobWriter.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/client/org/apache/derby/client/am/ClobWriter.java?rev=409688&r1=409687&r2=409688&view=diff
==============================================================================
--- db/derby/code/trunk/java/client/org/apache/derby/client/am/ClobWriter.java (original)
+++ db/derby/code/trunk/java/client/org/apache/derby/client/am/ClobWriter.java Fri May 26 09:08:48 2006
@@ -43,7 +43,7 @@
public void write(int c) {
StringBuffer sb = new StringBuffer(clob_.string_.substring(0, (int) offset_ - 1));
- sb.append(c);
+ sb.append((char)c);
clob_.string_ = sb.toString();
clob_.asciiStream_ = new java.io.StringBufferInputStream(clob_.string_);
clob_.unicodeStream_ = new java.io.StringBufferInputStream(clob_.string_);
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/lobStreams.out
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/lobStreams.out?rev=409688&r1=409687&r2=409688&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/lobStreams.out (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/master/lobStreams.out Fri May 26 09:08:48 2006
@@ -3,9 +3,16 @@
testBlobWrite3Param finished
START: testBlobWrite1Param
testBlobWrite1Param finished
-START: testClobWrite3Param
-testClobWrite3Param finished
-START: testClobWrite1Param
-testClobWrite1Param finished
-FINISHED TEST blobSetBinaryStream :-)
+START: testClobAsciiWrite3Param
+testClobAsciiWrite3Param finished
+START: testClobAsciiWrite1Param
+testClobAsciiWrite1Param finished
+START: testClobCharacterWrite3ParamChar
+testClobCharacterWrite3ParamChar finished
+START: testClobCharacterWrite3ParamString
+testClobCharacterWrite3ParamString finished
+START: testClobCharacterWrite1ParamString
+testClobCharacterWrite1ParamString finished
+START: testClobCharacterWrite1Char
+testClobCharacterWrite1Char finished
Test lob stream with multiple writes finished
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/lobStreams.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/lobStreams.java?rev=409688&r1=409687&r2=409688&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/lobStreams.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbcapi/lobStreams.java Fri May 26 09:08:48 2006
@@ -24,8 +24,11 @@
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
+import java.io.FileReader;
import java.io.InputStream;
import java.io.OutputStream;
+import java.io.Reader;
+import java.io.Writer;
import java.sql.Blob;
import java.sql.Clob;
import java.sql.Connection;
@@ -45,6 +48,10 @@
static boolean debug = true;
private static final String START = "\nSTART: ";
+
+ private static final String unicodeTestString = "This is a test string containing a few " +
+ "non-ascii characters:\nÃÃÃ
and æøå are used in norwegian: 'Blåbærsyltetøy' means" +
+ "'blueberry jam', and tastes great on pancakes. =)";
static
{
@@ -91,18 +98,25 @@
resetBlobClob(conn);
testBlobWrite1Param(conn);
resetBlobClob(conn);
- testClobWrite3Param(conn);
+ testClobAsciiWrite3Param(conn);
resetBlobClob(conn);
- testClobWrite1Param(conn);
+ testClobAsciiWrite1Param(conn);
+ resetBlobClob(conn);
+ testClobCharacterWrite3ParamChar(conn);
+ resetBlobClob(conn);
+ testClobCharacterWrite3ParamString(conn);
+ resetBlobClob(conn);
+ testClobCharacterWrite1ParamString(conn);
+ resetBlobClob(conn);
+ testClobCharacterWrite1Char(conn);
// restart the connection
conn.commit();
cleanUp(conn);
conn.commit();
conn.close();
- System.out.println("FINISHED TEST blobSetBinaryStream :-)");
- }
+ }
catch (Throwable e)
{
System.out.println("FAIL -- unexpected exception:" + e.toString());
@@ -156,6 +170,9 @@
}
+ /**
+ * Tests the BlobOutputStream.write(byte b[], int off, int len) method
+ **/
private static void testBlobWrite3Param(Connection conn)
{
try {
@@ -229,6 +246,9 @@
}
}
+ /**
+ * Tests the BlobOutputStream.write(int b) method
+ **/
private static void testBlobWrite1Param(Connection conn)
{
try {
@@ -301,10 +321,13 @@
}
}
- private static void testClobWrite3Param(Connection conn)
+ /**
+ * Tests the ClobOutputStream.write(byte b[], int off, int len) method
+ **/
+ private static void testClobAsciiWrite3Param(Connection conn)
{
try {
- System.out.println(START + "testClobWrite3Param");
+ System.out.println(START + "testClobAsciiWrite3Param");
PreparedStatement stmt3 = conn.prepareStatement(
"SELECT c FROM testBlobX1 WHERE a = 1");
@@ -365,7 +388,7 @@
rs3.close();
stmt3.close();
- System.out.println("testClobWrite3Param finished");
+ System.out.println("testClobAsciiWrite3Param finished");
} catch (SQLException e) {
TestUtil.dumpSQLExceptions(e);
} catch (Throwable e) {
@@ -373,10 +396,13 @@
}
}
- private static void testClobWrite1Param(Connection conn)
+ /**
+ * Tests the ClobOutputStream.write(int b) method
+ **/
+ private static void testClobAsciiWrite1Param(Connection conn)
{
try {
- System.out.println(START + "testClobWrite1Param");
+ System.out.println(START + "testClobAsciiWrite1Param");
PreparedStatement stmt3 = conn.prepareStatement(
"SELECT c FROM testBlobX1 WHERE a = 1");
@@ -437,14 +463,278 @@
rs3.close();
stmt3.close();
- System.out.println("testClobWrite1Param finished");
+ System.out.println("testClobAsciiWrite1Param finished");
} catch (SQLException e) {
TestUtil.dumpSQLExceptions(e);
} catch (Throwable e) {
if (debug) e.printStackTrace();
}
}
-
+
+ /**
+ * Tests the ClobWriter.write(char cbuf[], int off, int len) method
+ **/
+ private static void testClobCharacterWrite3ParamChar(Connection conn)
+ {
+ try {
+ System.out.println(START + "testClobCharacterWrite3ParamChar");
+
+ PreparedStatement stmt3 = conn.prepareStatement(
+ "SELECT c FROM testBlobX1 WHERE a = 1");
+
+ ResultSet rs3 = stmt3.executeQuery();
+
+ rs3.next();
+
+ Clob clob = rs3.getClob(1);
+ char[] testdata = unicodeTestString.toCharArray();
+
+
+ if (clob != null) {
+ Writer clobWriter = clob.setCharacterStream(1L);
+ clobWriter.write(testdata, 0, testdata.length);
+ clobWriter.close();
+
+ PreparedStatement stmt4 = conn.prepareStatement(
+ "UPDATE testBlobX1 SET c = ? WHERE a = 1");
+ stmt4.setClob(1, clob);
+ stmt4.executeUpdate();
+ stmt4.close();
+ } else {
+ System.out.println("FAIL -- clob is NULL");
+ }
+
+ rs3.close();
+ rs3 = stmt3.executeQuery();
+
+ if (rs3.next()) {
+ long new_length = rs3.getClob(1).length();
+ if (new_length != testdata.length) {
+ System.out.println(
+ "FAIL -- wrong clob length; original: " +
+ testdata.length + " clob length: " + new_length);
+ } else {
+ // Check contents ...
+ Reader lStream = rs3.getClob(1).getCharacterStream();
+
+ if (!compareClobReader2CharArray(testdata, lStream))
+ System.out.println("FAIL - Clob and buffer contents do not match");
+
+ lStream.close();
+
+ }
+ } else {
+ System.out.println("FAIL -- clob not found");
+ }
+ rs3.close();
+ stmt3.close();
+
+ System.out.println("testClobCharacterWrite3ParamChar finished");
+ } catch (SQLException e) {
+ TestUtil.dumpSQLExceptions(e);
+ } catch (Throwable e) {
+ if (debug) e.printStackTrace();
+ }
+ }
+
+ /**
+ * Tests the ClobWriter.write(String str, int off, int len) method
+ **/
+ private static void testClobCharacterWrite3ParamString(Connection conn)
+ {
+ try {
+ System.out.println(START + "testClobCharacterWrite3ParamString");
+
+ PreparedStatement stmt3 = conn.prepareStatement(
+ "SELECT c FROM testBlobX1 WHERE a = 1");
+
+ ResultSet rs3 = stmt3.executeQuery();
+
+ rs3.next();
+
+ Clob clob = rs3.getClob(1);
+
+
+ if (clob != null) {
+ Writer clobWriter = clob.setCharacterStream(1L);
+ clobWriter.write(unicodeTestString, 0, unicodeTestString.length());
+ clobWriter.close();
+
+ PreparedStatement stmt4 = conn.prepareStatement(
+ "UPDATE testBlobX1 SET c = ? WHERE a = 1");
+ stmt4.setClob(1, clob);
+ stmt4.executeUpdate();
+ stmt4.close();
+ } else {
+ System.out.println("FAIL -- clob is NULL");
+ }
+
+ rs3.close();
+ rs3 = stmt3.executeQuery();
+
+ if (rs3.next()) {
+ long new_length = rs3.getClob(1).length();
+ if (new_length != unicodeTestString.length()) {
+ System.out.println(
+ "FAIL -- wrong clob length; original: " +
+ unicodeTestString.length() + " clob length: " + new_length);
+ } else {
+ // Check contents ...
+ Reader lStream = rs3.getClob(1).getCharacterStream();
+
+ if (!compareClobReader2CharArray(unicodeTestString.toCharArray(), lStream))
+ System.out.println("FAIL - Clob and buffer contents do not match");
+
+ lStream.close();
+
+ }
+ } else {
+ System.out.println("FAIL -- clob not found");
+ }
+ rs3.close();
+ stmt3.close();
+
+ System.out.println("testClobCharacterWrite3ParamString finished");
+ } catch (SQLException e) {
+ TestUtil.dumpSQLExceptions(e);
+ } catch (Throwable e) {
+ if (debug) e.printStackTrace();
+ }
+ }
+
+ /**
+ * Tests the ClobWriter.write(String str) method
+ **/
+ private static void testClobCharacterWrite1ParamString(Connection conn)
+ {
+ try {
+ System.out.println(START + "testClobCharacterWrite1ParamString");
+
+ PreparedStatement stmt3 = conn.prepareStatement(
+ "SELECT c FROM testBlobX1 WHERE a = 1");
+
+ ResultSet rs3 = stmt3.executeQuery();
+
+ rs3.next();
+
+ Clob clob = rs3.getClob(1);
+
+
+ if (clob != null) {
+ Writer clobWriter = clob.setCharacterStream(1L);
+ clobWriter.write(unicodeTestString);
+ clobWriter.close();
+
+ PreparedStatement stmt4 = conn.prepareStatement(
+ "UPDATE testBlobX1 SET c = ? WHERE a = 1");
+ stmt4.setClob(1, clob);
+ stmt4.executeUpdate();
+ stmt4.close();
+ } else {
+ System.out.println("FAIL -- clob is NULL");
+ }
+
+ rs3.close();
+ rs3 = stmt3.executeQuery();
+
+ if (rs3.next()) {
+ long new_length = rs3.getClob(1).length();
+ if (new_length != unicodeTestString.length()) {
+ System.out.println(
+ "FAIL -- wrong clob length; original: " +
+ unicodeTestString.length() + " clob length: " + new_length);
+ } else {
+ // Check contents ...
+ Reader lStream = rs3.getClob(1).getCharacterStream();
+
+ if (!compareClobReader2CharArray(unicodeTestString.toCharArray(), lStream))
+ System.out.println("FAIL - Clob and buffer contents do not match");
+
+ lStream.close();
+
+ }
+ } else {
+ System.out.println("FAIL -- clob not found");
+ }
+ rs3.close();
+ stmt3.close();
+
+ System.out.println("testClobCharacterWrite1ParamString finished");
+ } catch (SQLException e) {
+ TestUtil.dumpSQLExceptions(e);
+ } catch (Throwable e) {
+ if (debug) e.printStackTrace();
+ }
+ }
+ /**
+ * Tests the ClobWriter.write(int c) method
+ **/
+ private static void testClobCharacterWrite1Char(Connection conn)
+ {
+ try {
+ System.out.println(START + "testClobCharacterWrite1Char");
+
+ PreparedStatement stmt3 = conn.prepareStatement(
+ "SELECT c FROM testBlobX1 WHERE a = 1");
+
+ ResultSet rs3 = stmt3.executeQuery();
+
+ rs3.next();
+
+ Clob clob = rs3.getClob(1);
+
+ char testchar = 'a';
+
+ if (clob != null) {
+ Writer clobWriter = clob.setCharacterStream(1L);
+ clobWriter.write(testchar);
+ clobWriter.close();
+
+ PreparedStatement stmt4 = conn.prepareStatement(
+ "UPDATE testBlobX1 SET c = ? WHERE a = 1");
+ stmt4.setClob(1, clob);
+ stmt4.executeUpdate();
+ stmt4.close();
+ } else {
+ System.out.println("FAIL -- clob is NULL");
+ }
+
+ rs3.close();
+ rs3 = stmt3.executeQuery();
+
+ if (rs3.next()) {
+ long new_length = rs3.getClob(1).length();
+ Clob fish = rs3.getClob(1);
+ if (new_length != 1) {
+ System.out.println(
+ "FAIL -- wrong clob length; original: " +
+ 1 + " clob length: " + new_length);
+ } else {
+ // Check contents ...
+ Reader lStream = rs3.getClob(1).getCharacterStream();
+ char clobchar = (char) lStream.read();
+
+ if (clobchar != testchar)
+ System.out.println("FAIL - fetched Clob and original contents do not match");
+
+ lStream.close();
+
+ }
+ } else {
+ System.out.println("FAIL -- clob not found");
+ }
+ rs3.close();
+ stmt3.close();
+
+ System.out.println("testClobCharacterWrite1Char finished");
+ } catch (SQLException e) {
+ TestUtil.dumpSQLExceptions(e);
+ } catch (Throwable e) {
+ if (debug) e.printStackTrace();
+ }
+ }
+
+
private static boolean compareLob2File(InputStream fStream, InputStream lStream) {
byte[] fByte = new byte[1024];
byte[] lByte = new byte[1024];
@@ -467,6 +757,29 @@
return true;
}
+ private static boolean compareClobReader2CharArray(char[] cArray, Reader charReader) {
+ char[] clobChars = new char[cArray.length];
+
+ int readChars = 0;
+ int totalCharsRead = 0;
+
+ try {
+ do {
+ readChars = charReader.read(clobChars, totalCharsRead, cArray.length - totalCharsRead);
+ if (readChars != -1)
+ totalCharsRead += readChars;
+ } while (readChars != -1 && totalCharsRead < cArray.length);
+ charReader.close();
+ if (!java.util.Arrays.equals(cArray, clobChars))
+ return false;
+
+ } catch (Throwable e) {
+ if (debug) e.printStackTrace();
+ }
+ return true;
+ }
+
+
private static void cleanUp(Connection conn) throws SQLException {
String[] testObjects = {"table testBlobX1"};
Statement cleanupStmt = conn.createStatement();