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 ka...@apache.org on 2007/03/27 08:56:04 UTC
svn commit: r522789 - in /db/derby/code/trunk/java:
engine/org/apache/derby/impl/jdbc/ engine/org/apache/derby/loc/
shared/org/apache/derby/shared/common/reference/
Author: kahatlen
Date: Mon Mar 26 23:56:03 2007
New Revision: 522789
URL: http://svn.apache.org/viewvc?view=rev&rev=522789
Log:
DERBY-2247: Provide set methods for blob in embedded driver
Fixed some review comments. Patch contributed by Anurag Shekhar.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java
db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java?view=diff&rev=522789&r1=522788&r2=522789
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedBlob.java Mon Mar 26 23:56:03 2007
@@ -113,7 +113,7 @@
super(con);
try {
control = new LOBStreamControl (con.getDBName());
- control.write (blobBytes, 0);
+ control.write (blobBytes, 0, blobBytes.length, 0);
materialized = true;
}
catch (IOException e) {
@@ -145,13 +145,14 @@
SanityManager.ASSERT(dvdBytes != null,"blob has a null value underneath");
control = new LOBStreamControl (getEmbedConnection().getDBName());
try {
- control.write (dvdBytes, pos);
+ control.write (dvdBytes, 0, dvdBytes.length, pos);
}
catch (SQLException e) {
throw StandardException.newException (e.getSQLState());
}
catch (IOException e) {
- throw StandardException.newException (null, e);
+ throw StandardException.newException (
+ SQLState.SET_STREAM_FAILURE, e);
}
}
else
@@ -350,7 +351,7 @@
// if the blob is materialized
if (materialized) {
result = new byte [length];
- int sz = control.read (result, startPos - 1);
+ int sz = control.read (result, 0, result.length, startPos - 1);
if (sz < length) {
byte [] tmparray = new byte [sz];
System.arraycopy (result, 0, tmparray, 0, sz);
@@ -809,9 +810,6 @@
return control.getOutputStream (pos - 1);
}
else {
- if (pos > length())
- throw Util.generateCsSQLException (
- SQLState.BLOB_POSITION_TOO_LARGE);
control = new LOBStreamControl (
getEmbedConnection().getDBName());
control.copyData (myStream, pos - 1);
@@ -841,7 +839,7 @@
{
if (len > length())
throw Util.generateCsSQLException(
- SQLState.BLOB_NONPOSITIVE_LENGTH, new Long(pos));
+ SQLState.BLOB_LENGTH_TOO_LONG, new Long(pos));
try {
if (materialized) {
control.truncate (len);
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java?view=diff&rev=522789&r1=522788&r2=522789
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBInputStream.java Mon Mar 26 23:56:03 2007
@@ -123,59 +123,6 @@
}
/**
- * Reads some number of bytes from the input stream and stores them into
- * the buffer array <code>b</code>. The number of bytes actually read is
- * returned as an integer. This method blocks until input data is
- * available, end of file is detected, or an exception is thrown.
- *
- * <p> If <code>b</code> is <code>null</code>, a
- * <code>NullPointerException</code> is thrown. If the length of
- * <code>b</code> is zero, then no bytes are read and <code>0</code> is
- * returned; otherwise, there is an attempt to read at least one byte. If
- * no byte is available because the stream is at end of file, the value
- * <code>-1</code> is returned; otherwise, at least one byte is read and
- * stored into <code>b</code>.
- *
- * <p> The first byte read is stored into element <code>b[0]</code>, the
- * next one into <code>b[1]</code>, and so on. The number of bytes read is,
- * at most, equal to the length of <code>b</code>. Let <i>k</i> be the
- * number of bytes actually read; these bytes will be stored in elements
- * <code>b[0]</code> through <code>b[</code><i>k</i><code>-1]</code>,
- * leaving elements <code>b[</code><i>k</i><code>]</code> through
- * <code>b[b.length-1]</code> unaffected.
- *
- * <p> If the first byte cannot be read for any reason other than end of
- * file, then an <code>IOException</code> is thrown. In particular, an
- * <code>IOException</code> is thrown if the input stream has been closed.
- *
- * <p> The <code>read(b)</code> method for class <code>InputStream</code>
- * has the same effect as: <pre><code> read(b, 0, b.length) </code></pre>
- *
- * @param b the buffer into which the data is read.
- * @return the total number of bytes read into the buffer, or
- * <code>-1</code> is there is no more data because the end of
- * the stream has been reached.
- * @exception IOException if an I/O error occurs.
- * @exception NullPointerException if <code>b</code> is <code>null</code>.
- * @see java.io.InputStream#read(byte[], int, int)
- */
- public int read(byte[] b) throws IOException {
- if (closed)
- throw new IOException (
- MessageService.getTextMessage(SQLState.LANG_STREAM_CLOSED));
- try {
- int ret = control.read(b, pos);
- if (ret > 0) {
- pos += ret;
- return ret;
- }
- return -1;
- } catch (SQLException e) {
- return handleSQLException (e);
- }
- }
-
- /**
* Closes this input stream and releases any system resources associated
* with the stream.
*
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java?view=diff&rev=522789&r1=522788&r2=522789
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBOutputStream.java Mon Mar 26 23:56:03 2007
@@ -115,28 +115,6 @@
}
/**
- * Writes <code>b.length</code> bytes from the specified byte array
- * to this output stream. The general contract for <code>write(b)</code>
- * is that it should have exactly the same effect as the call
- * <code>write(b, 0, b.length)</code>.
- *
- * @param b the data.
- * @exception IOException if an I/O error occurs.
- * @see java.io.OutputStream#write(byte[], int, int)
- */
- public void write(byte[] b) throws IOException {
- if (closed)
- throw new IOException (
- MessageService.getTextMessage(
- SQLState.LANG_STREAM_CLOSED));
- try {
- pos = control.write(b, pos);
- } catch (SQLException e) {
- throw new IOException(e.getMessage());
- }
- }
-
- /**
* Closes this output stream and releases any system resources
* associated with this stream. The general contract of <code>close</code>
* is that it closes the output stream. A closed stream cannot perform
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java?view=diff&rev=522789&r1=522788&r2=522789
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/LOBStreamControl.java Mon Mar 26 23:56:03 2007
@@ -53,7 +53,6 @@
*/
class LOBStreamControl {
- //private RandomAccessFile tmpFile;
private StorageRandomAccessFile tmpFile;
private StorageFile lobFile;
private byte [] dataBytes = new byte [0];
@@ -75,13 +74,13 @@
Property.DATABASE_MODULE, dbName);
DataFactory df = (DataFactory) Monitor.findServiceModule(
monitor, DataFactory.MODULE);
+ //create a temporary file
lobFile =
df.getStorageFactory().createTemporaryFile("lob", null);
tmpFile = lobFile.getRandomAccessFile ("rw");
return null;
}
});
- //create a temporary file
}
catch (PrivilegedActionException pae) {
Exception e = pae.getException();
@@ -156,7 +155,7 @@
}
}
- private void isValidOffset(int off, int length) throws SQLException, IOException {
+ private void isValidOffset(int off, int length) throws SQLException {
if (off < 0 || off > length)
throw Util.generateCsSQLException(
SQLState.BLOB_INVALID_OFFSET, new Integer(off));
@@ -180,8 +179,7 @@
init(dataBytes, pos);
}
}
- if (tmpFile.getFilePointer() != pos)
- tmpFile.seek(pos);
+ tmpFile.seek(pos);
tmpFile.write(b);
return tmpFile.getFilePointer();
}
@@ -208,46 +206,18 @@
throw new ArrayIndexOutOfBoundsException (e.getMessage());
}
if (isBytes) {
- long finalLen = (dataBytes != null) ? dataBytes.length + b.length
- : b.length;
- if (finalLen < MAX_BUF_SIZE)
+ if (pos + b.length < MAX_BUF_SIZE)
return updateData(b, off, len, pos);
else {
init(dataBytes, pos);
}
}
- if (tmpFile.getFilePointer() != pos)
- tmpFile.seek(pos);
+ tmpFile.seek(pos);
tmpFile.write(b, off, len);
return tmpFile.getFilePointer();
}
/**
- * Writes byte array starting from pos.
- * @param b bytes array
- * @param pos starting postion
- * @return new position
- * @throws IOException, SQLException
- */
- synchronized long write(byte[] b, long pos)
- throws IOException, SQLException {
- isValidPostion(pos);
- if (isBytes) {
- long len = (dataBytes != null) ? dataBytes.length + b.length
- : b.length;
- if (len < MAX_BUF_SIZE)
- return updateData(b, 0, b.length, pos);
- else {
- init(dataBytes, pos);
- }
- }
- if (tmpFile.getFilePointer() != pos)
- tmpFile.seek(pos);
- tmpFile.write(b);
- return tmpFile.getFilePointer();
- }
-
- /**
* Reads one byte.
* @param pos postion from where to read
* @return byte
@@ -279,18 +249,6 @@
}
/**
- * Copies bytes into byte array starting from pos.
- * @param b bytes array to copy data
- * @param pos starting postion
- * @return new postion
- * @throws IOException, SQLException
- */
- synchronized int read(byte[] b, long pos)
- throws IOException, SQLException {
- return read (b, 0, b.length, pos);
- }
-
- /**
* Reads bytes starting from 'position' into bytes array.
* starting from 'offset'
* @param buff array into the bytes will be copied
@@ -307,8 +265,7 @@
if (isBytes) {
return readBytes(buff, off, len, pos);
}
- if (tmpFile.getFilePointer() != pos)
- tmpFile.seek(pos);
+ tmpFile.seek(pos);
return tmpFile.read (buff, off, len);
}
@@ -355,7 +312,7 @@
} else {
if (size < Integer.MAX_VALUE && size < MAX_BUF_SIZE) {
dataBytes = new byte [(int) size];
- read(dataBytes, 0);
+ read(dataBytes, 0, dataBytes.length, 0);
isBytes = true;
tmpFile.close();
tmpFile = null;
Modified: db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml?view=diff&rev=522789&r1=522788&r2=522789
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml Mon Mar 26 23:56:03 2007
@@ -3654,6 +3654,11 @@
<text>The statement has been cancelled or timed out.</text>
</msg>
+ <msg>
+ <name>XCL53</name>
+ <text>Stream is closed</text>
+ </msg>
+
</family>
Modified: db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java?view=diff&rev=522789&r1=522788&r2=522789
==============================================================================
--- db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java (original)
+++ db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java Mon Mar 26 23:56:03 2007
@@ -942,7 +942,6 @@
// MORE GENERIC LANGUAGE STUFF
String LANG_COLUMN_DEFAULT = "42Z09.U";
String LANG_STREAM = "42Z11.U";
- String LANG_STREAM_CLOSED = "42Z12";
// String LANG_UPDATABLE_VTI_BAD_GETMETADATA = "42Z14";
@@ -1333,6 +1332,9 @@
String LANG_CANT_UPGRADE_DATABASE = "XCL50.S";
String LANG_STATEMENT_CANCELLED_OR_TIMED_OUT = "XCL52.S";
+
+ //lob stream error
+ String LANG_STREAM_CLOSED = "XCL53";
/*
** Language errors that match DB2