blob: 9da89b3c115429a71344f5fdacbafef6519c38b8 [file] [log] [blame]
/**
*
* Derby - Class BLOBDataModelSetup
*
* 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.
*/
package org.apache.derbyTesting.functionTests.tests.jdbcapi;
import org.apache.derbyTesting.functionTests.util.TestInputStream;
import org.apache.derbyTesting.junit.BaseJDBCTestCase;
import org.apache.derbyTesting.junit.BaseJDBCTestSetup;
import junit.extensions.TestSetup;
import junit.framework.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.io.InputStream;
/**
* Sets up a data model with very large BLOBs.
* The table created will have three fields:
* 1. a value field (val), which is the value for every byte in the BLOB.
* 2. a length (length) field which is the actual size of the BLOB
* 3. the data field (data), which is the actual BLOB data.
*
*/
final public class BLOBDataModelSetup extends BaseJDBCTestSetup
{
/**
* Constructor
* @param test test object being decorated by this TestSetup
*/
public BLOBDataModelSetup(Test test)
{
super(test);
}
/**
* The setup creates a Connection to the database, and creates a table
* with blob columns.
* @exception Exception any exception will cause test to fail with error.
*/
protected final void setUp()
throws Exception
{
Connection con = getConnection();
con.setAutoCommit(false);
// Create table:
final Statement statement = con.createStatement();
statement.executeUpdate("CREATE TABLE " + tableName + " ("+
" val INTEGER," +
" length INTEGER, " +
" data BLOB(2G) NOT NULL)");
statement.close();
// Insert some data:
final PreparedStatement preparedStatement =
con.prepareStatement
("INSERT INTO " + tableName + "(val, length, data) VALUES (?,?, ?)");
// Insert 10 records with size of 1MB
for (int i = 0; i < regularBlobs; i++) {
final int val = i;
final InputStream stream = new TestInputStream(size, val);
preparedStatement.setInt(1, val);
preparedStatement.setInt(2, size);
preparedStatement.setBinaryStream(3, stream, size);
preparedStatement.executeUpdate();
}
// Insert 1 record with size of 64 MB
BaseJDBCTestCase.println("Insert BLOB with size = " + bigSize);
preparedStatement.setInt(1, bigVal);
preparedStatement.setInt(2, bigSize);
final InputStream stream = new TestInputStream(bigSize, bigVal);
preparedStatement.setBinaryStream(3, stream, bigSize);
BaseJDBCTestCase.println("Execute update");
preparedStatement.executeUpdate();
preparedStatement.close();
BaseJDBCTestCase.println("Commit");
con.commit();
}
/**
* Teardown test.
* Rollback connection and close it.
* @exception Exceptions causes the test to fail with error
*/
protected final void tearDown()
throws Exception
{
try {
Connection con = getConnection();
Statement statement = con.createStatement();
statement.execute("DROP TABLE " + tableName);
statement.close();
con.commit();
} catch (SQLException e) {
BaseJDBCTestCase.printStackTrace(e);
}
super.tearDown();
}
/**
* Return table name
* @return table name
*/
public static final String getBlobTableName()
{
return tableName;
}
/** Size of regular Blobs (currently 1MB) */
final static int size = 1024 * 1024;
/** Number of regular Blobs */
final static int regularBlobs = 10;
/** Size of big record (currently 64 MB) */
final static int bigSize = 64 * 1024 * 1024;
/** Val for big record */
final static int bigVal = regularBlobs + 1;
/** Name of table */
private static final String tableName = "TESTBLOBTABLE";
}