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 kr...@apache.org on 2010/08/13 09:52:15 UTC

svn commit: r985120 - in /db/derby/code/trunk/java: client/org/apache/derby/client/net/ engine/org/apache/derby/iapi/jdbc/ engine/org/apache/derby/iapi/types/ testing/org/apache/derbyTesting/functionTests/tests/derbynet/ testing/org/apache/derbyTesting...

Author: kristwaa
Date: Fri Aug 13 07:52:14 2010
New Revision: 985120

URL: http://svn.apache.org/viewvc?rev=985120&view=rev
Log:
DERBY-4770: Files missing svn:eol-style (August 2010)

Set the svn:eol-style property to native.

Modified:
    db/derby/code/trunk/java/client/org/apache/derby/client/net/Utf8CcsidManager.java   (props changed)
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/CharacterStreamDescriptor.java   (props changed)
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/CharStreamHeaderGenerator.java   (props changed)
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/ClobStreamHeaderGenerator.java   (props changed)
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/PositionedStream.java   (props changed)
    db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/StreamHeaderGenerator.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/Utf8CcsidManagerClientTest.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StreamTruncationTest.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RoutinesDefinersRightsTest.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/replicationTests/SimplePerfTest_Verify.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BootLockMinion.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BootLockTest.java   (props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/Derby4577Test.java   (contents, props changed)
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/CharacterStreamDescriptorTest.java   (props changed)

Propchange: db/derby/code/trunk/java/client/org/apache/derby/client/net/Utf8CcsidManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/iapi/jdbc/CharacterStreamDescriptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/CharStreamHeaderGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/ClobStreamHeaderGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/PositionedStream.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/StreamHeaderGenerator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/derbynet/Utf8CcsidManagerClientTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/jdbc4/StreamTruncationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/RoutinesDefinersRightsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/replicationTests/SimplePerfTest_Verify.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BootLockMinion.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/BootLockTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/Derby4577Test.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/Derby4577Test.java?rev=985120&r1=985119&r2=985120&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/Derby4577Test.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/Derby4577Test.java Fri Aug 13 07:52:14 2010
@@ -1,352 +1,352 @@
-package org.apache.derbyTesting.functionTests.tests.store;
-
-import org.apache.derbyTesting.junit.BaseJDBCTestCase;
-import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
-import org.apache.derbyTesting.junit.DatabasePropertyTestSetup;
-import org.apache.derbyTesting.junit.JDBC;
-import org.apache.derbyTesting.junit.TestConfiguration;
-
-import org.apache.derby.shared.common.sanity.SanityManager;
-
-import junit.framework.Assert;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import java.sql.CallableStatement;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.Statement;
-import java.sql.SQLException;
-
-
-/*
-Class org.apache.derbyTesting.functionTests.tests.store.Derby4577Test
-
-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.
-
-*/
-
-
-/**
-
-Test to reproduce DERBY-4577, An expanding update fails with an nospc.U error.
-
-**/
-
-public class Derby4577Test extends StoreBaseTest
-{
-    /**************************************************************************
-     * Fields of the class
-     **************************************************************************
-     */
-
-    /**************************************************************************
-     * Constructors for This class:
-     **************************************************************************
-     */
-
-    /**************************************************************************
-     * Private/Protected methods of This class:
-     **************************************************************************
-     */
-
-    /**************************************************************************
-     * Public Methods of This class:
-     **************************************************************************
-     */
-
-    /**************************************************************************
-     * Public Methods of XXXX class:
-     **************************************************************************
-     */
-
-    public Derby4577Test(String name) 
-    {
-        super(name);
-    }
-
-    
-    /**
-     * DERBY-4577 test case
-     * <p>
-     * The update error occurs with the following:
-     *   o update of a long row which requires an update on it's overflow page
-     *   o The portion of the long row on the overflow page needs to have 
-     *     max(row size, reserved space) + free space on page <= 12  
-     *     (12 causes the error, other values might also).
-     *
-     * In order to get to this one needs multiple rows on the overflow page,
-     * so that they can eat up the free space on the page.  This test 
-     * simulates the overflow page state that I got from running the test case 
-     * associated with DERBY-2286.  I could only repro on a fast dual core
-     * linux machine.  I repro'd a few times and it always had 3 rows on
-     * the page: one that had a long column pointer, one that had a long
-     * row pointer, and one that had the blob on the page eating up most of
-     * the space on the overflow page.  
-     *
-     * The test does the following:
-     * o drop/create table
-     * o insert 3 rows of interest that will all fit on 1st page, with 1 byte
-     *     blob columns.
-     * o insert a dummy row that will fill up the rest of the 1st page.
-     * o update 1st 3 rows so that they are now all long rows that share the
-     *   same overflow page.
-     * o update row 1 so that it now has a long column, this actually shrinks
-     *   it on this overflow page.
-     * o update row 2 so that blob column is bigger, but still less than a page
-     *   this results in row 2 getting another long row pointer to a page that
-     *   holds the new blob value.  Again this actually shrinks the row piece
-     *   on the overflow page in question.
-     * o update row 3 so that it's overflow piece fills up all the remaining
-     *   space on the overflow page.
-     * o finally update row 1's long column, this update causes the bug.  The
-     *   no space error should never be thrown to a user on an update.  The only
-     *   time an error of this type is allowed is if the actual disk is full.
-     *
-     **/
-    public void testDERBY_4577()
-        throws SQLException
-    {
-
-        // page 0 - container info/bit map, does not affect test
-
-        // page 1 - 
-        // row on it that can never be deleted so this page never can be
-        // made free.
-
-        Statement stmt = createStatement();
-
-        PreparedStatement insert_stmt = 
-            prepareStatement("INSERT INTO testBadUpdate VALUES(?, ?)");
-
-        PreparedStatement update_stmt = 
-            prepareStatement("UPDATE testBadUpdate set value = ? where id = ?");
-
-        // insert 3 rows that will fit on same main page.
-        byte[] pad_blob = new byte[1];
-
-        for (int i = 0; i < 3; i++)
-        {
-            insert_stmt.setInt(     1, i);
-            insert_stmt.setBytes(   2, pad_blob);
-            insert_stmt.executeUpdate();
-        }
-
-        commit();
-
-        // insert a row that fills rest of main page
-        pad_blob = new byte[32000];
-        insert_stmt.setInt(     1, 3);
-        insert_stmt.setBytes(   2, pad_blob);
-        insert_stmt.executeUpdate();
-
-        // now expand each of the rows so that each becomes a "long row", with
-        // first column on main page with a pointer to overflow page, and each
-        // 2nd column exists in full on the overflow page.  Want
-        // each overflow to end up on same page.  
-        pad_blob = new byte[4000];
-        for (int i = 0; i < 3; i++)
-        {
-            update_stmt.setBytes(   1, pad_blob);
-            update_stmt.setInt(     2, i);
-            update_stmt.executeUpdate();
-        }
-
-        commit();
-
-        // eat up the rest of space on main page, by expanding the 4th row.
-        pad_blob = new byte[32566];
-        update_stmt.setBytes(   1, pad_blob);
-        update_stmt.setInt(     2, 3);
-        update_stmt.executeUpdate();
-        commit();
-
-        // expand row 1 so that it's blob column becomes a long column
-        pad_blob = new byte[60000];
-        update_stmt.setBytes(   1, pad_blob);
-        update_stmt.setInt(     2, 0);
-        update_stmt.executeUpdate();
-        commit();
-
-        // expand row 2 so that it's blob column becomes another long row
-        // pointer.
-        pad_blob = new byte[32500];
-        update_stmt.setBytes(   1, pad_blob);
-        update_stmt.setInt(     2, 1);
-        update_stmt.executeUpdate();
-        commit();
-        
-        // expand row 3 so that it's blob column becomes 32649 long.
-        //  was 32000
-        pad_blob = new byte[32646];
-        update_stmt.setBytes(   1, pad_blob);
-        update_stmt.setInt(     2, 2);
-        update_stmt.executeUpdate();
-        commit();
-
-        // see if we can update the long column of row 1
-        pad_blob = new byte[120000];
-        update_stmt.setBytes(   1, pad_blob);
-        update_stmt.setInt(     2, 0);
-        update_stmt.executeUpdate();
-        commit();
-
-        stmt.close();
-        insert_stmt.close();
-        update_stmt.close();
-    }
-
-    public void testSmallRow1()
-        throws SQLException
-    {
-        Statement stmt = createStatement();
-
-        // setup has created:
-        // CREATE TABLE testSmallRow1 (id char(1))
-        //     should be a 4k page size.
-
-        PreparedStatement insert_stmt = 
-            prepareStatement("INSERT INTO testSmallRow1 VALUES(?)");
-
-        // insert more than 3 pages of rows.
-        insert_stmt.setString(1, "a");
-
-        for (int i = 0; i < 4000; i++)
-        {
-            insert_stmt.executeUpdate();
-        }
-        insert_stmt.close();
-        commit();
-
-        // create an index to test btree handling of short key.
-        stmt.executeUpdate("CREATE INDEX idx1 on testSmallRow1(id)");
-
-        // Check the consistency of the indexes
-        ResultSet rs = stmt.executeQuery(
-            "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TESTSMALLROW1')");
-        String [][] expRS = new String [][] {{"1"}};
-        JDBC.assertFullResultSet(rs, expRS, true);
-
-        // now test on new table with an index during the inserts.
-
-        // create an index to test btree handling of short key.
-        stmt.executeUpdate("CREATE INDEX idx2 on testSmallRow2(id)");
-
-        insert_stmt = 
-            prepareStatement("INSERT INTO testSmallRow2 VALUES(?)");
-
-        // insert more than 3 pages of rows.
-        insert_stmt.setString(1, "a");
-
-        for (int i = 0; i < 4000; i++)
-        {
-            insert_stmt.executeUpdate();
-        }
-        insert_stmt.close();
-        commit();
-
-        // Check the consistency of the indexes
-        rs = stmt.executeQuery(
-            "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TESTSMALLROW2')");
-        expRS = new String [][] {{"1"}};
-        JDBC.assertFullResultSet(rs, expRS, true);
-
-        // DDL that caused a bug while trying to fix derby 4577, data is null
-
-        // create an index to test btree handling of short key.
-        stmt.executeUpdate("CREATE INDEX idx3 on testSmallRow3(id)");
-
-        insert_stmt = 
-            prepareStatement("INSERT INTO testSmallRow3 VALUES(?, ?)");
-
-        // insert more than 3 pages of rows.
-        insert_stmt.setString(1, null);
-
-        for (int i = 0; i < 100; i++)
-        {
-            insert_stmt.setInt(2, i);
-            insert_stmt.executeUpdate();
-        }
-        commit();
-
-        stmt.executeUpdate("UPDATE testSmallRow3 set id = null where id2 > 1");
-
-        // Deleting rows from root of btree which will then force purges on the
-        // page before it does a split.  The purges force the raw store 
-        // through reclaim space on page code path.
-        stmt.executeUpdate("DELETE from testSmallRow3 where id2 = 40 or id2 = 41 or id2 = 80 or id2 = 81");
-        commit();
-
-        insert_stmt.setString(1, null);
-        for (int i = 101; i < 600; i++)
-        {
-            insert_stmt.executeUpdate();
-            insert_stmt.setInt(2, i);
-        }
-        
-        insert_stmt.close();
-        commit();
-
-        // Check the consistency of the indexes
-        rs = stmt.executeQuery(
-            "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TESTSMALLROW3')");
-        expRS = new String [][] {{"1"}};
-        JDBC.assertFullResultSet(rs, expRS, true);
-
-        stmt.close();
-    }
-    
-    protected static Test baseSuite(String name) 
-    {
-        TestSuite suite = new TestSuite(name);
-        suite.addTestSuite(Derby4577Test.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
-            {
-                Connection conn = stmt.getConnection();
-
-                // create a table, with blob it will be 32k page size
-                stmt.executeUpdate(
-                    "CREATE TABLE testBadUpdate (id int, value blob(1M))");
-
-                stmt.executeUpdate(
-                    "CREATE TABLE testSmallRow1 (id char(1))");
-
-                stmt.executeUpdate(
-                    "CREATE TABLE testSmallRow2 (id char(1))");
-
-                stmt.executeUpdate(
-                    "CREATE TABLE testSmallRow3 (id char(20), id2 int)");
-
-                conn.setAutoCommit(false);
-            }
-        };
-    }
-
-    public static Test suite() 
-    {
-        TestSuite suite = new TestSuite("Derby4577Test");
-        suite.addTest(baseSuite("Derby4577Test:embedded"));
-        return suite;
-    }
-}
+package org.apache.derbyTesting.functionTests.tests.store;
+
+import org.apache.derbyTesting.junit.BaseJDBCTestCase;
+import org.apache.derbyTesting.junit.CleanDatabaseTestSetup;
+import org.apache.derbyTesting.junit.DatabasePropertyTestSetup;
+import org.apache.derbyTesting.junit.JDBC;
+import org.apache.derbyTesting.junit.TestConfiguration;
+
+import org.apache.derby.shared.common.sanity.SanityManager;
+
+import junit.framework.Assert;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.Statement;
+import java.sql.SQLException;
+
+
+/*
+Class org.apache.derbyTesting.functionTests.tests.store.Derby4577Test
+
+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.
+
+*/
+
+
+/**
+
+Test to reproduce DERBY-4577, An expanding update fails with an nospc.U error.
+
+**/
+
+public class Derby4577Test extends StoreBaseTest
+{
+    /**************************************************************************
+     * Fields of the class
+     **************************************************************************
+     */
+
+    /**************************************************************************
+     * Constructors for This class:
+     **************************************************************************
+     */
+
+    /**************************************************************************
+     * Private/Protected methods of This class:
+     **************************************************************************
+     */
+
+    /**************************************************************************
+     * Public Methods of This class:
+     **************************************************************************
+     */
+
+    /**************************************************************************
+     * Public Methods of XXXX class:
+     **************************************************************************
+     */
+
+    public Derby4577Test(String name) 
+    {
+        super(name);
+    }
+
+    
+    /**
+     * DERBY-4577 test case
+     * <p>
+     * The update error occurs with the following:
+     *   o update of a long row which requires an update on it's overflow page
+     *   o The portion of the long row on the overflow page needs to have 
+     *     max(row size, reserved space) + free space on page <= 12  
+     *     (12 causes the error, other values might also).
+     *
+     * In order to get to this one needs multiple rows on the overflow page,
+     * so that they can eat up the free space on the page.  This test 
+     * simulates the overflow page state that I got from running the test case 
+     * associated with DERBY-2286.  I could only repro on a fast dual core
+     * linux machine.  I repro'd a few times and it always had 3 rows on
+     * the page: one that had a long column pointer, one that had a long
+     * row pointer, and one that had the blob on the page eating up most of
+     * the space on the overflow page.  
+     *
+     * The test does the following:
+     * o drop/create table
+     * o insert 3 rows of interest that will all fit on 1st page, with 1 byte
+     *     blob columns.
+     * o insert a dummy row that will fill up the rest of the 1st page.
+     * o update 1st 3 rows so that they are now all long rows that share the
+     *   same overflow page.
+     * o update row 1 so that it now has a long column, this actually shrinks
+     *   it on this overflow page.
+     * o update row 2 so that blob column is bigger, but still less than a page
+     *   this results in row 2 getting another long row pointer to a page that
+     *   holds the new blob value.  Again this actually shrinks the row piece
+     *   on the overflow page in question.
+     * o update row 3 so that it's overflow piece fills up all the remaining
+     *   space on the overflow page.
+     * o finally update row 1's long column, this update causes the bug.  The
+     *   no space error should never be thrown to a user on an update.  The only
+     *   time an error of this type is allowed is if the actual disk is full.
+     *
+     **/
+    public void testDERBY_4577()
+        throws SQLException
+    {
+
+        // page 0 - container info/bit map, does not affect test
+
+        // page 1 - 
+        // row on it that can never be deleted so this page never can be
+        // made free.
+
+        Statement stmt = createStatement();
+
+        PreparedStatement insert_stmt = 
+            prepareStatement("INSERT INTO testBadUpdate VALUES(?, ?)");
+
+        PreparedStatement update_stmt = 
+            prepareStatement("UPDATE testBadUpdate set value = ? where id = ?");
+
+        // insert 3 rows that will fit on same main page.
+        byte[] pad_blob = new byte[1];
+
+        for (int i = 0; i < 3; i++)
+        {
+            insert_stmt.setInt(     1, i);
+            insert_stmt.setBytes(   2, pad_blob);
+            insert_stmt.executeUpdate();
+        }
+
+        commit();
+
+        // insert a row that fills rest of main page
+        pad_blob = new byte[32000];
+        insert_stmt.setInt(     1, 3);
+        insert_stmt.setBytes(   2, pad_blob);
+        insert_stmt.executeUpdate();
+
+        // now expand each of the rows so that each becomes a "long row", with
+        // first column on main page with a pointer to overflow page, and each
+        // 2nd column exists in full on the overflow page.  Want
+        // each overflow to end up on same page.  
+        pad_blob = new byte[4000];
+        for (int i = 0; i < 3; i++)
+        {
+            update_stmt.setBytes(   1, pad_blob);
+            update_stmt.setInt(     2, i);
+            update_stmt.executeUpdate();
+        }
+
+        commit();
+
+        // eat up the rest of space on main page, by expanding the 4th row.
+        pad_blob = new byte[32566];
+        update_stmt.setBytes(   1, pad_blob);
+        update_stmt.setInt(     2, 3);
+        update_stmt.executeUpdate();
+        commit();
+
+        // expand row 1 so that it's blob column becomes a long column
+        pad_blob = new byte[60000];
+        update_stmt.setBytes(   1, pad_blob);
+        update_stmt.setInt(     2, 0);
+        update_stmt.executeUpdate();
+        commit();
+
+        // expand row 2 so that it's blob column becomes another long row
+        // pointer.
+        pad_blob = new byte[32500];
+        update_stmt.setBytes(   1, pad_blob);
+        update_stmt.setInt(     2, 1);
+        update_stmt.executeUpdate();
+        commit();
+        
+        // expand row 3 so that it's blob column becomes 32649 long.
+        //  was 32000
+        pad_blob = new byte[32646];
+        update_stmt.setBytes(   1, pad_blob);
+        update_stmt.setInt(     2, 2);
+        update_stmt.executeUpdate();
+        commit();
+
+        // see if we can update the long column of row 1
+        pad_blob = new byte[120000];
+        update_stmt.setBytes(   1, pad_blob);
+        update_stmt.setInt(     2, 0);
+        update_stmt.executeUpdate();
+        commit();
+
+        stmt.close();
+        insert_stmt.close();
+        update_stmt.close();
+    }
+
+    public void testSmallRow1()
+        throws SQLException
+    {
+        Statement stmt = createStatement();
+
+        // setup has created:
+        // CREATE TABLE testSmallRow1 (id char(1))
+        //     should be a 4k page size.
+
+        PreparedStatement insert_stmt = 
+            prepareStatement("INSERT INTO testSmallRow1 VALUES(?)");
+
+        // insert more than 3 pages of rows.
+        insert_stmt.setString(1, "a");
+
+        for (int i = 0; i < 4000; i++)
+        {
+            insert_stmt.executeUpdate();
+        }
+        insert_stmt.close();
+        commit();
+
+        // create an index to test btree handling of short key.
+        stmt.executeUpdate("CREATE INDEX idx1 on testSmallRow1(id)");
+
+        // Check the consistency of the indexes
+        ResultSet rs = stmt.executeQuery(
+            "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TESTSMALLROW1')");
+        String [][] expRS = new String [][] {{"1"}};
+        JDBC.assertFullResultSet(rs, expRS, true);
+
+        // now test on new table with an index during the inserts.
+
+        // create an index to test btree handling of short key.
+        stmt.executeUpdate("CREATE INDEX idx2 on testSmallRow2(id)");
+
+        insert_stmt = 
+            prepareStatement("INSERT INTO testSmallRow2 VALUES(?)");
+
+        // insert more than 3 pages of rows.
+        insert_stmt.setString(1, "a");
+
+        for (int i = 0; i < 4000; i++)
+        {
+            insert_stmt.executeUpdate();
+        }
+        insert_stmt.close();
+        commit();
+
+        // Check the consistency of the indexes
+        rs = stmt.executeQuery(
+            "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TESTSMALLROW2')");
+        expRS = new String [][] {{"1"}};
+        JDBC.assertFullResultSet(rs, expRS, true);
+
+        // DDL that caused a bug while trying to fix derby 4577, data is null
+
+        // create an index to test btree handling of short key.
+        stmt.executeUpdate("CREATE INDEX idx3 on testSmallRow3(id)");
+
+        insert_stmt = 
+            prepareStatement("INSERT INTO testSmallRow3 VALUES(?, ?)");
+
+        // insert more than 3 pages of rows.
+        insert_stmt.setString(1, null);
+
+        for (int i = 0; i < 100; i++)
+        {
+            insert_stmt.setInt(2, i);
+            insert_stmt.executeUpdate();
+        }
+        commit();
+
+        stmt.executeUpdate("UPDATE testSmallRow3 set id = null where id2 > 1");
+
+        // Deleting rows from root of btree which will then force purges on the
+        // page before it does a split.  The purges force the raw store 
+        // through reclaim space on page code path.
+        stmt.executeUpdate("DELETE from testSmallRow3 where id2 = 40 or id2 = 41 or id2 = 80 or id2 = 81");
+        commit();
+
+        insert_stmt.setString(1, null);
+        for (int i = 101; i < 600; i++)
+        {
+            insert_stmt.executeUpdate();
+            insert_stmt.setInt(2, i);
+        }
+        
+        insert_stmt.close();
+        commit();
+
+        // Check the consistency of the indexes
+        rs = stmt.executeQuery(
+            "VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('APP', 'TESTSMALLROW3')");
+        expRS = new String [][] {{"1"}};
+        JDBC.assertFullResultSet(rs, expRS, true);
+
+        stmt.close();
+    }
+    
+    protected static Test baseSuite(String name) 
+    {
+        TestSuite suite = new TestSuite(name);
+        suite.addTestSuite(Derby4577Test.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
+            {
+                Connection conn = stmt.getConnection();
+
+                // create a table, with blob it will be 32k page size
+                stmt.executeUpdate(
+                    "CREATE TABLE testBadUpdate (id int, value blob(1M))");
+
+                stmt.executeUpdate(
+                    "CREATE TABLE testSmallRow1 (id char(1))");
+
+                stmt.executeUpdate(
+                    "CREATE TABLE testSmallRow2 (id char(1))");
+
+                stmt.executeUpdate(
+                    "CREATE TABLE testSmallRow3 (id char(20), id2 int)");
+
+                conn.setAutoCommit(false);
+            }
+        };
+    }
+
+    public static Test suite() 
+    {
+        TestSuite suite = new TestSuite("Derby4577Test");
+        suite.addTest(baseSuite("Derby4577Test:embedded"));
+        return suite;
+    }
+}

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/store/Derby4577Test.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: db/derby/code/trunk/java/testing/org/apache/derbyTesting/unitTests/junit/CharacterStreamDescriptorTest.java
------------------------------------------------------------------------------
    svn:eol-style = native