Return-Path: Delivered-To: apmail-db-derby-commits-archive@www.apache.org Received: (qmail 92079 invoked from network); 16 May 2008 16:23:38 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 16 May 2008 16:23:38 -0000 Received: (qmail 89360 invoked by uid 500); 16 May 2008 16:23:40 -0000 Delivered-To: apmail-db-derby-commits-archive@db.apache.org Received: (qmail 89284 invoked by uid 500); 16 May 2008 16:23:40 -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 89275 invoked by uid 99); 16 May 2008 16:23:40 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 16 May 2008 09:23:40 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.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, 16 May 2008 16:22:49 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 03C072388A00; Fri, 16 May 2008 09:23:11 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r657124 - /db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java Date: Fri, 16 May 2008 16:23:10 -0000 To: derby-commits@db.apache.org From: kmarsden@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080516162311.03C072388A00@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: kmarsden Date: Fri May 16 09:23:09 2008 New Revision: 657124 URL: http://svn.apache.org/viewvc?rev=657124&view=rev Log: DERBY-3650 (partial) - Derby + Hibernate JPA 3.2.1 problem on entity with Blob/Clob Just adding some tests for the issue which don't pass yet, so not adding them to any suite yet. Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java (with props) Added: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java?rev=657124&view=auto ============================================================================== --- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java (added) +++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java Fri May 16 09:23:09 2008 @@ -0,0 +1,235 @@ +package org.apache.derbyTesting.functionTests.tests.jdbc4; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.sql.Blob; +import java.sql.Clob; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.Arrays; + +import junit.framework.Test; +import junit.framework.TestSuite; + +import org.apache.derbyTesting.junit.BaseJDBCTestCase; +import org.apache.derbyTesting.junit.CleanDatabaseTestSetup; +import org.apache.derbyTesting.junit.DatabasePropertyTestSetup; +import org.apache.derbyTesting.junit.TestConfiguration; + +/* +Class org.apache.derbyTesting.functionTests.tests.jdbc4.Derby3650Test + +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to you 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. + +*/ +/** + * These are tests to test the cases for DERBY-3650. + * The tests won't pass until that bug is fixed. + */ + +public class Derby3650Test extends BaseJDBCTestCase { + + public Derby3650Test(String name) { + super(name); + + } + + public void setup() throws SQLException{ + + getConnection().setAutoCommit(false); + } + + + /** + * If join returns clob in more than one row, test that the + * stream can be retrieved if free is not called. + * @param freelob true if we should free the lob after it has been retrieved and verified. + * @param commitAfterLobVerify true if we should commit after the lob has been retrieved and verified + * @throws SQLException + * @throws IOException + */ + public void test1ToManyJoinClob(boolean freelob, boolean commitAfterLobVerify) throws SQLException, IOException + { + PreparedStatement ps = prepareStatement( + "select c from testClob join jointab on jointab.id = testClob.id"); + ResultSet rs = ps.executeQuery(); + while (rs.next()) { + Clob clob = rs.getClob(1); + if (freelob) + clob.free(); + if (commitAfterLobVerify) + commit(); + verify40KClob(clob.getCharacterStream()); + } + rs.close(); + rs = ps.executeQuery(); + while (rs.next()) { + verify40KClob(rs.getCharacterStream(1)); + } + } + + /** + * If join returns clob in more than one row, test that the + * stream can be retrieved. + * + * @param freelob true if we should free the lob after it has been retrieved and verified. + * @param commitAfterLobVerify true if we should commit after the lob has been retrieved and verified + * @throws SQLException + * @throws IOException + */ + + public void test1ToManyJoinBlob(boolean freelob, boolean commitAfterLobVerify) throws SQLException, IOException + { + PreparedStatement ps = prepareStatement( + "select c from testBlob join jointab on jointab.id = testBlob.id"); + ResultSet rs = ps.executeQuery(); + while (rs.next()) { + Blob blob = rs.getBlob(1); + verify40KBlob(blob.getBinaryStream()); + if (freelob) + blob.free(); + if (commitAfterLobVerify) + commit(); + } + rs.close(); + rollback(); + rs = ps.executeQuery(); + while (rs.next()) { + verify40KBlob(rs.getBinaryStream(1)); + } + + + } + + public void test1ToManyJoinBlobNoFree() throws SQLException, IOException { + test1ToManyJoinBlob(false,false); + + } + + public void test1ToManyJoinBlobWithFree() throws SQLException, IOException { + test1ToManyJoinBlob(false,true); + } + + public void test1ToManyJoinBlobWithCommit() throws SQLException, IOException { + test1ToManyJoinBlob(true,false); + } + + + public void test1ToManyJoinClobNoFree() throws SQLException, IOException { + test1ToManyJoinClob(false,false); + + } + + public void test1ToManyJoinClobWithFree() throws SQLException, IOException { + test1ToManyJoinClob(false,true); + } + + public void test1ToManyJoinClobWithCommit() throws SQLException, IOException { + test1ToManyJoinClob(true,false); + } + + + + private void verify40KClob(Reader r) throws SQLException, IOException { + + int c; + int charcount = 0; + do { + c = r.read(); + if (c != -1) { + charcount++; + if ((char) c != 'a') { + fail("Unexpected Character " + (char)c); + } + } + } + while (c != -1); + if (charcount != 40000) + fail("Unexcpected character count " + charcount); + + } + + private void verify40KBlob(InputStream is ) throws SQLException, IOException { + int b; + int bytecount = 0; + do { + b = is.read(); + if (b != -1) { + bytecount++; + if ((byte) b != (byte) 'a') { + fail("Unexpected byte value " + (byte) b); + } + } + } + while (b != -1); + if (bytecount != 40000) + fail("Unexpected byte count"); + + } + + + protected static Test baseSuite(String name) { + TestSuite suite = new TestSuite(name); + suite.addTestSuite(Derby3650Test.class); + return new CleanDatabaseTestSetup( + DatabasePropertyTestSetup.setLockTimeouts(suite, 2, 4)) + { + /** + * Creates the tables used in the test cases. + * @exception SQLException if a database error occurs + */ + protected void decorateSQL(Statement stmt) throws SQLException + { + stmt.executeUpdate("CREATE TABLE testClob (id int, c CLOB(2M))"); + Connection conn = stmt.getConnection(); + PreparedStatement ps = conn.prepareStatement("INSERT INTO TestClob VALUES(?,?)"); + ps.setInt(1,1); + char[] myval = new char[40000]; + Arrays.fill(myval,'a'); + ps.setString(2,new String(myval)); + ps.executeUpdate(); + ps.close(); + stmt.executeUpdate("CREATE TABLE testBlob (id int, c BLOB(2M))"); + ps = conn.prepareStatement("INSERT INTO TestBlob VALUES(?,?)"); + ps.setInt(1,1); + byte[] mybytes = new byte[40000]; + Arrays.fill(mybytes, (byte) 'a'); + ps.setBytes(2,mybytes); + ps.executeUpdate(); + ps.close(); + stmt.executeUpdate("CREATE TABLE jointab (id int)"); + stmt.executeUpdate("INSERT INTO jointab values(1)"); + stmt.executeUpdate("INSERT INTO jointab values(1)"); + + + + } + }; + } + public static Test suite() { + TestSuite suite = new TestSuite("Derby3650Test"); + suite.addTest(baseSuite("Derby3650Test:embedded")); + suite.addTest(TestConfiguration.clientServerDecorator( + baseSuite("Derby3650Test:client"))); + return suite; + + } +} + Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/Derby3650Test.java ------------------------------------------------------------------------------ svn:eol-style = native