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 rh...@apache.org on 2013/04/29 19:33:42 UTC
svn commit: r1477222 - in /db/derby/code/trunk/java/engine/org/apache/derby:
iapi/sql/ impl/jdbc/ impl/sql/ impl/sql/execute/
Author: rhillegas
Date: Mon Apr 29 17:33:41 2013
New Revision: 1477222
URL: http://svn.apache.org/r1477222
Log:
DERBY-6206: Cleanup some mutability problems in the rg.apache.derby.impl.sql package.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/PreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/ResultDescription.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/jdbc/EmbedPreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericResultDescription.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericAggregator.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/PreparedStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/PreparedStatement.java?rev=1477222&r1=1477221&r2=1477222&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/PreparedStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/PreparedStatement.java Mon Apr 29 17:33:41 2013
@@ -191,6 +191,12 @@ public interface PreparedStatement
*/
DataTypeDescriptor[] getParameterTypes();
+ /**
+ * Get the type of the parameter at the given (0-based) index.
+ * Raises an exception if the index is out of range.
+ */
+ DataTypeDescriptor getParameterType( int idx ) throws StandardException;
+
/**
* Return the SQL string that this statement is for.
*
Modified: db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/ResultDescription.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/ResultDescription.java?rev=1477222&r1=1477221&r2=1477222&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/ResultDescription.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/iapi/sql/ResultDescription.java Mon Apr 29 17:33:41 2013
@@ -54,6 +54,11 @@ public interface ResultDescription
*/
public ResultColumnDescriptor[] getColumnInfo();
+ /**
+ * Return the information about a single column (0-based indexing)
+ */
+ public ResultColumnDescriptor getColumnInfo( int idx );
+
/**
* Returns a ResultColumnDescriptor for the column, given the ordiinal
* position of the column.
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=1477222&r1=1477221&r2=1477222&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 Mon Apr 29 17:33:41 2013
@@ -1552,54 +1552,20 @@ public class EmbedPreparedStatement
/**
- Check the parameterINdex is in range and return the
- array of type descriptors.
-
- @exception SQLException parameter is out of range
- */
- protected final DataTypeDescriptor[] getTypes(int parameterIndex)
- throws SQLException {
-
- DataTypeDescriptor[] types = preparedStatement.getParameterTypes();
-
- if (types == null) {
- throw newSQLException(SQLState.NO_INPUT_PARAMETERS);
- }
-
- /* Check that the parameterIndex is in range. */
- if (parameterIndex < 1 ||
- parameterIndex > types.length) {
-
- /* This message matches the one used by the DBMS */
- throw newSQLException(SQLState.LANG_INVALID_PARAM_POSITION,
- new Integer(parameterIndex), new Integer(types.length));
- }
- return types;
- }
-
- /**
Get the target JDBC type for a parameter. Will throw exceptions
- if the parameter index is out of range
+ if the parameter index is out of range. The parameterIndex is 1-based.
@exception SQLException parameter is out of range
*/
protected int getParameterJDBCType(int parameterIndex)
- throws SQLException {
-
- DataTypeDescriptor[] types = getTypes(parameterIndex);
-
- int type = types[parameterIndex -1] == null ?
- Types.OTHER :
- types[parameterIndex - 1].getTypeId().getJDBCTypeId();
-
- if (SanityManager.DEBUG) {
- //int pmType = getEmbedParameterSetMetaData().getParameterType(parameterIndex);
- //if (type != pmType) {
- //SanityManager.THROWASSERT("MISMATCH PARAMETER META DATA param " + parameterIndex + " types " + type + " != " + pmType + "\n" + SQLText);
- //}
- }
-
- return type;
+ throws SQLException
+ {
+ try {
+ DataTypeDescriptor dtd = preparedStatement.getParameterType( parameterIndex-1 );
+
+ return (dtd == null) ? Types.OTHER : dtd.getTypeId().getJDBCTypeId();
+
+ } catch (StandardException t) { throw EmbedResultSet.noStateChangeException(t); }
}
/**
@@ -1610,9 +1576,14 @@ public class EmbedPreparedStatement
* @throws SQLException if parameter is out of range
*/
protected final String getParameterSQLType(int parameterIndex)
- throws SQLException {
- DataTypeDescriptor[] pTypes = getTypes(parameterIndex);
- return pTypes[parameterIndex-1].getTypeName();
+ throws SQLException
+ {
+ try {
+ DataTypeDescriptor dtd = preparedStatement.getParameterType( parameterIndex-1 );
+
+ return (dtd == null) ? null : dtd.getTypeName();
+
+ } catch (StandardException t) { throw EmbedResultSet.noStateChangeException(t); }
}
/**
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java?rev=1477222&r1=1477221&r2=1477222&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericPreparedStatement.java Mon Apr 29 17:33:41 2013
@@ -36,6 +36,7 @@ import org.apache.derby.iapi.services.st
import org.apache.derby.iapi.services.cache.Cacheable;
import org.apache.derby.catalog.UUID;
+import org.apache.derby.iapi.services.io.ArrayUtil;
import org.apache.derby.iapi.services.uuid.UUIDFactory;
import org.apache.derby.iapi.util.ByteArray;
import org.apache.derby.iapi.util.ReuseFactory;
@@ -48,6 +49,7 @@ import org.apache.derby.iapi.sql.Paramet
import org.apache.derby.iapi.sql.PreparedStatement;
import org.apache.derby.iapi.sql.Statement;
import org.apache.derby.iapi.types.DataTypeDescriptor;
+import org.apache.derby.iapi.types.DataTypeUtilities;
import org.apache.derby.iapi.sql.ResultDescription;
import org.apache.derby.iapi.sql.ResultSet;
import org.apache.derby.iapi.sql.Activation;
@@ -488,9 +490,33 @@ recompileOutOfDatePlan:
}
public DataTypeDescriptor[] getParameterTypes() {
- return paramTypeDescriptors;
+ return (DataTypeDescriptor[]) ArrayUtil.copy( paramTypeDescriptors );
}
+ /** Return the type of the parameter (0-based indexing) */
+ public DataTypeDescriptor getParameterType( int idx ) throws StandardException
+ {
+ if ( paramTypeDescriptors == null )
+ {
+ throw StandardException.newException( SQLState.NO_INPUT_PARAMETERS );
+ }
+
+ /* Check that the parameterIndex is in range. */
+ if ( (idx < 0) || (idx >= paramTypeDescriptors.length) )
+ {
+ /* This message matches the one used by the DBMS */
+ throw StandardException.newException
+ (
+ SQLState.LANG_INVALID_PARAM_POSITION,
+ new Integer( idx+1 ),
+ new Integer( paramTypeDescriptors.length )
+ );
+ }
+
+ return paramTypeDescriptors[ idx ];
+ }
+
+
public String getSource() {
return (sourceTxt != null) ?
sourceTxt :
@@ -571,7 +597,7 @@ recompileOutOfDatePlan:
*/
public Timestamp getBeginCompileTimestamp()
{
- return beginCompileTimestamp;
+ return DataTypeUtilities.clone( beginCompileTimestamp );
}
/**
@@ -581,7 +607,7 @@ recompileOutOfDatePlan:
*/
public Timestamp getEndCompileTimestamp()
{
- return endCompileTimestamp;
+ return DataTypeUtilities.clone( endCompileTimestamp );
}
void setCompileTimeWarnings(SQLWarning warnings) {
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericResultDescription.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericResultDescription.java?rev=1477222&r1=1477221&r2=1477222&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericResultDescription.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericResultDescription.java Mon Apr 29 17:33:41 2013
@@ -27,6 +27,7 @@ import org.apache.derby.iapi.sql.ResultD
import org.apache.derby.iapi.services.sanity.SanityManager;
+import org.apache.derby.iapi.services.io.ArrayUtil;
import org.apache.derby.iapi.services.io.StoredFormatIds;
import org.apache.derby.iapi.services.io.FormatIdUtil;
import org.apache.derby.iapi.services.io.Formatable;
@@ -145,9 +146,11 @@ public final class GenericResultDescript
}
public ResultColumnDescriptor[] getColumnInfo() {
- return columns;
+ return (ResultColumnDescriptor[]) ArrayUtil.copy( columns );
}
+ public ResultColumnDescriptor getColumnInfo( int idx ) { return columns[ idx ]; }
+
/**
* position is 1-based.
* @see ResultDescription#getColumnDescriptor
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericAggregator.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericAggregator.java?rev=1477222&r1=1477221&r2=1477222&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericAggregator.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/execute/GenericAggregator.java Mon Apr 29 17:33:41 2013
@@ -312,7 +312,7 @@ class GenericAggregator
(
cf,
aggInfo.getAggregateName(),
- aggInfo.getResultDescription().getColumnInfo()[ 0 ].getType()
+ aggInfo.getResultDescription().getColumnInfo( 0 ).getType()
);
} catch (Exception e)