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 2006/07/20 13:54:36 UTC
svn commit: r423912 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/types/DataTypeDescriptor.java impl/jdbc/EmbedPreparedStatement.java
impl/jdbc/EmbedResultSet.java
Author: kahatlen
Date: Thu Jul 20 04:54:35 2006
New Revision: 423912
URL: http://svn.apache.org/viewvc?rev=423912&view=rev
Log:
DERBY-1527: Factor out type checks in EmbedResultSet and EmbedPreparedStatement
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java?rev=423912&r1=423911&r2=423912&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/types/DataTypeDescriptor.java Thu Jul 20 04:54:35 2006
@@ -1070,6 +1070,44 @@
}
}
+ /**
+ * Determine if an ASCII stream can be inserted into a column or parameter
+ * of type <code>jdbcType</code>.
+ *
+ * @param jdbcType JDBC type of column or parameter
+ * @return <code>true</code> if an ASCII stream can be inserted;
+ * <code>false</code> otherwise
+ */
+ public static boolean isAsciiStreamAssignable(int jdbcType) {
+ return jdbcType == Types.CLOB || isCharacterType(jdbcType);
+ }
+
+ /**
+ * Determine if a binary stream can be inserted into a column or parameter
+ * of type <code>jdbcType</code>.
+ *
+ * @param jdbcType JDBC type of column or parameter
+ * @return <code>true</code> if a binary stream can be inserted;
+ * <code>false</code> otherwise
+ */
+ public static boolean isBinaryStreamAssignable(int jdbcType) {
+ return jdbcType == Types.BLOB || isBinaryType(jdbcType);
+ }
+
+ /**
+ * Determine if a character stream can be inserted into a column or
+ * parameter of type <code>jdbcType</code>.
+ *
+ * @param jdbcType JDBC type of column or parameter
+ * @return <code>true</code> if a character stream can be inserted;
+ * <code>false</code> otherwise
+ */
+ public static boolean isCharacterStreamAssignable(int jdbcType) {
+ // currently, we support the same types for ASCII streams and
+ // character streams
+ return isAsciiStreamAssignable(jdbcType);
+ }
+
public String toString()
{
return typeDescriptor.toString();
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java?rev=423912&r1=423911&r2=423912&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java Thu Jul 20 04:54:35 2006
@@ -567,8 +567,7 @@
*/
public final void setAsciiStream(int parameterIndex, InputStream x, long length)
throws SQLException {
- checkCharacterStreamConditions(parameterIndex,
- "java.io.InputStream(ASCII)");
+ checkAsciiStreamConditions(parameterIndex);
java.io.Reader r = null;
if (x != null)
@@ -635,7 +634,7 @@
public final void setCharacterStream(int parameterIndex,
java.io.Reader reader,
long length) throws SQLException {
- checkCharacterStreamConditions(parameterIndex, "java.io.Reader");
+ checkCharacterStreamConditions(parameterIndex);
setCharacterStreamInternal(parameterIndex, reader, false, length);
}
@@ -662,26 +661,31 @@
}
/**
- * Check general (pre)conditions for setXXXStream methods operating on
- * character streams.
+ * Check general preconditions for setCharacterStream methods.
*
* @param parameterIndex 1-based index of the parameter.
- * @param srcDataTypeDesc type description of the source data. Used in
- * error message for data type conversion failure.
*/
- private final void checkCharacterStreamConditions(int parameterIndex,
- String srcDataTypeDesc)
+ private final void checkCharacterStreamConditions(int parameterIndex)
throws SQLException {
checkStatus();
int jdbcTypeId = getParameterJDBCType(parameterIndex);
- switch (jdbcTypeId) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- break;
- default:
- throw dataTypeConversion(parameterIndex, srcDataTypeDesc);
+ if (!DataTypeDescriptor.isCharacterStreamAssignable(jdbcTypeId)) {
+ throw dataTypeConversion(parameterIndex, "java.io.Reader");
+ }
+ }
+
+ /**
+ * Check general preconditions for setAsciiStream methods.
+ *
+ * @param parameterIndex 1-based index of the parameter.
+ */
+ private final void checkAsciiStreamConditions(int parameterIndex)
+ throws SQLException {
+ checkStatus();
+ int jdbcTypeId = getParameterJDBCType(parameterIndex);
+ if (!DataTypeDescriptor.isAsciiStreamAssignable(jdbcTypeId)) {
+ throw dataTypeConversion(parameterIndex,
+ "java.io.InputStream(ASCII)");
}
}
@@ -907,8 +911,7 @@
}
/**
- * Check general (pre)conditions for setXXXStream methods operating on
- * binary streams.
+ * Check general preconditions for setBinaryStream methods.
*
* @param parameterIndex 1-based index of the parameter.
*/
@@ -916,13 +919,7 @@
throws SQLException {
checkStatus();
int jdbcTypeId = getParameterJDBCType(parameterIndex);
- switch (jdbcTypeId) {
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- case Types.BLOB:
- break;
- default:
+ if (!DataTypeDescriptor.isBinaryStreamAssignable(jdbcTypeId)) {
throw dataTypeConversion(parameterIndex, "java.io.InputStream");
}
}
@@ -1723,8 +1720,7 @@
*/
public void setAsciiStream(int parameterIndex, InputStream x)
throws SQLException {
- checkCharacterStreamConditions(parameterIndex,
- "java.io.InputStream(ASCII)");
+ checkAsciiStreamConditions(parameterIndex);
java.io.Reader asciiStream = null;
if (x != null) {
@@ -1763,7 +1759,7 @@
*/
public void setCharacterStream(int parameterIndex, Reader reader)
throws SQLException {
- checkCharacterStreamConditions(parameterIndex, "java.io.Reader");
+ checkCharacterStreamConditions(parameterIndex);
setCharacterStreamInternal(parameterIndex, reader,
true, -1);
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java?rev=423912&r1=423911&r2=423912&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedResultSet.java Thu Jul 20 04:54:35 2006
@@ -39,6 +39,7 @@
import org.apache.derby.iapi.sql.Activation;
import org.apache.derby.iapi.sql.execute.CursorActivation;
+import org.apache.derby.iapi.types.DataTypeDescriptor;
import org.apache.derby.iapi.types.DataValueDescriptor;
import org.apache.derby.iapi.types.RawToBinaryFormatStream;
import org.apache.derby.iapi.types.ReaderToUTF8Stream;
@@ -2316,6 +2317,59 @@
}
}
+ /**
+ * Check whether it is OK to update a column using
+ * <code>updateAsciiStream()</code>.
+ *
+ * @param columnIndex the column index (first column is 1)
+ * @exception SQLException if the column could not be updated with
+ * <code>updateAsciiStream()</code>
+ */
+ private void checksBeforeUpdateAsciiStream(int columnIndex)
+ throws SQLException
+ {
+ checksBeforeUpdateXXX("updateAsciiStream", columnIndex);
+ int colType = getColumnType(columnIndex);
+ if (!DataTypeDescriptor.isAsciiStreamAssignable(colType)) {
+ throw dataTypeConversion(columnIndex, "java.io.InputStream");
+ }
+ }
+
+ /**
+ * Check whether it is OK to update a column using
+ * <code>updateBinaryStream()</code>.
+ *
+ * @param columnIndex the column index (first column is 1)
+ * @exception SQLException if the column could not be updated with
+ * <code>updateBinaryStream()</code>
+ */
+ private void checksBeforeUpdateBinaryStream(int columnIndex)
+ throws SQLException
+ {
+ checksBeforeUpdateXXX("updateBinaryStream", columnIndex);
+ int colType = getColumnType(columnIndex);
+ if (!DataTypeDescriptor.isBinaryStreamAssignable(colType)) {
+ throw dataTypeConversion(columnIndex, "java.io.InputStream");
+ }
+ }
+
+ /**
+ * Check whether it is OK to update a column using
+ * <code>updateCharacterStream()</code>.
+ *
+ * @param columnIndex the column index (first column is 1)
+ * @exception SQLException if the column could not be updated with
+ * <code>updateCharacterStream()</code>
+ */
+ private void checksBeforeUpdateCharacterStream(int columnIndex)
+ throws SQLException
+ {
+ checksBeforeUpdateXXX("updateCharacterStream", columnIndex);
+ int colType = getColumnType(columnIndex);
+ if (!DataTypeDescriptor.isCharacterStreamAssignable(colType)) {
+ throw dataTypeConversion(columnIndex, "java.io.Reader");
+ }
+ }
/**
* JDBC 2.0
@@ -2663,18 +2717,7 @@
*/
public void updateAsciiStream(int columnIndex, java.io.InputStream x,
long length) throws SQLException {
- checksBeforeUpdateXXX("updateAsciiStream", columnIndex);
-
- int colType = getColumnType(columnIndex);
- switch (colType) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- break;
- default:
- throw dataTypeConversion(columnIndex, "java.io.InputStream");
- }
+ checksBeforeUpdateAsciiStream(columnIndex);
java.io.Reader r = null;
if (x != null)
@@ -2708,18 +2751,7 @@
*/
public void updateAsciiStream(int columnIndex, InputStream x)
throws SQLException {
- checksBeforeUpdateXXX("updateAsciiStream", columnIndex);
-
- int colType = getColumnType(columnIndex);
- switch (colType) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- break;
- default:
- throw dataTypeConversion(columnIndex, "java.io.InputStream");
- }
+ checksBeforeUpdateAsciiStream(columnIndex);
java.io.Reader r = null;
if (x != null) {
@@ -2753,17 +2785,7 @@
*/
public void updateBinaryStream(int columnIndex, java.io.InputStream x,
long length) throws SQLException {
- checksBeforeUpdateXXX("updateBinaryStream", columnIndex);
- int colType = getColumnType(columnIndex);
- switch (colType) {
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- case Types.BLOB:
- break;
- default:
- throw dataTypeConversion(columnIndex, "java.io.InputStream");
- }
+ checksBeforeUpdateBinaryStream(columnIndex);
if (x == null)
{
@@ -2794,17 +2816,7 @@
*/
public void updateBinaryStream(int columnIndex, InputStream x)
throws SQLException {
- checksBeforeUpdateXXX("updateBinaryStream", columnIndex);
- int colType = getColumnType(columnIndex);
- switch (colType) {
- case Types.BINARY:
- case Types.VARBINARY:
- case Types.LONGVARBINARY:
- case Types.BLOB:
- break;
- default:
- throw dataTypeConversion(columnIndex, "java.io.InputStream");
- }
+ checksBeforeUpdateBinaryStream(columnIndex);
updateBinaryStreamInternal(columnIndex, x, true, -1,
"updateBinaryStream");
}
@@ -2878,20 +2890,7 @@
*/
public void updateCharacterStream(int columnIndex, java.io.Reader x,
long length) throws SQLException {
- //If the column type is the right datatype, this method will eventually call getDVDforColumnToBeUpdated which will check for
- //the read only resultset. But for other datatypes, we want to catch if this updateCharacterStream is being issued
- //against a read only resultset. And that is the reason for call to checksBeforeUpdateXXX here.
- checksBeforeUpdateXXX("updateCharacterStream", columnIndex);
- int colType = getColumnType(columnIndex);
- switch (colType) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- break;
- default:
- throw dataTypeConversion(columnIndex, "java.io.Reader");
- }
+ checksBeforeUpdateCharacterStream(columnIndex);
updateCharacterStreamInternal(columnIndex, x, false, length,
"updateCharacterStream");
}
@@ -2915,17 +2914,7 @@
*/
public void updateCharacterStream(int columnIndex, Reader x)
throws SQLException {
- checksBeforeUpdateXXX("updateCharacterStream", columnIndex);
- int colType = getColumnType(columnIndex);
- switch (colType) {
- case Types.CHAR:
- case Types.VARCHAR:
- case Types.LONGVARCHAR:
- case Types.CLOB:
- break;
- default:
- throw dataTypeConversion(columnIndex, "java.io.Reader");
- }
+ checksBeforeUpdateCharacterStream(columnIndex);
updateCharacterStreamInternal(columnIndex, x, true, -1,
"updateCharacterStream");
}